stm32外部按键中断无法退出中断问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32外部按键中断无法退出中断问题相关的知识,希望对你有一定的参考价值。

我使用按键中断控制我的LED的状态,当按键按下时,灯亮,按键按上时,灯却灭不了(弹簧按键),我想是不是因为我的中断没处理好,请大神指教。芯片stm32103vbt6,库文件是cube1.2 。代码如下。LED灯引脚PE13,按键(USER_BUTTON_PIN)引脚PE2。
static GPIO_InitTypeDef GPIO_InitStruct;

void SystemClock_Config(void);

static void EXTI2_IRQHandler_Config(void)

GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOE_CLK_ENABLE();

GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);

/* Enable and set EXTI line 0 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);


int main(void)


HAL_Init();

/* Configure the system clock to 64 MHz */
SystemClock_Config();

/* -1- Enable GPIO Clock (to be able to program the configuration registers) */
LED2_GPIO_CLK_ENABLE();

/* -2- Configure IO in output push-pull mode to drive external LEDs */
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Pin = LED2_PIN;
HAL_GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStruct);
HAL_GPIO_WritePin(LED2_GPIO_PORT,LED2_PIN, GPIO_PIN_SET);/*灯灭*/

EXTI2_IRQHandler_Config();

while (1)



void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

if (GPIO_Pin == USER_BUTTON_PIN)

/* 灯亮*/
HAL_GPIO_WritePin(LED2_GPIO_PORT,LED2_PIN, GPIO_PIN_RESET);




中断处理函数
void EXTI2_IRQHandler(void)

HAL_GPIO_EXTI_IRQHandler(USER_BUTTON_PIN);


void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

/* EXTI line interrupt detected */
if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)

HAL_GPIO_EXTI_Callback(GPIO_Pin);
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);


你这进入中断,没有清楚中断标志位。

STM32_EXIT中断:
http://blog.csdn.net/ybhuangfugui/article/details/51378856

http://blog.csdn.net/ybhuangfugui追问

最后那一句,__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);就是清除中断标志位啊?不知道我说得对不

参考技术A 中断肯定是进去了,但是中断程序中没有关灯的命令行,可以试试这个
if (GPIO_Pin == USER_BUTTON_PIN)

/* 灯亮*/
HAL_GPIO_WritePin(LED2_GPIO_PORT,LED2_PIN, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED2_GPIO_PORT,LED2_PIN, GPIO_PIN_SET);/* 灯灭*/

以上是关于stm32外部按键中断无法退出中断问题的主要内容,如果未能解决你的问题,请参考以下文章

STM32——外部中断

STM32_按键_外部中断_定时器扫描_循环扫描_FIFO机制

STM32Cubemx——外部中断

STM32能通过按键中断实现连续按键吗

最近在自学STM32,写了一个按键中断程序,但是中断总是不响应...望大虾赐教,谢谢....程序如下

对stm32中断的理解