void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
delay_ms(10); //Ïû¶¶
switch(GPIO_Pin)
{
case GPIO_PIN_0:
if(WK_UP==1)
{
for(u8 i=0;i<3;i++)
{
LED3=!LED3;
delay_ms(500);
LED3=!LED3;
delay_ms(500);
}
printf("WK_UP Start"); }
break;
case GPIO_PIN_8:
if(KEY0==0) //¿ØÖÆLED0·×ª
{
for(u8 i=0;i<5;i++)
{
LED4=!LED4;
delay_ms(500);
LED4=!LED4;
delay_ms(500);
}
}
break;
case GPIO_PIN_9:
if(KEY1==0)
{
LED0=!LED0; //¿ØÖÆLED1·×ª
printf("KEY1 Start");
}
break;
case GPIO_PIN_2:
if(KEY2==0)
{
printf("KEY2 Start");
BEEP=1;
delay_ms(1000);
BEEP=0;
}
}
}
中断函数所包括的,所有的外部中断会调用此函数
注意优先级的设置
- 按KEY1按键后串口打印“KEY1 Start ”,控制LED0翻转;
- 按KEY2按键后串口打印“ KEY2 Start ” 1s后串口打印“KEY2 End”, 同时蜂鸣器鸣响一次;
- 按WK_UP按键后串口打印“WK_UP Start ” LED3每隔1s翻转一次,翻转3次后串口打印“WK_UP End”;
- 按KEY0按键后串口每隔1s打印“KEY0 Start ” “KEY0 End”一次,同时LED4闪烁一次,此现象共执行五次。
- KEY2能够打断其他中断程序