找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2350|回复: 1
打印 上一主题 下一主题
收起左侧

STM32 禁用或开启总中断

[复制链接]
跳转到指定楼层
楼主
ID:59284 发表于 2014-3-2 18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      STM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。

ARM MDK中提供了如下两个接口来禁用和开启总中断:
__disable_irq();   // 关闭总中断
__enable_irq();    // 开启总中断        但测试发现这样一个问题,在关闭总中断后,如果有中断触发,虽然此时不会引发中断,但在调用__enable_irq()开启总中断后,MCU会立即处理之前触发的中断。这说明__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发,中断发生后,相应的寄存器会将中断标志置位,在__enable_irq()开启中断后,由于相应的中断标志没有清空,因而还会触发中断。所以要想禁止所有中断,必须对逐个模块的中断进行 Disable操作,由于每个模块中断源有很多,对逐个中断Disable的话比较复杂,较为简单的方法是通过 XXX_ClearITPendingBit()清除中断标志或者直接通过XXX_DeInit()来清除寄存器的状态。这样在 __enable_irq()开启总中断后,MCU就不会响应之前触发的中断了。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:428438 发表于 2019-9-4 09:59 | 只看该作者
不错,学习了。之前对这也有点疑问,不知道是否会丢失中断。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表