历史上的今天
今天是:2024年09月13日(星期五)
2018年09月13日 | STM32中NVIC_SystemReset()函数的作用?什么时候用?
2018-09-13 来源:eefocus
STM32软件复位有两种方式
(1)方式一:NVIC_SystemReset()函数用来复位STM32.
注意1:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK置位。需要加上这句:__set_FAULTMASK(1);意思是关闭所有中断的意思,目的是在执行NVIC_SystemReset()复位函数过程中不被中断所打断。两个函数执行后系统复位重新执行代码,包括之前所配置好的外设寄存器也都回到复位状态。如下:
__set_FAULTMASK(1);//关闭所有中断
NVIC_SystemReset();//复位函数
注意2:上面两个函数在core_cm3.h里面都有定义如下:
static __INLINE void NVIC_SystemReset(void)
{
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk);
__DSB();
while(1);
}
另外一些NVIC函数在misc.h中。
(2)方式二:1、通过置位NVIC中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET位:
LDR R0, =0xE000ED0C ; NVIC AIRCR address
LDR R1, =0x05FA0001 ; 置位 VECTRESET位,前面的0x05FA是访问钥匙
STR R1, [R0] ; 触发复位序列
deadloop
B deadloop ; 该死循环保证后面的指令不可能被执行到
这种复位的作用范围覆盖了整个CM3 处理器中,除了调试逻辑之外的所有角落,但是它不会影响到CM3 处理器外部的任何电路,所以单片机上的各片上外设和其它电路都不受影响。
史海拾趣
|
74系列数数字电路 7400、74H00、74L00、74LS00、74S00、74HC00、74C00、74F00、74ALS00四2输入与非门 Y=\\AB。 7401、74LS01、74HC01、74ALS01四2输入与非门(OC) Y=\\AB。 7402、74L02、74LS02、74S02、74HC02、74C02、74ALS02、74F02四2输 ...… 查看全部问答> |
|
hi,大家好,因为开发需要,本人对原来的2440开发板进行了内存升级,从原来的64MB升级为128MB,使用的是两片K4S511632D(原来是两片HY57V561620),现在遇到的情况是写入一个字节的数据后一整片内存区域的数据都跟着改变,查了很久也找不到原因,SDR ...… 查看全部问答> |
|
在windows ce 嵌入式高级编程及其实例详解一书中有一个关于gps信号读取的列子,我放到手机里为什么数据是一秒4位数据、一秒4位数据的收取,而且只有GPGSV数据,没有其他的,我用GPS Viewer软件设置串口4,4800接受正常,数据都是一秒一片数据,一秒 ...… 查看全部问答> |
|
请教:vc6.0移植到EVC,里面有很多的char报错,请问我应该怎么呢? 各位大虾好!我将一个vc6.0的程序移植到EVC下,遇到了关于数据类型转换的问题。我是个新手,对于应该用什么样的数据类型和函数比较迷惑,希望各位大侠指教! 我是这样做的,不知道对不对: 将VC的程序全部粘贴到EVC ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 2010年TI杯江苏赛区QQ交流群群号:100194463 2010年TI杯江苏赛区QQ交流群群号:100194463 2010年TI杯江苏赛区QQ交流群群号:100194463 2010年TI杯江苏赛区QQ交流群群号:100194463 2010年TI杯江 ...… 查看全部问答> |
|
从发送版卡中循环发出1024*1024的数据,发送条件是当l = 1时发送一行,即当l = 1时发送1024个数据,然后l = 0,经过一个小的时间间隔,令l = 1,继续发送1024个数据,如此一直循环发送。发送版发送的数据要到接收板上,同时将l信号和时钟信号一起发 ...… 查看全部问答> |




