一、配置外部中断
1.配置引脚:
1.选择外部中断
2.选择触发条件
3.选择上下拉
2.使能中断
1勾选中断,使能中断
3.生成代码中,在main.c中添加中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0) //判断中断线
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
if(GPIO_Pin == GPIO_PIN_2)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
if(GPIO_Pin == GPIO_PIN_3)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
if(GPIO_Pin == GPIO_PIN_4)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
}
二、HAL_Delay()放在中断里,程序进入死循环
1.原因:
由于HAL_Delay()中所用延时的中断的优先级比外部中断的低所以读不出时间来,程序一直在HAL_Delay()函数里
参考文章:中断里调用HAL_Delay()进入死循环的原因
2.解决措施:
构造延时函数:
uint16_t m=0;
while(m<=25000) //一个数大约延时1us
{
m++;
}
m=0;