1. 按键输入的工程本质与物理基础
在嵌入式系统中,按键绝非简单的“按下-释放”开关。它是一个典型的机电复合器件,其行为由机械触点的物理特性决定。当手指施加压力使两个金属簧片接触时,并非瞬间形成稳定导通;相反,在接触初期,由于簧片弹性形变、表面氧化层击穿、微小颗粒干扰等因素,触点会在极短时间内(通常为5–20ms)反复弹跳——即发生“抖动”(Bounce)。这种抖动在人眼看来是瞬时的,但在STM32F103这类运行于72MHz主频的MCU上,意味着数千甚至上万个指令周期内,GPIO引脚电平将在高、低之间无序翻转。
若不加处理直接采样,软件将无法可靠判断用户真实意图:一次按键可能被误判为多次短按,或在状态翻转逻辑中触发不可预测的振荡。因此,按键输入的可靠性设计,本质上是一场对物理世界不确定性的工程驯服——它既需要硬件层面的预处理,也依赖软件层面的逻辑校准。
学习板原理图第4页左下角明确标示了K1与K2两颗按键的电路结构。二者均采用经典的上拉设计:按键一端接地(GND),另一端通过10kΩ电阻连接至3.3V电源,并接入对应GPIO引脚。该设计的关键在于定义了“默认状态”:当按键未被按下时,电路处于开路,10kΩ上拉电阻将GPIO引脚电平稳定地钳位在3.3V,即逻辑高电平(GPIO_PIN_SET);当按键被按下时,引脚经按键内部触点直接短接到GND,电平被强制拉低至0V,即逻辑低电平(GPIO_PIN_RESET)。这种“常态高、触发低”的设计,不仅符合CMOS输入电平容限,更天然具备抗干扰能力——长线传输中,低电平信号受噪声影响较小,且开路状态不易引入感应电压。
值得注意的是,K1与K2虽同为上拉按键,但其外部电路存在关键差异:K1依赖外置10kΩ电阻实现上拉,而K2则完全省略了该电阻