1. 从零开始:为什么你需要掌握GPIO外部中断?
如果你刚开始玩STM32,尤其是像H743这样的高性能MCU,你可能会觉得,不就是按个按键让灯亮灭吗?用轮询(Polling)的方式,在主循环里不停地去读那个引脚的电平不就行了?我以前也是这么想的,直到我在一个实际项目里踩了坑。那个项目需要同时处理按键、串口数据、还有屏幕刷新。当我用轮询去检测按键时,整个系统的响应变得非常“迟钝”,按键经常要按好几次才有反应,屏幕动画也卡顿。后来我才明白,我的主循环大部分时间都被“这个按键现在到底是高还是低?”这种无意义的查询给占用了,真正干活的代码反而得不到及时执行。
这时候,外部中断(External Interrupt) 就像一位训练有素的“哨兵”。你不需要时时刻刻去问他“有情况吗?”,你只需要给他布置好任务:“伙计,帮我盯着这个引脚,一旦它从高电平变成低电平(也就是下降沿),立刻喊我!”然后你就可以放心地去处理其他更重要的任务了。当按键真的被按下,触发那个特定的电平变化时,这位“哨兵”会立刻打断你手头的工作(无论你当时在计算什么、发送什么数据),CPU会马上跳转到你预先写好的“应急预案”——也就是中断服务函数(ISR)——去执行,比如立刻翻转LED的状态。执行完毕后,CPU再回到刚才被打断的地方继续工作。整个过程非常迅速,用户完全感觉不到延迟,这就是“实时响应”的魅力。
所以,学习GPIO外部中断,绝不是为了完成一个简单的实验。它是你从“单片机编程爱好者”迈向“嵌入式系统开发者”的关键一步。你开始思考如何让CPU更高效地工作,如何协调多个并发的任务,如何构建一个响应迅速、稳定可靠的系统。STM32H743作为一款功能强大的MCU,其外部中断系统也非常灵活和强大,掌握了它,你就能轻松应对各种需要快速响应外部事件的场景,比如旋转编码器、限位开关、外部传感器信号等。
2. 动手之前:硬件连接与核心概念扫盲
在写代码之前,我们得先把硬件环境搭好,并且理解几个最核心的概念,这样后面的配置才不会稀里糊涂。
硬件连接其实很简单:
- LED灯:我用的开发板上,LED1通常连接在某个GPIO引脚上,比如PB6。你需要找到原理图确认一下。LED一般是阳极通过一个限流电阻(比如330欧姆)接到GPIO引脚,阴极接地。这样,当GPIO输出高电平时,LED点亮;输出低电平时,LED熄灭。
- 按键:我们实验用的是五向摇杆的中间按键(CTR)。根据原始文章,它连接在PI11引脚上。按键的一端接PI11,另一端通常接地。所以,当按键没有按下时,由于我们会在软件中启用内部上拉电阻,PI11会被拉至高电平;当按键按下时,PI11直接连接到地,变为低电平。
这里就引出了第一个关键概念:触发边沿(Trigger Edge)。我们想让按键在“按下”这个动作发生时触发中断。按键按下,电平从高变低,这个变化过程叫做下降沿(Falling Edge)。所以,我们需要将外部中断配置为下降沿触发。相对应的还有上升沿(Rising Edge)和双边沿(Rising/Falling Edge)触发,你可以根据实际传感器信号的特点来选择。
第二个核心概念是GPIO的工作模式。原始文章里列举了很多,对于中断来说,我们只关心输入模式。这里特别要理解上拉输入(GPIO_PULLUP) 和浮空输入(GPIO_NOPULL) 的区别。我们的按键电路是直接对地短路的,如果没有上拉电阻,引脚在未按下时就是“悬空”状态,电平不确定,极易受干扰。因此,我们必须启用内部上拉电阻,给PI11一个默认的、确定的高电平。这样,未按下时为高,按下时被拉低,电平变化清晰明确,中断触发也就稳定可靠。
第三个必须搞清楚的是外部中断(IT) 和外部事件(EVT) 的区别。这可能是很多新手容易混淆的地方。简单来说:
- 外部中断(IT):不仅会设置一个中断标志位,还会<


143

被折叠的 条评论
为什么被折叠?



