
DIY键盘学习板
简介
使用F103最小系统板制作的简易键盘,用QMK工具完成代码编写
简介:使用F103最小系统板制作的简易键盘,用QMK工具完成代码编写开源协议
:OpenAtom OHL 1.0
(未经作者授权,禁止转载)描述
项目简介
本项目是基于STM32F103C8T6开发板的diy键盘,适合想要开始学习diy键盘的同学使用。项目使用QMK开发工具开发,QMK(Quantum Mechanical Keyboard)是一款开源键盘固件,允许用户高度自定义机械键盘的功能和布局,代码简洁易懂,适合新手学习。
项目功能
- 键盘共有10个按键,共3层,可实现数字输入,快捷键输入,键盘RGB调节;
- 每个按键带ws2812彩灯(反贴),可以通过程序设计RGB灯效;
- 键盘设计有一个EC11编码器旋钮,可以实现调节音量和屏幕亮度(适用于笔记本电脑)的功能;
- 键盘设有三个宏按键,按下可以快速完成一系列操作(如按下输出邮箱地址等);
- 开发板的排针已引出,方便后续有其他创意的同学在扩展排针上实现、验证自己的想法;
- 此外,键盘的关键引脚也通过排针引出,可以通过杜邦线接其他开发板实现功能,不止局限于f103开发板。
项目参数
- 本设计采用STM32F103C8T6开发板直插,简单易用同时减轻焊接工作量;
- 采用EC11编码器旋钮实现调节,同时自带按键,按下可以实现换层的功能;
- 选用凯华热插拔轴座,实现轴座热插拔;
功能介绍
该键盘硬件上分为3行4列,共11个按键(包括旋钮自带的按键),按键与示意图的对应关系如下表:

| 第一列 | 第二列 | 第三列 | 第四列 | |
|---|---|---|---|---|
| 第一行 | 7 | 8 | 9 | 无按键 |
| 第二行 | 4 | 5 | 6 | 编码器按下 |
| 第三行 | 1 | 2 | 3 | . |
共由3层组成,分别为默认数字层、快捷键层、键盘调节层
数字层:
| 第一列 | 第二列 | 第三列 | 第四列 | |
|---|---|---|---|---|
| 第一行 | 7 | 8 | 9 | 无按键 |
| 第二行 | 4 | 5 | 6 | 切换到快捷键层 |
| 第三行 | 1 | 2 | 3 | 0 |
快捷键层:
| 第一列 | 第二列 | 第三列 | 第四列 | |
|---|---|---|---|---|
| 第一行 | 切屏(ALT+TAB) | 保存(ctrl+s) | 退格(BackSpace) | 无按键 |
| 第二行 | 宏1 | 宏2 | 宏3 | 切换回数字层 |
| 第三行 | 回退(ctrl+z) | 复制(ctrl+c) | 粘贴(ctrl+v) | 回车(Enter) |
键盘调节层(需要按住按键“ . ”):
| 第一列 | 第二列 | 第三列 | 第四列 | |
|---|---|---|---|---|
| 第一行 | 颜色+(换颜色) | 颜色- | 无 | 无按键 |
| 第二行 | 饱和度+ | 饱和度- | 无 | 关闭RGB灯 |
| 第三行 | 动画速度+ | 动画速度- | 切换RGB动态效果 | 按住以调节RGB |
例如需要改变颜色:按住按键“ . ”,同时按下按键“ 7 ”
.
编码器旋钮功能
| 顺时针 | 逆时针 | |
|---|---|---|
| 数字层 | 屏幕亮度+ | 屏幕亮度- |
| 快捷键层 | 音量+ | 音量- |
| 快捷键层 | RGB亮度+ | RGB亮度- |
软件代码 & 可自定义部分
按键宏的修改
在keymap.c中可以看到如下函数,修改SEND_STRING中的内容即可改变按键输出,如SEND_STRING("123")则按下宏按键后输出123。
// ================= 按键模拟 =================
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (keycode == MACRO_one) {
if (record->event.pressed) {
// 当按键按下时,发送字符串 :此处可修改为你所需的宏
SEND_STRING("123");
}
return false;
}
if (keycode == MACRO_two) {
if (record->event.pressed) {
// 当按键按下时,发送字符串 :此处可修改为你所需的宏
SEND_STRING("456");
}
return false;
}
if (keycode == MACRO_three) {
if (record->event.pressed) {
//当按键按下时,发送字符串 :此处可修改为你所需的宏
SEND_STRING("789");
}
return false;
}
return true;
}
键盘功能映射的修改
在keymap.c中可以看到如下函数,修改其中的内容即可更改键盘的按键映射,具体的映射可以查看QMK的官方文档,文档链接:https://docs.qmk.fm/keycodes
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// 数字层
[0] = LAYOUT(
KC_7 , KC_8 , KC_9 , KC_NO ,
KC_4 , KC_5 , KC_6 , TO(1) ,
KC_1 , KC_2 , KC_3 , LT(2, KC_0)
),
// 快捷键层
[1] = LAYOUT(
A(KC_TAB) , C(KC_S) , KC_BSPC , KC_NO ,
MACRO_one , MACRO_two , MACRO_three , TO(0) ,
C(KC_Z) , C(KC_C) , C(KC_V) , LT(2, KC_ENT)
),
// 键盘调节层 2
[2] = LAYOUT(
RM_HUEU , RM_HUED, KC_NO , KC_NO ,
RM_SATU , RM_SATD, KC_NO , RM_TOGG,
RM_SPDU , RM_SPDD, RM_NEXT, KC_NO
)
};
RGB动态效果的设置
在config.h文件中可以看到对RGB动画的配置,如果要添加/更改键盘的RGB背光动态效果,可以查看QMK官方文档给出的现有RGB动态效果并按照相同的格式添加,官方动态效果见:https://docs.qmk.fm/features/rgb_matrix
//RGB动画
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_BREATHING
#define STARLIGHT_DUAL_HUE
#define ENABLE_RGB_MATRIX_BAND_SAT
#define ENABLE_RGB_MATRIX_BAND_VAL
#define ENABLE_RGB_MATRIX_HUE_WAVE

如何复刻?
由于该项目基于QMK开发,这里介绍如何通过QMK来修改/编写代码以满足您的个性化需求,如果您暂时没有修改配置的需求,可以先直接跳到第4步,直接烧录代码
另外,推荐一个我入门时看的教学视频,内容很详细:(b站:BV1Kx4y1V7zd)
1.下载QMK官方软件

下载QMK官方编译软件,用于代码工程的编译。官网:https://msys.qmk.fm/

下载QMKToolbox,用于烧录编译后的代码至键盘。官网:https://qmk.fm/toolbox
2.克隆QMK官方库
打开下载好的QMKMSYS,在终端输入:qmk setup -H D:/QMK (注意:末尾的路径决定了QMK文件夹的创建位置,同时需要先确保D:/QMK这个文件夹是不存在的才可以创建),等待克隆完成。
3.放入,修改工程并编译
将附件给出的diykeyboard文件夹放入刚才克隆出来的../QMK/keyboard下面:

此时,如果您有修改代码更改配置的需要,可以打开代码文件夹按照前文或者官方文档给出的方法进行修改。修改完成后,保存,打开QMKMSYS准备编译代码。
在终端输入 qmk compile -kb diykeyboard -km default -j 8对工程进行编译,其中 - kb 后面的代表您的工程名字。看到终端一路[OK]就说明编译成功了。

编译完成后如下图所示,会在../QMK/build路径下生成.bin和.hex文件,这里可以看到其推荐烧录.bin格式文件,接下来就可以用该文件进行烧录了。

4.烧入bootloader并烧录代码
先将开发板用usb线连接至电脑,此时打开设备管理器,可能会看到设备无法识别,这种问题大概率是没有烧录bootloader(如果插上后已经有检测到设备,请忽略这一步,直接跳到使用QMKtoolbox烧录步骤)
烧录bootlaoder:
1.下载bootlaoder文件,将其放置在您熟悉的文件路径即可(文件已经在附件中给出),也可以参考这位大佬的帖子,里面有详细的下载指导和其他bootloader选择:https://xujiwei.com/blog/2024/05/stm32duino-bootloader-toturial/
2.使用ST-link烧录bootlaoder:
将st-link与开发板连接好,打开QMKMSYS,在终端输入以下指令:
pacman -S mingw-w64-x86_64-stlink mingw-w64-x86_64-openocd
再输入下面的指令,通过st-link下载bootloader:
st-flash --reset --format binary write C:/QMK/generic_boot20_pc13_fastboot.bin 0x08000000
(其中,“C:/QMK/generic_boot20_pc13_fastboot.bin”应该改为您bootloader文件的实际存放位置)
此时再插上usb连接电脑,如果电脑没有错误信息提示,就可以进入最后一步烧录程序了。
补充:如果您手头没有st-link下载器,也可以试试TTL下载的方案,参考这位大佬的视频
(b站:BV1Jp421X7mJ),可以解决bootloader下载过程中的大部分问题。
使用QMKtoolbox烧录程序:
打开已下好的QMKToolbox,选择之前编译好的../QMK/build/diykeyboard_default.bin文件(附件中已给出),按下开发板的复位键,此时进入烧录模式,按下flash开始烧录。

烧录好后,再次按下复位键,此时键盘就可以正常使用了,恭喜你有了一个可自定义的键盘!
注意事项
-
generic_boot20_pc13_fastboot.bin 文件名中的pc13代表开发板上的led引脚,提供指示作用,可以根据自己的开发板去下载对应的boot loader文件。
-
作者使用的st-link型号是市面上10元左右的st-link V2
-
对于还没有打算修改代码的朋友, 附件中也准备了更加通用的可下载文件
(diykeyboard_default_nomacro.bin),将宏按键改为了键盘的方向键。
组装流程
将PCB板放入外壳面板中,注意朝向

盖上底板

最后再安装上自己喜欢的键轴和键帽即可

扩展用法
作为新手入门的学习版键盘,该键盘保留了拓展的排针,供同学们实现更多可能
用法1: 在f103的基础上添加功能,使用杜邦线连接其他外设来丰富您的键盘,验证您的想法
用法2: 使用上方的排针,连接其他开发板使用,排针的对应功能已在PCB丝印上标注
最后
感谢各位观看!欢迎留下您宝贵的意见!
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论