STM32的软件复位

记得以前用的c8051单片机有软件复位,启动了芯片内部的复位管脚,实现了重新上电复位一样的效果。

那么STM32有没有呢?

首先想到的是自己弄一个硬件看门狗。但是我没用过硬件看门狗,也不太想用。

那么用STM32芯片内置的独立看门狗呢?也不太好。独立看门狗是用于程序跑死的情况。而软件复位是开发者主动让cpu重启的。分开的话,对于开发者来说,可以判断是什么引起的复位,而不是糊里糊涂的让设备能工作就完事。

于是查了资料,

在CSDN的博客里,http://blog.csdn.net/huangtonggao/article/details/6446208就有网友的说明:

其实就是调用的两个函数,并且都是官方提供的,

NVIC_SETFAULTMASK();
GenerateSystemReset();

当然,不同官方库的版本可能函数名称有所差异。

------------------------------------------------------------------------

在程序没有添加软件复位的上面两句代码的情况下,通过仿真器点击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博客 <STM32初始化USART后发送了一个0x00?why??>

但是软件复位后,usart不输出那个0x00  

=====================================

RM0008里面有:

芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有
至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。

 




      


你可能感兴趣的:(STM32的软件复位)