在是stm32的hal库中定义了一个按键外部中断,可按下后其它程序就不在执行了,定义了一个断点调试,每次按下后都会在这里停下,说明一直处于中断吗?有没有解决方法?
这是中断回调函数,可B1的按键中断是没有问题的
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
for(uint16_t i =0;i<50;i++);
switch(GPIO_Pin)
{
case GPIO_PIN_1:
// if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==RESET)
// {
// for(uint16_t i =0;i<500;i++);
// while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==RESET);
// HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
//// led1_turn();
// }
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==RESET)
{
for(uint16_t i =0;i<500;i++);
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
// led2_turn();
}
break;
case GPIO_PIN_2:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==RESET)
{
for(uint16_t i =0;i<500;i++);
while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
i++;
}
// led1_turn();
break;
default:
return;
}
}
这里是引脚定义PB1,PA2
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 2);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);