一、打开cubemx,配置按键相关的管脚为外部中断模式
根据阿波罗开发板的原理图可以知道,只有PA0脚当按键按下时是高电平,其余几个按键按下时都为低电平,因此配置PA0为下拉,上升沿触发中断,其他按键管脚配置为上拉,下降沿触发中断。配置完如下图所示
二、配置中断优先级
点击NVIC选项卡,配置如下
三、生成代码
在stm32f7xxit.c文件中可以看到与外部中断相关的中断服务函数
根据上图的方法我们进入到HAL_GPIO_EXTI_IRQHandler函数中可以看到函数调用了 HAL_GPIO_EXTI_Callback函数,我们只需要重构该函数即可。
四、添加代码
在stm32f7xxit.c中添加函数如下
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case KEY0_Pin:
printf("key0 pass\r\n");
break;
case KEY1_Pin:
printf("key1 pass\r\n");
break;
case KEY2_Pin:
printf("key2 pass\r\n");
break;
case WK_UP_Pin:
printf("kwk_up pass\r\n");
break;
default:break;
}
}
五、编译下载,通过串口调试助手观看现象
按下按键会有对应的键值打印出来,实际现象当按下某个按键时,该键值会多次打印,是由于按键抖动造成了,只需要添加消抖程序即可