实现代码(调用该函数即可):
#include "stm32f4xx.h"
//重新启动
void restartSystem(){
__set_FAULTMASK(1);
HAL_NVIC_SystemReset();
}
相关知识:
STM32关全局中断:
第一种方法
操作PRIMASK寄存器
__set_PRIMASK(0) /* 使能全局中断 */
__set_PRIMASK(1) /* 禁止全局中断*/
或者
__enable_irq(); /* 使能全局中断 */
__disable_irq(); /* 禁止全局中断*/
PRIMASK 用于除能在 NMI 和硬 fault 之外的所有异常,它有效地把当前优先级改为 0 (可编程优先级中的最高优先级)。
第二种方法
操作FAULTMASK寄存器
__set_FAULTMASK(0); /* 使能全局中断*/
__set_FAULTMASK(1) /* 禁止全局中断*/
该函数操作FAULTMASK寄存器,它把当前优先级改为‐1。硬fault都被掩蔽。注意的是, FAULTMASK会在异常退出时自动清零。
第三种方法
操作BASEPRI寄存器
__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)
该函数操作的是BASEPRI寄存器,在更精巧的设计中,需要对中断掩蔽进行更细腻的控制——只掩蔽优先级低于某一阈值的中断——它们的优先级在数字上大于等于某个数。这个数就存储在BASEPRI中。往BASEPRI中写0,BASEPRI将停止掩蔽任何中断。例如,如果你需要掩蔽所有优先级不高于0x60的中断,则可以如下编程:
__set_BASEPRI(0x60);
————————————————
版权声明:本文为CSDN博主「几个叶子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44015616/article/details/153272584
|
|