【GPIO】外部中断
下载例程代码:
通过外部中断实现按键检测:按KEY1让绿灯亮/灭翻转。
如何使用例程
编译并下载程序到学习板,即可看到程序效果:
程序效果:按下KEY1,触发中断,绿灯亮/灭翻转。
例程讲解
下面介绍了如何自己实现该例程的功能
1、工程配置
- 分配引脚:在Pinout&Configuration页面,配置如下引脚
- 中断引脚:将 PB12 设置为 GPIO_EXTI12,并设置 User label 为 KEY1
- 输出引脚:将 PA7 设置为 GPIO_Outpu,并分别设置 User label 为 GREEN
左键点击对应的引脚,选择 GPIO_Output 或 GPIO_EXTI12;
右键点击对应的引脚,选择 User label,分别输入 GREEN、KEY1
- 配置GPIO:在Pinout&Configuration -> GPIO
注意:如果要在回调函数中使用HAL_Delay(),就必须配置中断优先级 - 将 PB12 的 GPIO mode 配置为 External Interrupt Mode with Falling edge trigger detection,开启下降沿检测
- 切换到NVIC选项卡,使能 EXTI line[15:10] Interrupts
- System Core -> NVIC,将 Time base: System tick timer 的主要优先级调到比EXTI line高
- 否则 HAL_Delay() 函数无法在中断回调函数中执行,会导致程序卡在回调函数中
2、代码
- 在 stm32f1xx_it.c 中添加中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),当中断被触发时,该回调函数就会执行
- 在中断回调函数中实现绿灯的亮灭翻转
C语言
1void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)2{3 // 确认一下是否为KEY1按下4 if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0){5 // 翻转绿灯6 HAL_GPIO_TogglePin(GREEN_GPIO_Port, GREEN_Pin);7 // 等待KEY1松开8 while(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0);9 }10}