1. 按键输入的工程本质与硬件基础
在嵌入式系统中,按键绝非简单的“按下-释放”物理动作,而是一个需要被精确建模、量化并纳入系统时序约束的信号源。其核心挑战在于:机械触点的物理特性决定了它无法提供理想的数字电平跳变,而微控制器的执行速度(通常以纳秒至微秒为单位)远高于人类操作的感知尺度(百毫秒级),这导致未经处理的原始按键信号在MCU眼中是一段持续数毫秒的、包含多次无规律高低电平翻转的“毛刺序列”。若直接将此信号用于状态判断或中断触发,必然引发误判、重复响应甚至系统逻辑紊乱。
1.1 按键抖动的物理成因与电气表现
按键抖动(Key Bounce)源于金属触点在接触与分离瞬间的弹性形变与微小振动。当两个金属片初次接触时,并非形成稳定导通,而是经历“瞬时接触—弹开—再接触”的反复过程;同理,在断开瞬间也存在“瞬时断开—微小粘连—最终分离”的现象。这一过程在示波器上表现为一段持续约5–20ms的、高频振荡的电压波形,其幅度覆盖整个逻辑电平范围(0V至VDD)。对于STM32F103这类主频72MHz的MCU,其指令周期约为14ns,一个10ms的抖动窗口内可执行超过70万条指令——这意味着在一次看似“单次”的按键操作中,主循环可能已对GPIO引脚采样了数十万次,每一次采样都可能得到一个完全不同的电平值。
1.2 硬件消抖:上拉/下拉电阻的电路设计逻辑
学习板原理图中K1与K2的电路差异,揭示了两种典型的硬件消抖策略。K1采用外部上拉电阻(10kΩ)连接至3.3V,其对应MCU引脚PB12配置为浮空输入(Floating Input)。该模式下,MCU内部输入缓冲器呈高阻态,对外部电路几乎无负载影响。此时,电路等效为一个分压网络:上拉电阻R_pullup与按键触点