STM32_总中断关闭
STM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败 。
ARM MDK中提供了如下两个接口来禁用和开启总中断:
__disable_irq();// 关闭总中断
__enable_irq();// 开启总中断
【STM32_总中断关闭】但测试发现这样一个问题,在关闭总中断后,如果有中断触发,虽然此时不会引发中断,但在调用__enable_irq()开启总中断后,MCU会立即处理之前触发的中断 。这说明__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发,中断发生后,相应的寄存器会将中断标志置位,在__enable_irq()开启中断后,由于相应的中断标志没有清空,因而还会触发中断 。所以要想禁止所有中断,必须对逐个模块的中断进行Disable操作,由于每个模块中断源有很多,对逐个中断Disable的话比较复杂,较为简单的方法是通过XXX_ClearITPendingBit()清除中断标志或者直接通过XXX_DeInit()来清除寄存器的状态 。这样在__enable_irq()开启总中断后,MCU就不会响应之前触发的中断了 。
推荐阅读
- 一文读懂电源架构和电源管理总线的原理
- STM32F0xx_SPI读写_Flash配置详细过程
- 今年最流行的客厅设计,总有一款适合你
- STM32-中断应用
- 关于STM32单片机GPIO口上拉与下拉输入
- 关于STM32定时器使用的一个注意事项
- 塑钢门窗选购知识总汇
- 装修报价注意事项汇总
- 总结4大瓦工施工错误
- 总结墙面验收的技巧 杜绝墙面质量问题的产生