1. GPIO输入基础与工程目标
在嵌入式系统开发中,GPIO(General Purpose Input/Output)是连接微控制器与外部世界的最基本接口。前序章节已详述如何配置GPIO为输出模式以驱动LED,本节将系统性地展开其输入功能的工程实现——通过按键状态控制LED行为。该能力是人机交互、状态检测、事件触发等绝大多数嵌入式应用的基石。
本工程基于STM32F103系列芯片(典型如STM32F103C8T6),使用STM32CubeMX 6.12 + HAL库 + Keil MDK-ARM v5.38工具链。硬件平台为通用STM32学习板,其原理图第4页左下角明确标示了两颗独立按键K1与K2的电气连接方式。工程目标具有明确的时序与逻辑特征:
- K1(PB12):实现电平触发式控制。按键按下(低电平)时,绿色LED(假设为PC13)常亮;按键释放(高电平)时,绿色LED熄灭。该模式适用于需要持续感知物理按压状态的场景,如电源开关、急停按钮。
- K2(PB13):实现边沿触发式控制。每次按键按下并释放后,红色LED(假设为PC14)的亮灭状态翻转一次(Toggle)。该模式适用于菜单导航、模式切换等需要离散事件计数的场景。
二者虽同属按键输入,但背后涉及的电路设计、软件逻辑、抗干扰策略存在本质差异。理解并区分这两种模式,是构建可靠嵌入式人机接口的第一步。
2. 按键硬件电路分析与上拉/下拉原理
2.1 机械按键的物理特性与抖动问题
机械式轻触按键的核心是内部金属弹片的物理接触。当按键被