QMK 键盘实战:CannonKeys Bakeneko65 ISO Hotswap 固件构建、刷写与源码深度解析
2026/9/18 14:56:43 网站建设 项目流程

QMK 键盘实战:CannonKeys Bakeneko65 ISO Hotswap 固件构建、刷写与源码深度解析

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

本篇技术指南以 QMK Firmware 仓库中keyboards/cannonkeys/bakeneko65_iso_hs/目录为核心,系统讲解 Bakeneko65 ISO Hotswap 键盘的硬件配置、固件编译、刷写流程与进入 Bootloader 的三种方式,并结合仓库源码剖析矩阵引脚、背光 PWM、USB 描述符与默认键位的底层实现。读完本文,你将掌握在 QMK 环境中为该键盘编译并刷写固件、自定义键位、以及通过 Bootmagic 与物理按键进入刷写模式的完整实战能力。

键盘与固件概览

Bakeneko65 ISO Hotswap 是 CannonKeys 推出的一款 65% 配列、ISO 布局、支持热插拔的键盘,其 QMK 支持由维护者 Andrew Kannan(awkannan)维护。在 keyboard.json 中,键盘被定义为:

  • 键盘名Bakeneko65 ISO HS
  • 制造商:CannonKeys
  • 维护者awkannan
  • 主控芯片:STM32F072(对应 readme 中的 STM32F072CBT6,Cortex-M0 系列,内置 USB 设备控制器与 128KB Flash)
  • Bootloaderstm32-dfu(STM32 内置 DFU 模式)
  • USB VID/PID0xCA04/0x001F,设备版本0.0.1

整个键盘目录结构非常精简,共包含 7 个文件,是典型的数据驱动(data-driven)配置风格的 QMK 键盘:

keyboards/cannonkeys/bakeneko65_iso_hs/ ├── config.h # 背光 PWM 硬件配置 ├── halconf.h # ChibiOS HAL 层配置(启用 PWM) ├── keyboard.json # 数据驱动主配置(矩阵、布局、USB、特性) ├── mcuconf.h # MCU 层配置(启用 TIM3 定时器) ├── readme.md # 官方使用说明 ├── rules.mk # 构建规则(DFU 后缀参数) └── keymaps/ └── default/ └── keymap.c # 默认键位

硬件配置解析:矩阵、主控与背光

矩阵扫描配置

Bakeneko65 ISO Hotswap 使用 5 行 × 15 列矩阵,二极管方向为COL2ROW。从 keyboard.json 可以查到实际的引脚分配:

"diode_direction": "COL2ROW", "matrix_pins": { "cols": ["A8", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A7", "A5", "A4", "A3", "A2", "A1"], "rows": ["A14", "A15", "A0", "B1", "B0"] }

这里列引脚数量正好为 15,行引脚数量为 5,与LAYOUT_65_iso_blocker布局中每个按键的matrix: [row, col]坐标一一对应。COL2ROW意味着列线驱动扫描、行线读取状态,这是绝大多数现代键盘 PCB 的标准接法。

背光 PWM 配置

该键盘支持按键背光,而非 RGB。背光的核心配置分布在三个文件中,构成一条完整的硬件链路:

  1. keyboard.json声明功能与通用参数:
"backlight": { "breathing": true, "levels": 15, "pin": "A6" }
  • breathing: true:支持呼吸灯效果;
  • levels: 15:亮度调节共有 15 档;
  • pin: "A6":背光驱动的输出引脚。
  1. config.h指定 PWM 外设映射:
#define BACKLIGHT_PWM_DRIVER PWMD3 #define BACKLIGHT_PWM_CHANNEL 1 #define BACKLIGHT_PAL_MODE 1
  1. mcuconf.h在 MCU 层面显式开启对应的定时器通道:
#undef STM32_PWM_USE_TIM3 #define STM32_PWM_USE_TIM3 TRUE

halconf.h则开启了 ChibiOS HAL 的 PWM 子系统:

#define HAL_USE_PWM TRUE

可以看到完整的调用链是:ChibiOS HAL PWM(halconf)→ STM32 定时器 TIM3(mcuconf)→ QMK 背光驱动(config.h 中的PWMD3即对应 TIM3)。背光引脚 A6 复用为 PWM 输出通道 1,PAL 复用模式为 1。

构建规则中的 DFU 细节

rules.mk 中只有一行注释和一行配置:

# Wildcard to allow APM32 MCU DFU_SUFFIX_ARGS = -v FFFF -p FFFF

DFU_SUFFIX_ARGS用于生成 DFU 烧录文件的后缀信息,这里将 VID/PID 通配为FFFF,以兼容 APM32 等 STM32 替代型号主控,避免因芯片 ID 差异导致 dfu-suffix 校验失败。

编译固件:从源码到 hex

在搭建好 QMK 构建环境后,编译该键盘默认键位的固件只需一条命令:

make cannonkeys/bakeneko65_iso_hs:default

命令格式为make <键盘路径>:<键位名>。其中:

  • cannonkeys/bakeneko65_iso_hs对应仓库keyboards/目录下的键盘路径;
  • default对应keymaps/default/键位目录,即本文后续分析的默认键位;
  • 构建产物(.hex/.bin等)会输出到qmk_firmware/.build/目录。

如果希望在编译的同时直接刷写到键盘,追加:flash目标:

make cannonkeys/bakeneko65_iso_hs:default:flash

该命令会先完成编译,再通过键盘的 Bootloader 类型(stm32-dfu)自动调用对应的刷写工具(如dfu-util)写入固件。

对于首次接触 QMK 的读者,仓库中提供了完整的入门资料:构建环境搭建可参考 getting_started_build_tools,make 命令的详细规则见 getting_started_make_guide,零基础用户建议从 newbs 与 newbs_building_firmware_workflow 开始。

进入 Bootloader 与刷写:三种方式

readme 明确给出了进入该键盘 Bootloader 的三种途径,覆盖了从硬件到固件的全场景:

  1. Bootmagic reset(硬件魔法键):按住矩阵坐标(0,0)处的按键(通常是最左上角按键或 Esc),然后插入 USB 线。这依赖 keyboard.json 中开启的bootmagic特性,属于 QMK 的 Bootmagic 功能。
  2. 物理复位按钮:将 PCB 背面的开关拨到"0"位置,然后轻按 PCB 背面的按钮。这是最可靠、不依赖任何固件状态的方式。
  3. 键位中的QK_BOOT键码:如果当前键位映射了QK_BOOT(旧称RESET),按下该键即可进入 Bootloader。在默认键位中,QK_BOOT就位于功能层_FN1的空格右侧,详见下文。

其中方式一依赖键盘配置中的"bootmagic": true特性(见 keyboard.json 的features段),方式三则与默认键位直接相关。

默认键位源码解析

默认键位位于 keymaps/default/keymap.c,定义了_BASE_FN1两个图层:

enum layer_names { _BASE, _FN1, };

基础层(_BASE)

基础层完整覆盖 65% ISO 布局,几个值得注意的映射:

  • QK_GESC:左上角按键,实现 Esc / `(重音符)智能切换,同时承担 Bootmagic 触发键的角色;
  • 数字行右端为KC_MINS, KC_EQL,对应 ISO 配列的_+
  • 右 Shift 上方为独立的KC_BSLS\|键),这是 ISO 布局区别于 ANSI 的典型特征;
  • 右下角 2U 空格左右分别为KC_LCTL, KC_LGUI, KC_LALTMO(_FN1), KC_RCTL——注意MO(_FN1)位于空格右侧,是该键盘功能层的默认触发键;
  • 最右列(第 15 列)为导航区:KC_INS, KC_DEL, KC_PGUP, KC_PGDN以及方向键KC_UP, KC_LEFT, KC_DOWN, KC_RGHT,其中KC_LEFT/KC_DOWN/KC_RGHT三个方向键在 ISO 布局中被压缩到底行。

功能层(_FN1)

功能层通过MO(_FN1)按住触发,包含:

  • 数字行映射为KC_F1~KC_F12KC_DEL替代退格位置;
  • W/A/S/D区域映射为方向键(KC_UP/KC_LEFT/KC_DOWN/KC_RGHT);
  • 底行空格右侧的MO(_FN1)位置映射为QK_BOOT——即长按触发层的同时按下该键即可进入 DFU 刷写模式,与 readme 中的第三种 Bootloader 方式对应;
  • 其余位置均为KC_TRNS(透传),保证未映射的按键沿用基础层行为。

层间使用MO()KC_TRNS的配合,是 QMK 多层键位最标准的写法,便于读者以此为模板扩展自己的层。

布局(Layout)与社区布局

Bakeneko65 ISO Hotswap 使用LAYOUT_65_iso_blocker布局宏,这是一个 65% 配列、带右上角导航区 "blocker"(即 nav 区与主键区之间没有缝隙)的 ISO 布局。该布局在 keyboard.json 中完整定义了 83 个键位的矩阵坐标与物理坐标(x/y/w/h),例如:

  • 第一行:Backspace为 2U 宽("w": 2);
  • 第二行:Tab为 1.5U,Caps Lock 为 1.75U;
  • 第三行:Enter为 ISO 特有的 1.25U 高 2U 弯钩回车("h": 2);
  • 第四行:左 Shift 1.25U +|键 + 字母区,右 Shift 1.75U;
  • 底行:1.25U Ctrl/Win/Alt + 6.25U 空格 + 1.25U AltGr/Ctrl + 三个 1U 导航键。

该键盘声明了社区布局65_iso_blocker,意味着它与仓库中其他同样支持65_iso_blocker的键盘共享键位文件。社区布局定义位于 layouts/community/65_iso_blocker/readme.md,默认布局参考见 layouts/default/65_iso_blocker/。如果你在其他支持该布局的键盘上写好了键位,可以直接迁移过来复用。

与其他 Bakeneko 变体的关系

CannonKeys 旗下还有 Bakeneko60 ISO Hotswap(目录cannonkeys/bakeneko60_iso_hs),其 readme 结构与本文键盘几乎一致(同样使用 STM32F072CBT6、相同的三条 Bootloader 说明、相同的make cannonkeys/bakeneko60_iso_hs:default构建方式)。对比两个键盘可以发现,QMK 中的同系列键盘通常共享相同的硬件平台与刷写流程,差异主要体现在键盘名、USB PID 与布局定义上,这种"复制目录 + 修改配置"的组织方式也是社区维护键盘的常见模式。

小结

Bakeneko65 ISO Hotswap 是 QMK 数据驱动键盘配置的典型案例:所有硬件信息集中在keyboard.json,背光等平台相关配置通过config.hhalconf.hmcuconf.h分层声明,键位逻辑则完全交由keymaps/default/keymap.c控制。掌握它的构建命令(make cannonkeys/bakeneko65_iso_hs:default)、刷写命令(追加:flash)以及三种进入 Bootloader 的方式(Bootmagic、物理开关、QK_BOOT键码),即可在此基础上自由定制键位,甚至将该目录复制为模板开发自己的 65% ISO 键盘固件。

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询