1. 按键输入的工程本质与硬件基础
在嵌入式系统中,按键从来不是“按下即响应”的理想开关。它是一个典型的机电混合器件,其内部由金属弹片构成,在接触与断开的瞬间,受机械惯性、触点氧化、微振动等因素影响,会在毫秒级时间尺度内产生数十次甚至上百次的电平跳变——这就是机械抖动(Mechanical Bounce)。对于运行在数十MHz主频下的STM32而言,一次抖动持续时间(通常5–20ms)相当于数万条指令周期。若不加处理,单次物理按键操作将被MCU误判为多次快速触发,导致LED状态翻转失控、计数器异常累加、通信协议帧错乱等典型故障。
学习板原理图第4页左下角明确标出了K1与K2两颗按键的硬件连接方式,这是理解后续软件逻辑的物理前提。二者均采用上拉输入(Pull-up Input)结构,但实现路径不同:K1依赖外部10kΩ电阻连接至3.3V电源;K2则直接利用STM32芯片内部上拉电阻。这种差异并非随意设计,而是工程权衡的结果——外部电阻精度高、温漂小、驱动能力强,适用于对可靠性要求极高的关键控制按键;而内部上拉电阻集成度高、节省PCB空间、降低BOM成本,适合非关键状态切换类按键。
当K1处于释放状态时,PB12引脚通过10kΩ电阻与3.3V相连,而STM32 GPIO在浮空输入(Floating Input)模式下,其输入缓冲器呈现极高阻态(典型值>10MΩ)。根据串联分压原理,10kΩ电阻上的压降可忽略不计,PB12实际电平被稳定钳位在3.3V附近,MCU读取为逻辑高电平(GPIO_PIN_SET)。一旦按键按下,PB12经按键触点直接短接到GND,此时无论外部上拉电阻阻值多大,PB12电平均被强制拉低至0V,MC