引脚跳了一下,程序为什么不一定立刻响应?|引脚电路 11
封面为 AI 辅助概念插画;电路工作过程以正文动画为准。

第一系列解释过中断会让程序进入处理函数。这次从引脚外面开始:一条真实电压变化,要经过哪些环节,才可能成为软件事件?
GIF 是数字输入、边沿检测、挂起请求与软件处理的简化链路,非芯片仿真、非硬件实测。以 STM32F1 的 EXTI 概念帮助理解,但动画不是周期精确模型;时间已放慢。
电压先变成逻辑

电压需要先满足输入接收条件,才会被解释成逻辑状态。悬空、过压、噪声、过短脉冲,都不能靠“打开中断”自动解决。输入滤波或同步能力也因芯片和路径而异。
接下来才是选择上升沿、下降沿等触发条件。按下按钮形成哪种边沿,取决于上拉、下拉与接线;中断控制器不会天然知道“按下”的语义。
本课图中的小方块代表功能关系,不保证某型号内部恰好由这些独立模块按图布局。开发时应查看具体手册的引脚映射、最小脉冲和唤醒条件。
请求到达,不等于马上执行

在典型 EXTI 路径中,边沿检测可以形成挂起状态,再由使能、屏蔽及中断控制条件决定是否向 CPU 提出请求。CPU 是否正在处理更高优先级任务,也会影响响应时间。
这说明必须区分三个时刻:外部边沿发生、硬件记录请求、软件开始处理。只看程序里某个打印时间,不能反推出精确的边沿时刻。
图中用一枚“待处理”标志解释状态,并不假定它是无限长事件队列。同一来源的多个变化若在清除前到来,可能合并在一个挂起状态里,不能认为任何速度的脉冲都会逐个得到一次回调。
中断不是免费的消抖器

如果按钮抖动产生三个下降沿,而硬件与软件条件允许响应,就可能得到多次请求。它并不知道这些变化来自同一次机械按压。
一种设计思路是让中断快速记录候选事件,再由主循环或定时任务检查稳定状态。确认等待期间也要定义如何处理新变化,不能仅仅在中断里长时间阻塞,让其他工作一起停下来。
共享变量也需要适当同步。volatile 有助于表达变量可能被异步改变,但不自动保证复合操作原子性,也不能代替所有并发保护。
清除规则要逐项看
以 STM32F1 EXTI 的挂起位为例,官方驱动宏通过向相应位写 1 清除挂起状态。不同外设可能有不同规则,不能看到“清零标志”就随意写 0,更不能对特殊状态寄存器无条件套用普通读改写。
优先使用对应版本的官方驱动或严格依照参考手册,并核对共享中断线的其他来源。ISR 应只处理必要工作,把慢速通信、排版输出等安排到合适的执行环境。
看完再猜
如果关中断期间来了十次脉冲,重新打开后是否必定回调十次?不能保证。要看硬件事件保存机制;需要精确计数时,应评估定时器计数、输入捕获等更适合的硬件功能。
资料:ST EXTI 功能概览、ST STM32F1 官方 GPIO/EXTI 驱动。
发现更多好玩的开源项目
专注 Arduino、开源硬件、端侧 AI 和值得收藏的开发者工具。
长按二维码关注「GitStar」
所有动画为教学原理示意,非芯片仿真、非硬件实测。网页发布:2026-09-22。