STMCU小助手
发布时间:2022-2-6 21:45
|
在 STM32/Cortex-M3 中是通过改变 CPU 的当前优先级来允许或禁止中断。 PRIMASK 位:只允许 NMI 和 hard fault 异常,其他中断/ 异常都被屏蔽(当前 CPU 优先级=0)。 FAULTMASK 位:只允许 NMI,其他所有中断/异常都被屏蔽(当前 CPU 优先级=-1)。 在 STM32 固件库中(stm32f10x_nvic.c 和 stm32f10x_nvic.h) 定义了四个函数操作 PRIMASK 位和 FAULTMASK 位,改变 CPU 的当前优先级,从而达到控制所有中断的目的。 下面两个函数等效于关闭总中断: void NVIC_SETPRIMASK(void); void NVIC_SETFAULTMASK(void); 下面两个函数等效于开放总中断: void NVIC_RESETPRIMASK(void); void NVIC_RESETFAULTMASK(void); 上面两组函数要成对使用,不能交叉使用。 例如: 第一种方法: NVIC_SETPRIMASK(); //关闭总中断 NVIC_RESETPRIMASK(); //开放总中断 第二种方法: NVIC_SETFAULTMASK(); //关闭总中断 NVIC_RESETFAULTMASK(); //开放总中断 常常使用 NVIC_SETPRIMASK(); // Disable Interrupts NVIC_RESETPRIMASK(); // Enable Interrupts ------------------------------------------------------------------------------------------------- 在 3.0 的库中 已经没有 第一种方法: NVIC_SETPRIMASK(); //关闭总中断 NVIC_RESETPRIMASK(); //开放总中断 第二种方法: NVIC_SETFAULTMASK(); //关闭总中断 NVIC_RESETFAULTMASK(); //开放总中断 补充 可以用 #define CLI() __set_PRIMASK(1) #define SEI() __set_PRIMASK(0) |
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
STM32G0 系列 I2C 通信异常典型案例分析与解决方案总结
经验分享 | LAT1490 两个STM32G0 I2C 通信异常的案例分析
经验分享 | STM32G0 I2C bootloader Go 命令后调试连接失败:DBG_SWEN 位复位修复
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
微信公众号
手机版