STM32如何在我需要的时候关闭或打开外部中断EXTI?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32如何在我需要的时候关闭或打开外部中断EXTI?相关的知识,希望对你有一定的参考价值。

我用这条指令 EXTI->IMR &= ~(EXTI_Line5) 关闭了外部中断,后面用这条指令 EXTI->IMR != EXTI_Line5 来打开外部中段,发现无法打开外部中断了,就是经不去中断了,求解!!!
好像我打开外部中断的语句错了,改成 EXTI->IMR |= EXTI_Line5 就可以了

那个中断已经被触发了,你要做的只有是清中断标志位:
EXTI_ClearITPendingBit(EXTI_Line14);
EXTI_ClearFlag(EXTI_Line14);
非要关的话,我觉得这样就关了
EXTI_InitStructure.EXTI_Line = EXTI_Line14;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = DISABLE; //ENABLE
EXTI_Init(&EXTI_InitStructure);
参考技术A 有一个中断屏蔽寄存器EXTI->IMR,只要将相关通道清零就可屏蔽了。

STM32F407关闭总中断

    我们在写程序的时候,有的器件时序不允许被中断打断,这时候我们就需要在执行某段程序时,先把全部中断都关闭,执行完毕后,再打开。

  由于STM32F407的库函数的版本不同,所以关闭总中断的函数也不相同,这就给我们开发者带来一定的困扰,那么我们此时应该怎么办呢?

  其实在KEIL编程环境中,有一个KEIL专用的关闭/打开总中断的函数,这个函数定义在KEIL中找不到,但是就是可以用;如下:

__disable_irq() ; //关闭总中断
__enable_irq() ; //打开总中断

以上是关于STM32如何在我需要的时候关闭或打开外部中断EXTI?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的STM32 进入停止模式,外部中断没有响应

STM32F407关闭总中断

stm32如何在中断服务程序里关闭EXTI中断?

STM32 --- 什么时候打开复用IO的时钟(比如RCC_APB2Periph_AFIO)

stm32外部中断引脚模式改变

stm32 外部中断打断PWM