1. 项目概述
用STM32微控制器自制机械键盘,这可能是每个嵌入式开发者和键盘发烧友都曾幻想过的DIY项目。作为一个长期混迹于硬件开发圈的老鸟,我最近终于把这个想法付诸实践。不同于市面上现成的键盘方案,基于STM32的自制键盘不仅能完全自定义键位布局和功能层,还能深入理解HID(人机接口设备)协议的精髓。
这个项目最吸引我的地方在于它的可玩性极高——从最基础的矩阵扫描电路设计,到复杂的宏按键编程,再到通过USB HID协议与操作系统通信,每一个环节都充满挑战。我选择的STM32F103C8T6(俗称"蓝莓派")作为主控,这款Cortex-M3内核的MCU价格亲民且性能足够,内置USB全速接口正好满足我们的需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计解析
2.1 核心元件选型
主控芯片选用STM32F103系列主要基于三点考虑:首先,它内置USB外设控制器,无需额外芯片就能实现USB HID设备功能;其次,72MHz主频足够处理键盘扫描和协议栈;最后,丰富的GPIO口(这款有37个I/O)可以轻松支持87键甚至104键的矩阵布局。
注意:STM32F103的USB接口是全速(12Mbps)规格,虽然不及高速USB,但对于键盘这种低速HID设备完全够用。实测输入延迟<1ms,与商业键盘无异。
键盘矩阵设计采用经典的8x16布局,通过二极管防止鬼键现象。这里有个细节优化:将常用按键(如WASD)安排在独立的列线上,这样可以避免高频按键时的扫描冲突。我选用1N4148开关二极管,其反向恢复时间仅4ns,远快于我们的扫描间隔(通常1ms左右)。
2.2 PCB设计要点
自制键盘的PCB设计有几个关键参数需要注意:
- 走线宽度:信号线6mil,电源线12mil
- 矩阵行线间距:至少3mm防止误触
- 二极管方向:阴极朝向列线(原理后文详解)
- USB数据线:差分对走线等长,阻抗控制在90Ω±10%

(图示:典型的8x16矩阵电路,红色为行线,蓝色为列线,每个交叉点通过二极管连接按键)
3. 固件开发详解
3.1 开发环境搭建
使用STM32CubeIDE作为开发环境,它集成了STM32CubeMX配置工具,可以直观
