[应用相关] STM32实现软件复位

[复制链接]
388|0
荣陶陶 发表于 2025-11-9 08:01 | 显示全部楼层 |阅读模式
实现代码(调用该函数即可):

#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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

290

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部