QMK 固件实战:Blaster 75 默认键位全解析与底部双配列(6.25u / 7u 空格)实现指南
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
本篇文章以 QMK Firmware 仓库中keyboards/blaster75的默认键位文档为核心,完整解读 ALTAiN 推出的 75% ANSI 客制化键盘 Blaster 75 的默认键位设计、底部行两种可切换配列,并结合 keymap.c 与 keyboard.json 从源码级说明布局是如何定义、映射与生效的。读完本文,你将掌握 Blaster 75 默认键位的每一个按键含义、如何在两种空格配列(6.25u 与 7u)之间切换,以及编译烧录与进入 Bootloader 的完整流程。
Blaster 75 与默认键位概览
Blaster 75 是 ALTAiN 设计并制造的 75% ANSI 布局客制化键盘,其官方维护说明(见 keyboards/blaster75/readme.md)给出的关键硬件信息如下:
- 键盘维护者:ALTAiN
- 硬件支持:Blaster 75
- 结构:Top-Mount(上盖固定结构)
- 打字角度:6 度
- 前高:20.2mm
默认键位文档(keyboards/blaster75/keymaps/default/readme.md)明确说明:该键位是专为 Blaster 75 设计的出厂默认方案,整体遵循ANSI 布局,唯一例外是底部行——底部行支持两种可配置的配列方案,用户可以根据自己手头的空格键长度自由选择。
从数据驱动配置 keyboard.json 可以看到这块键盘的底层平台信息:
| 配置项 | 值 | 说明 |
|---|---|---|
keyboard_name | Blaster 75 | 键盘名称 |
manufacturer/maintainer | Altain | 厂商与维护者 |
usb.vid/usb.pid | 0xA122 / 0xB075 | USB 标识 |
processor | atmega32u4 | AVR 主控 |
bootloader | atmel-dfu | DFU 引导加载器 |
matrix_pins.rows | F0, F1, F4, F5, F6, F7 | 6 行 |
matrix_pins.cols | B0, B4, B5, B6, B7, C6, C7, D0–D7 | 15 列 |
diode_direction | COL2ROW | 列到行二极管方向 |
features.bootmagic | true | 启用 Bootmagic |
features.nkro | false | 未启用 N 键无冲(即默认 6KRO) |
也就是说,Blaster 75 在 QMK 中是一个6 行 × 15 列的矩阵,采用 COL2ROW 接法,运行于 atmega32u4 主控上。
默认键位图逐区解析
默认键位的核心实现位于 keymaps/default/keymap.c,文件顶部带有 GPL 开源许可头,并引入QMK_KEYBOARD_H,随后定义了keymaps[][MATRIX_ROWS][MATRIX_COLS]数组。完整代码如下:
#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), };功能键区(第 0 行)
第 0 行从KC_ESC开始,紧接着是完整的 F1–F12 功能键,行末是两个 75% 键盘典型的导航键:
KC_PSCR(Print Screen 截屏)KC_INS(Insert 插入)
数字键区(第 1 行)
标准 ANSI 数字行:KC_GRV(反引号)、KC_1–KC_0,加上KC_MINS(减号)、KC_EQL(等号)、KC_BSPC(退格)。注意此行的第 14 个位置([1, 13])在 keyboard.json 中定义为宽度"w": 2的 2u 大退格键,行末还有一个KC_HOME。
主键区(第 2、3 行)
- 第 2 行:
KC_TAB起手,接 QWERTY 字母行的 Q W E R T Y U I O P,然后是KC_LBRC([)、KC_RBRC(])、KC_BSLS(\),行末为KC_DEL。同样地,KC_TAB在布局中被定义为"w": 1.5的 1.5u 键,KC_BSLS为"w": 1.5。 - 第 3 行:
KC_CAPS(Caps Lock,定义为"w": 1.75的 1.75u 键)、A S D F G H J K L、KC_SCLN(;)、KC_QUOT('),以及定义为"w": 2.25的 2.25u 大回车键KC_ENT,行末为KC_END。
左 Shift 行(第 4 行)
KC_LSFT(定义为"w": 2.25的 2.25u 大 Shift)、Z X C V B N M、KC_COMM(,)、KC_DOT(.)、KC_SLSH(/),随后是"w": 1.75的KC_RSFT,行末是方向键KC_UP(上)。
底部行(第 5 行)
默认使用的LAYOUT配列下,底部行为:KC_LCTL(左 Ctrl)、KC_LWIN(左 Win)、KC_LALT(左 Alt)、居中的KC_SPC(空格)、KC_RALT(右 Alt)、KC_RWIN(右 Win),以及右下角的三枚方向键KC_LEFT、KC_DOWN、KC_RGHT——与第 4 行末尾的KC_UP共同组成完整的独立方向键区。
预留的第 1 层
[1]层是一整层KC_TRNS(透明键)。KC_TRNS意味着该位置直接“透传”到更低层(这里是第 0 层)的按键,不会产生任何实际按键动作。这层全部为透明键,说明它是为后续自定义(例如 Fn 功能层、媒体层)预留的空白画布,用户可以在此基础上叠加自己的功能层而不必重写第 0 层。
底部行:两种可配置配列
默认键位文档的核心内容,就是 Blaster 75 底部行的两种可配置方案。文档明确写道:整体遵循 ANSI 布局,唯独底部行例外,可根据用户需求配置为以下两种形式:
- 1.25 / 1.25 / 1.25 / 6.26u 空格 / 1.25 / 1.25
- 1.5u / 1u / 1.5u / 7u 空格 / 1.5u
对照 keyboard.json 中的layouts定义,这两种方案分别对应仓库中已经定义好的两个布局宏:LAYOUT与LAYOUT_7u。
方案一:6.25u 空格(LAYOUT)
这是默认键位当前使用的布局。以 QMK 布局定义中的w(宽度)字段为准,底部行共 9 个位置:
| 物理位置 | 矩阵坐标 | 宽度(u) | 默认按键 |
|---|---|---|---|
| 左 Ctrl | [5, 0] | 1.25 | KC_LCTL |
| 左 Win | [5, 1] | 1.25 | KC_LWIN |
| 左 Alt | [5, 2] | 1.25 | KC_LALT |
| 空格 | [5, 5] | 6.25 | KC_SPC |
| 右 Alt | [5, 9] | 1.25 | KC_RALT |
| 右 Win | [5, 11] | 1.25 | KC_RWIN |
| 左方向键 | [5, 12] | 1 | KC_LEFT |
| 下方向键 | [5, 13] | 1 | KC_DOWN |
| 右方向键 | [5, 14] | 1 | KC_RGHT |
对应文档中“1.25 / 1.25 / 1.25 / 6.25u 空格 / 1.25 / 1.25”的结构(文档中写作 6.26u,而 keyboard.json 中LAYOUT实际定义的宽度为"w": 6.25,以源码定义为准),右侧再配三枚 1u 方向键。
方案二:7u 空格(LAYOUT_7u)
LAYOUT_7u是为 7u 长空格准备的第二套布局,底部行共 8 个位置:
| 物理位置 | 矩阵坐标 | 宽度(u) | 默认按键 |
|---|---|---|---|
| 左 Ctrl | [5, 0] | 1.5 | KC_LCTL |
| 左 Win | [5, 1] | 1 | KC_LWIN |
| 左 Alt | [5, 2] | 1.5 | KC_LALT |
| 空格 | [5, 5] | 7 | KC_SPC |
| 右 Alt | [5, 11] | 1.5 | KC_RALT |
| 左方向键 | [5, 12] | 1 | KC_LEFT |
| 下方向键 | [5, 13] | 1 | KC_DOWN |
| 右方向键 | [5, 14] | 1 | KC_RGHT |
对应文档中“1.5u / 1u / 1.5u / 7u 空格 / 1.5u”的结构。可以明显看出,两种方案共享完全相同的矩阵扫描位置(空格始终占用[5, 5],方向键始终占用[5, 12]–[5, 14]),区别仅在于 PCB 上焊接的按键物理宽度不同,以及底部左半区(Ctrl / Win / Alt)的排布随之调整。
如何在两种配列间切换
由于默认键位文件使用的是LAYOUT,若你手头是 7u 空格配列的 PCB/键帽,只需在 keymaps/default/keymap.c 中把两个LAYOUT(...)宏替换为LAYOUT_7u(...)(即[0] = LAYOUT_7u(与[1] = LAYOUT_7u(),然后重新编译烧录即可。这是 QMK 数据驱动配置的典型用法:keyboard.json中声明了LAYOUT与LAYOUT_7u两套键位几何,键位文件中按需选择其一。
从 keyboard.json 理解布局定义
keyboard.json 的layouts部分用数据驱动的方式描述了每个键的物理几何信息,每条记录由matrix(矩阵坐标)、x(横向位置,以 1u 为单位的累计坐标)、y(纵向行位置)和可选的w(键宽)组成。例如:
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, {"matrix": [2, 1], "x": 1.5, "y": 2.25}表示[2, 0]处的 Tab 键宽度 1.5u,位于第 2 行起始;紧随其后的[2, 1](Q 键)从 x=1.5 开始,占 1u。所有键的x坐标累加后正好铺满 16 个 1u 单位,即一行 16u 的 75% 键盘宽度。
值得注意的是,第 3 行(y=3.25)只有 14 个键位记录([3, 0]–[3, 12]加[3, 14]),因为KC_ENT是"w": 2.25的宽回车,把原本 15 列的 ANSI 回车行压缩成了 14 个物理键位;同理第 4 行也只有 13 个键位记录([4, 0]–[4, 9]、[4, 11]–[4, 13]),因为KC_LSFT与KC_RSFT分别是 2.25u 和 1.75u 的宽键。这种“矩阵坐标”与“物理几何”解耦的设计,正是 QMK 支持同一矩阵衍生多种配列的基础——Blaster 75 的LAYOUT与LAYOUT_7u共用同一套矩阵定义,只是底部行的几何宽度不同。
编译、烧录与进入 Bootloader
在搭建好 QMK 构建环境后(参见仓库 docs/getting_started_build_tools.md 与 docs/getting_started_make_guide.md),编译默认键位:
make blaster75:default烧录默认键位:
make blaster75:default:flash按官方维护文档(keyboards/blaster75/readme.md),进入 Bootloader 有三种方式:
- Bootmagic 复位(官方推荐):按住矩阵 (0,0) 位置(即 PCB 上的 ESC 键)的同时插入 USB。如果 PCB 尚未焊接轴体,可以用任意金属导体(如镊子)短接 (0,0) 位置的两个焊盘再插入 USB。
- 物理复位键:短按 PCB 背面的复位按钮(部分版本可能是需要短接的焊盘)。
- 布局中的键码:按下映射了
QK_BOOT键码的按键(默认键位中未预置,可自行添加)。
自定义你的默认键位
基于 keymaps/default/keymap.c 的结构,自定义键位非常直接:
- 修改按键:直接替换
[0]层中对应的KC_*键码。例如想交换 Caps Lock 与左 Ctrl,把第 3 行的KC_CAPS与底部行的KC_LCTL互换即可。 - 启用第 1 层:把
[1]层中某个位置的KC_TRNS换成实际键码,并在第 0 层用MO(1)(按住临时切换)或LT(1, KC_...)(长按切换、点按触发)绑定一个层切换键。 - 添加 Bootloader 快捷键:在任意空闲位置填入
QK_BOOT,即可在键盘上直接进入刷写模式。 - 切换 7u 空格配列:如前面所述,将
LAYOUT改为LAYOUT_7u后重新编译。
另外需要留意 keyboard.json 中features的声明:nkro为false(默认 6KRO)、extrakey与mousekey均为false,因此默认固件不包含多媒体扩展键和鼠标键支持。若需要这些功能,可在构建时通过命令行参数启用对应特性。
总结
Blaster 75 的默认键位是一套标准的 75% ANSI 布局,顶部完整功能键区、独立方向键区一应俱全,唯一需要用户按键帽规格选择的是底部空格配列:6.25u 空格方案使用LAYOUT(1.25/1.25/1.25/6.25u/1.25/1.25),7u 空格方案使用LAYOUT_7u(1.5u/1u/1.5u/7u/1.5u)。两者在 keyboard.json 中共享同一 6×15 矩阵,仅物理几何不同。结合 keymap.c 的源码,用户可以轻松理解键位映射机制,并在此基础上进行个性化的层设计与配列切换。
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考