我是靠谱客的博主 甜美电脑,最近开发中收集的这篇文章主要介绍STM32 禁用或开启总中断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       今天把之前自己的一些在中断方面所产生的疑惑把具体的解决办法给大家分享一下,希望能够帮到大家。

  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就不会响应之前触发的中断了。

 

最后也提供一些中断这方面的资料供学习参考用

http://www.makeru.com.cn/live/1392_1124.html?s=45051

转载于:https://www.cnblogs.com/923327iu/p/11497031.html

最后

以上就是甜美电脑为你收集整理的STM32 禁用或开启总中断的全部内容,希望文章能够帮你解决STM32 禁用或开启总中断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部