07 EXTI中断实验
按键控制流水灯实验 光照控制流水灯实验
up的视频讲解: https://space.bilibili.com/1455872040
例程代码: 📥按键控制流水灯实验代码
🔤中断服务函数
HAL 库为了用户使用方便,提供了一个中断通用入口函数 HAL_GPIO_EXTI_IRQHandler
-
在该函数内部直接调用中断回调函数 HAL_GPIO_EXTI_Callback()
-
用户只要在中断回调函数中写程序即可
1 🔽按键控制流水灯实验
1.1 实验连接

1.2 实验原理

-
当按键松开的时候 此时PA0处于一个浮空的状态 我们希望给它一个确定的低电平 所以我们可以将IO口下拉
-
当我们按下按键的时候 此时PA0就从低电平跳变成高电平 我们通过将PA0复用到EXTI0外部中断线

-
输入到EXTI外设通过
边缘检测电路后生成一个脉冲信号然后通过或门 接着再通过与门 -
这个
遮掩寄存器IMR我们在CubeMX中将GPIO配置为EXTI0的时候就会初始化为1 所以1乘任何数为它本身直接通过 -
接着将
Pending挂起中断请求寄存器置为1 向NVIC发出中断请求 NVIC就会对中断使能和中断优先级进行判定 当NVIC决定打断CPU的时候就会进入中断的四步流程
1.3 CubeMX配置
PA0选择GPIO_EXTI0,上升沿触发,Pull-down。NVIC打开EXTI line0中断;LED引脚保持上一节的推挽输出配置。




1.4 实验代码
全局
uint8_t flag = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
flag = 1;
}
main()
while(1)里面
if(flag == 1)
{
//流水灯1
}
else
{
//流水灯2
}
2 ☀️光照/温度控制流水灯实验
2.1 实验连接

2.2 实验原理
和按键触发一样 属于外部中断源
2.3 CubeMX配置
传感器DO接PA0,若模块DO为低有效,EXTI0改为下降沿触发;已有外部上拉时使用No Pull。若需要同时响应明暗两种变化,选择双边沿,并在回调/主循环读取当前电平决定动作。NVIC仍需使能EXTI0。
2.4 实验代码
我们直接复用按键控制的代码
补充阅读
以上实验代码保留视频原版。按键去抖与非阻塞事件处理见调试与常见问题,不替换视频代码。