当前位置: 首页 > news >正文

QMK自定义4*4键盘固件创建教程:最新架构详解

QMK自定义4*4键盘固件创建教程:最新架构详解

前言

通过本教程,你将学习如何在QMK框架下创建自己的键盘固件。QMK是一个强大的开源键盘固件框架,广泛用于DIY机械键盘的制作。本文将详细介绍最新架构下所需创建的文件及其功能。

准备工作

在开始之前,我们需要理解QMK架构中必须创建的几个核心文件:

  • info.json:键盘的基本信息配置
  • config.h:硬件和功能的配置头文件
  • rules.mk:编译选项和功能开关
  • <keyboard_name>.c:键盘的主要C源文件
  • <keyboard_name>.h:键盘矩阵定义的头文件

接下来,我们将一步步实现这些文件的创建。

实操步骤

1. 创建键盘目录

首先导航到QMK固件的keyboards目录:

keyboards目录

2. 创建自定义键盘文件夹

在keyboards目录下创建一个新的文件夹,使用你自定义的键盘名称(本例中使用"despacito0o"):

创建新文件夹

文件夹创建完成

3. 打开IDE并开始编辑

使用VSCode打开刚创建的文件夹(可以直接将文件夹拖到VSCode图标上):

打开VSCode

4. 创建rules.mk文件

首先创建rules.mk文件,这是编译选项和功能开关的配置文件:

创建rules.mk

rules.mk示例

在rules.mk文件中写入以下内容:

MCU = STM32F103          # 主控型号,使用的是 STM32F103 微控制器
BOOTLOADER = stm32duino  # 启动加载器类型,使用 stm32duino 引导程序
NKRO_ENABLE = yes        # 启用 NKRO (N-Key Rollover),支持多键同时按下
EXTRAKEY_ENABLE = yes    # 启用额外按键功能,例如媒体键(用键盘控制音量大小等)
# LTO_ENABLE = yes        # 是否启用链接时优化 (Link Time Optimization),暂时不需要注释掉
rules.mk文件说明

rules.mk文件是QMK的顶级Makefile,用于设置关于MCU的信息以及启用/禁用特定功能。主要包含:

  • 构建选项:指定默认文件夹、固件格式等
  • 功能开关:通过设置yes/no来启用或禁用功能
  • MCU选项:设置微控制器类型、时钟频率等
  • 编译优化:如LTO_ENABLE可显著减少编译大小

5. 创建键盘头文件

接下来创建键盘的.h头文件(使用你的键盘名称):

创建头文件

在头文件中添加以下内容:

#pragma once // 防止头文件被重复包含#include "quantum.h" // 包含 QMK 的核心头文件
键盘头文件说明

该头文件用于定义键盘的矩阵布局。应至少定义一个C宏,将数组转换为代表键盘物理开关矩阵的矩阵。如果你的键盘可以构建多种布局,则应定义多个宏。

  • 对于单一布局,应使用LAYOUT
  • 对于多布局键盘,应有一个支持所有可能开关位置的基本布局LAYOUT_all,以及其他特定布局如LAYOUT_ansiLAYOUT_iso

6. 创建键盘C源文件

创建键盘的主C源文件(使用你的键盘名称):

创建C源文件

添加以下内容:

#include "Despacito0o.h" // 包含键盘的头文件(使用你自定义的名称)

7. 创建config.h文件

创建config.h配置文件:

创建config.h

添加以下内容:

#pragma once // 防止头文件被重复包含#define MATRIX_ROWS 4 // 定义矩阵的行数
#define MATRIX_COLS 4 // 定义矩阵的列数
#define MATRIX_ROW_PINS {B3, A1 , A2 , A3} // 定义行引脚
#define MATRIX_COL_PINS {A4, A15, A14, A8} // 定义列引脚
#define DIODE_DIRECTION COL2ROW // 定义二极管方向为列到行
config.h文件说明

config.h是最先被包含的C头文件,其中设置的变量会在整个项目中持续存在。主要配置内容包括:

  • 硬件选项:VID/PID、设备版本、厂商信息等
  • 矩阵配置:行列数、引脚定义、二极管方向等
  • 功能配置:背光、音频、RGB灯效、防抖等
  • 键盘行为:按键触发时间、组合键设置等

8. 创建键盘映射文件

创建键盘映射的文件结构:先创建keymaps文件夹,然后在其中创建default文件夹,最后在default文件夹中创建keymap.c文件:

创建keymap.c

在keymap.c中添加以下内容:

#include  QMK_KEYBOARD_Hconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {[0] = LAYOUT(MI_B2  , KC_Q   , KC_W,  MI_C3  ,  // 第一行按键映射MI_F2  , MI_G2  , MI_A2, MI_OCTU, // 第二行按键映射MI_C2  , MI_D2  , MI_E2, MI_OCTD, // 第三行按键映射KC_PSLS, MI_OCTD, MO(1), KC_PENT  // 第四行按键映射,包含层切换按键MO(1)),[1] = LAYOUT(QK_BOOT, KC_P8 , RGB_MOD, RGB_TOG, // 第二层第一行:包含重启引导和RGB控制KC_P4  , KC_G  , KC_A   , KC_PAST, // 第二层第二行KC_P1  , KC_P2 , KC_P3  , KC_PMNS, // 第二层第三行KC_PSLS, KC_P0 , KC_PDOT, KC_PENT  // 第二层第四行)
};

9. 创建键盘JSON配置文件

最后,创建一个keyboard.json文件(注意JSON文件中不能有注释):

创建keyboard.json

添加以下内容:

{"keyboard_name": "Despacito0o", "manufacturer": "Despacito0o", "usb": {"vid": "0x1564", "pid": "0x8456", "device_version": "0.0.1" },"layouts": {"LAYOUT": {"layout": [{"matrix": [0, 0], "x": 0, "y": 0}, {"matrix": [0, 1], "x": 1, "y": 0}, {"matrix": [0, 2], "x": 2, "y": 0}, {"matrix": [0, 3], "x": 3, "y": 0}, {"matrix": [1, 0], "x": 0, "y": 1}, {"matrix": [1, 1], "x": 1, "y": 1}, {"matrix": [1, 2], "x": 2, "y": 1}, {"matrix": [1, 3], "x": 3, "y": 1}, {"matrix": [2, 0], "x": 0, "y": 2}, {"matrix": [2, 1], "x": 1, "y": 2}, {"matrix": [2, 2], "x": 2, "y": 2}, {"matrix": [2, 3], "x": 3, "y": 2}, {"matrix": [3, 0], "x": 0, "y": 3}, {"matrix": [3, 1], "x": 1, "y": 3}, {"matrix": [3, 2], "x": 2, "y": 3}, {"matrix": [3, 3], "x": 3, "y": 3}  ]}}
}

编译固件

完成所有文件创建后,打开QMK MSYS终端,输入以下命令进行编译:

qmk compile -kb despacito0o -km default

编译成功

看到绿色的成功信息,恭喜你已经成功创建了自己的键盘固件!

知识拓展:QMK架构关键概念

1. 键码(Keycode)系统

QMK提供了丰富的键码系统,包括:

  • 基础字母数字键(KC_A到KC_Z,KC_1到KC_0)
  • 功能键(KC_F1到KC_F24)
  • 特殊功能键(媒体控制、RGB控制等)
  • 层控制键(MO、LT、TO、TG等)

2. 层(Layer)系统

QMK的层系统允许在有限的物理按键上实现多层功能:

  • 基础层(Base Layer):默认层,通常为0
  • 功能层:通过层控制键临时激活或锁定
  • 层优先级:高层级覆盖低层级的按键定义

3. Quantum键码

QMK引入了独特的高级键码,如:

  • Mod-Tap:按下为修饰键,点击为普通键
  • Layer-Tap:按下激活层,点击为普通键
  • One-Shot Keys:点击后效果持续到下一个按键

4. 矩阵扫描

QMK通过矩阵扫描检测按键状态:

  • 行列式矩阵:减少所需引脚数
  • 二极管方向:COL2ROW或ROW2COL定义电流流向
  • 防抖处理:避免按键弹跳导致的误触

结语

通过本教程,你已经掌握了QMK最新架构下创建自定义键盘固件的完整流程。这些基础知识将帮助你进一步探索QMK的强大功能,如RGB灯光效果、OLED屏幕控制、旋钮编码器配置等高级特性。

希望这篇教程对你有所帮助,祝你在DIY键盘的道路上越走越远!
QMK键码参照表大全

相关文章:

  • HTTP 的发展史:从前端视角看网络协议的演进
  • Spring 必会之微服务篇(2)
  • Unity Shaders and Effets Cookbook
  • 汽车四缸汽油机曲柄连杆机构设计关键技术研究
  • 测试左移系列-产品经理实战-实战认知1
  • SpringCloud之Gateway基础认识-服务网关
  • 搜索与图论
  • 用java+vert.x开发的内网穿透工具jrp-nat
  • MySQL 从入门到精通(三):日志管理详解 —— 从排错到恢复的核心利器
  • 互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计
  • 进程间通信--管道【Linux操作系统】
  • Docker、Docker-compose、K8s、Docker swarm之间的区别
  • Linux基本指令(一)
  • LeetCode LCR 007. 三数之和 (Java)
  • 服饰行业的转型“助推器”来了
  • 基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
  • 8.3.监控与日志体系
  • Helix:一种用于通用人形控制的视觉语言行动模型
  • HunyuanCustom:文生视频框架论文速读
  • 【Java ee初阶】网络编程 TCP
  • 广西百色通报:极端强对流天气致墙体倒塌,3人遇难7人受伤
  • 习近平会见塞尔维亚总统武契奇
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 重视体重管理,筑牢健康基石
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措