📖 第 15 章:按键输入实验(Key Input)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 15
🗨️ 「按键是嵌入式最简单的人机交互:一上一下读懂了世界。」
这一章在干嘛? 按键输入实验:按键硬件消抖、上下拉配置、轮询读取按键状态、控制 LED 翻转。本章建立「输入电平读取」的肌肉记忆。
15.1 按键与输入数据寄存器简介15.2 硬件设计15.3 程序设计15.4 下载验证

15.1 按键与输入数据寄存器简介

按键一般是机械弹性开关:按下/松开时会产生 5~20 ms 的抖动。

原书图 15.1.1:按键抖动波形
原书图 15.1.1:按键抖动波形

抖动处理方法:

  1. 硬件 RC 滤波(增加成本);
  2. 软件延时(检测到按下后延时 20 ms 再确认)。

按键 IO 接 STM32 IO,配置为输入上拉模式(按下时低电平,松开时高电平)。

15.2 硬件设计

DMF407 板上 4 个按键 KEY0~KEY3,分别接 PE4 / PE3 / PE2 / PA0,按下时低电平。

KEY_UP 接 PA0,按下时高电平(用作「上/Wakeup」键)。

15.3 程序设计

15.3.1 编程步骤

  1. 开启 GPIOE / GPIOA 时钟;
  2. 配置 PE4/PE3/PE2 为输入上拉;
  3. 配置 PA0 为输入下拉;
  4. 读取 IDR,判断按键。

15.3.2 关键代码

uint8_t key_scan(void) {
    if (KEY0 == 0) { delay_ms(20); if (KEY0 == 0) return 1; }  // 单次按下
    if (KEY1 == 0) { ... }
    return 0;
}

main:
    while (1) {
        switch (key_scan()) {
            case 1: LED0_TOGGLE(); break;
            case 2: LED1_TOGGLE(); break;
            ...
        }
    }

原书图 15.3.2.1:按键消抖流程图
原书图 15.3.2.1:按键消抖流程图

支持连按: 检测到按下后不要 return 0,而是等松开再返回,更实用。

15.4 下载验证

按下 KEY0 → LED0 翻转;KEY1 → LED1 翻转;KEY_UP → 两个 LED 同时翻转。

🧠 小测验
按键抖动通常持续多久?
5~20 ms。
软件消抖的基本思路?
检测到按下 → 延时 10~20 ms → 再检测一次确认。
KEY0 是按下低电平还是按下高电平?
按下低电平(GPIO 配置输入上拉)。
← 上一篇🏠 顶层目录下一篇 →