1. GPIO输入原理与硬件设计基础
1.1 按键信号的物理本质与抖动成因
按键本质上是一种机械开关器件,其内部由弹性金属簧片与触点构成。当用户按下或释放按键时,簧片在弹性形变与回弹过程中,会与触点发生多次微秒级的瞬时接触与分离。这种物理现象在电气层面表现为一段持续数毫秒(典型值2–20ms)的非单调电平跳变序列——即“按键抖动”。
对STM32F103这类主频72MHz、指令周期约14ns的MCU而言,10ms时间窗口内可执行超70万条指令。若程序在抖动期间连续采样GPIO引脚,将捕获到一连串高/低电平交替的无效状态:HIGH → LOW → HIGH → LOW → ... → STABLE_LOW。此时单纯判断“电平为LOW即按键按下”将导致误触发——一次物理按键可能被识别为数十次逻辑按键。
抖动并非设计缺陷,而是所有机械开关的固有特性。解决路径分为硬件与软件两个维度,二者常协同使用以提升系统鲁棒性。
1.2 硬件消抖电路分析:上拉/下拉电阻与滤波电容
观察学习板原理图第4页左下角按键电路,K1与K2均采用RC滤波结构,但上拉配置存在差异:
K1电路(外部上拉):PB12引脚通过10kΩ电阻连接至3.3V电源,按键另一端接地。未按压时,PB12经10kΩ电阻获得稳定高电平;按压时,PB12经按键导线直连GND,呈现稳定低电平。
K2电路(内部上拉):PB13引脚未接外部电阻,直接通过按键接地。其电平状态依赖于STM32芯片内部可配置的上