记得以前用的c8051单片机有软件复位,启动了芯片内部的复位管脚,实现了重新上电复位一样的效果。
那么STM32有没有呢?
首先想到的是自己弄一个硬件看门狗。但是我没用过硬件看门狗,也不太想用。
那么用STM32芯片内置的独立看门狗呢?也不太好。独立看门狗是用于程序跑死的情况。而软件复位是开发者主动让cpu重启的。分开的话,对于开发者来说,可以判断是什么引起的复位,而不是糊里糊涂的让设备能工作就完事。
于是查了资料,
在CSDN的博客里,http://blog.csdn.net/huangtonggao/article/details/6446208就有网友的说明:
其实就是调用的两个函数,并且都是官方提供的,
当然,不同官方库的版本可能函数名称有所差异。
------------------------------------------------------------------------
在程序没有添加软件复位的上面两句代码的情况下,通过仿真器点击MDK界面的load按钮,就打印窗口输出了Software reset 复位信息(RCC_GetFlagStatus函数的返回值),如下:
HSI oscillator clock ready,
HSE oscillator clock ready,
PLL clock ready ,
Pin reset ,
POR/PDR reset ,
Software reset ,
在程序没有添加软件复位的上面两句代码的情况下,启动电源重新上电,输出如下信息:
HSI oscillator clock ready,
HSE oscillator clock ready,
PLL clock ready
Pin reset
POR/PDR reset
================================================
另外还有一点要注意就是软复位与上电复位的区别是什么?
在RM0008(2010.1.10) 中文版,里面写到
---------------
软件复位
通过将Cortex™-M3中断应用和复位控制寄存器中的SYSRESETREQ位置’1’,可实现软件复
位。请参考Cortex™-M3技术参考手册获得进一步信息。
6.1.3 备份域复位
备份区域拥有两个专门的复位,它们只影响备份区域(见图4)。
当以下事件中之一发生时,产生备份区域复位。
55/754
1. 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(见6.3.9节)中的
BDRST位产生。
---------------------
在杭州 宋先生的《权威指南》的第212页码说软复位有两种方法,第一种是只复位cm3内核,不复位外设。第二种是内核和外设都复位,但后备区域不复位(就是用电池供电)。
------------------------
了解了这些,下面就开始在试试看,加了软件复位的那两句话会有什么发生?
在while 大循环里面加上10秒后软件复位,重新上电,结果输出:
HSI oscillator clock ready,
HSE oscillator clock ready,
PLL clock ready
Pin reset
POR/PDR reset
Software reset
==========================================
软件复位和硬件上电还是有区别的。
刚才重新上电,usart1输出0x00. 看我的csdn博客
但是软件复位后,usart不输出那个0x00
=====================================
RM0008里面有:
芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有
至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。