QMK 固件实战指南:CannonKeys Savage65 键盘的编译、布局与刷写
QMK 固件实战指南CannonKeys Savage65 键盘的编译、布局与刷写【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本文以 QMK Firmware 仓库中 keyboards/cannonkeys/savage65 目录为核心系统讲解 CannonKeys Savage65 65% 客制化键盘的硬件配置、矩阵与布局定义、背光与 RGB 实现、固件编译命令以及 DFU 刷写方法。读完本文你将能够独立完成 Savage65 固件的构建、默认键位分析与自定义、以及基于 STM32F072 的固件刷写。键盘概览与仓库定位Savage65 是 CannonKeys 推出的 65% 布局客制化键盘采用带右上角分隔区块blocker的紧凑设计即 65% 配列中方向键上方带有一个分隔条。在 QMK Firmware 仓库中其全部源码位于 keyboards/cannonkeys/savage65目录结构如下keyboards/cannonkeys/savage65/ ├── keymaps/ │ └── default/ │ └── keymap.c # 默认双层级键位 ├── chconf.h # ChibiOS 内核配置 ├── config.h # 背光 PWM / WS2812 SPI 硬件配置 ├── halconf.h # ChibiOS HAL 外设使能PWM/SPI ├── keyboard.json #>make cannonkeys/savage65:default编译并刷写需键盘进入 DFU 模式见下文make cannonkeys/savage65:default:flash若需要为某个自定义键位目录构建例如keymaps/vi将:default替换为对应键位名即可例如make cannonkeys/savage65:vi。硬件配置解析STM32F072 上的矩阵、背光与 WS2812矩阵引脚与扫描方向keyboard.json 中定义了 5 行 × 16 列的矩阵matrix_pins: { cols: [A5, B10, A3, A2, B0, A9, C13, B9, B8, B7, B6, B5, B4, B3, A15, A14], rows: [B12, B11, B14, A8, A1] }, diode_direction: COL2ROWdiode_direction为COL2ROW即二极管阴极朝向列线这是最常见的直列矩阵接法QMK 的矩阵扫描实现位于 quantum/matrix.c扫描时会逐列驱动、逐行读取。背光PWM 驱动的 6 级亮度背光被配置在 A6 引脚上支持呼吸效果与 6 级亮度backlight: { breathing: true, levels: 6, pin: A6 }, features: { backlight: true }底层的 PWM 硬件映射在 config.h 中#define BACKLIGHT_PWM_DRIVER PWMD3 #define BACKLIGHT_PWM_CHANNEL 1 #define BACKLIGHT_PAL_MODE 1即背光使用 STM32 的 TIM3 定时器 PWM 通道 1对应 PA6 的复用功能 AF1。要使 TIM3 的 PWM 可用mcuconf.h 中显式启用了它#undef STM32_PWM_USE_TIM3 #define STM32_PWM_USE_TIM3 TRUE同时 halconf.h 中打开HAL_USE_PWM TRUE。这里还体现了一个细节chconf.h、halconf.h、mcuconf.h三个文件均由qmk chibios-confmigrate工具基于platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h自动生成仅保留键盘特有差异便于跨版本迁移。RGBSPI 驱动的 WS281220 颗灯珠Savage65 的 RGB 采用 WS2812 灯带数量为 20 颗通过 SPI 方式驱动相对 bit-bang 更省 CPUws2812: { driver: spi, pin: B15 }, rgblight: { led_count: 20, animations: { alternating: true, breathing: true, christmas: true, knight: true, rainbow_mood: true, rainbow_swirl: true, rgb_test: true, snake: true, static_gradient: true, twinkle: true } }SPI 驱动在 config.h 中指定为 SPID2并给出了 MOSI/SCK 的复用模式与 SCK 引脚B13#define WS2812_SPI_DRIVER SPID2 #define WS2812_SPI_MOSI_PAL_MODE 0 #define WS2812_SPI_SCK_PAL_MODE 0 #define WS2812_SPI_SCK_PIN B13对应的 mcuconf.h 中启用了 SPI2#undef STM32_SPI_USE_SPI2 #define STM32_SPI_USE_SPI2 TRUEhalconf.h 中同样设置了HAL_USE_SPI TRUE。WS2812 SPI 驱动的底层实现可参考 drivers/led/ws2812_spi.cSPI 模式空闲电平、边沿相位等由 QMK 通用配置决定上述宏只负责外设与引脚映射。其他已启用功能keyboard.json 的features中同时开启了以下功能可在编译期通过qmk compile的配置或键位覆盖调整bootmagic开机时按住特定键可快速进入刷写模式或重置 EEPROMcommand允许在键盘运行时使用 Magic 命令组合console启用调试输出通道配合qmk console使用extrakey/mousekey/nkro多媒体键、鼠标键与 N 键无冲NKRO支持。此外qmk.locking段开启了按键锁定Caps Lock 等锁定键状态与resync重新同步选项确保指示灯与操作系统状态一致。布局Layout体系5 种社区布局与 6 个内部布局Savage65 的键盘配列定义完整呈现在 keyboard.json 的layouts与community_layouts字段中。community_layouts声明了该键盘参与的社区共享布局可在多个键盘间复用同一份键位文件65_ansi_blocker 65_ansi_blocker_split_bs 65_ansi_blocker_tsangan 65_ansi_blocker_tsangan_split_bs 65_iso_blocker而layouts内部定义了 6 个物理布局宏供键位文件直接调用布局名特点LAYOUT_default默认配列标准 65% 拆分 Backspace、1.25U 修饰键、6.25U 空格LAYOUT_65_ansi_blocker标准 ANSI 65%2U Backspace、1.5U 右 ShiftLAYOUT_65_ansi_blocker_split_bsANSI 拆分 BackspaceLAYOUT_65_ansi_blocker_tsanganANSI Tsangan 底行7U 空格、1.5U 修饰键LAYOUT_65_ansi_blocker_tsangan_split_bsTsangan 拆分 BackspaceLAYOUT_65_iso_blockerISO欧洲Enter 配列含 ISO 左 Shift 与 ISO 反斜杠以LAYOUT_65_ansi_blocker为例其定义包含每个物理按键的矩阵坐标matrix与视觉坐标x/y单位 U以及宽高修饰如w: 2表示 2U 键帽。这种>make cannonkeys/savage65:default:flash关于 DFU 后缀rules.mk 中有一条值得注意的配置# Wildcard to allow APM32 MCU DFU_SUFFIX_ARGS -v FFFF -p FFFF即将 DFU 后缀中的 VID/PID 设为通配值FFFF从而兼容 APM32STM32 的国产兼容替代芯片等非标准 VID/PID 的 DFU 设备扩大刷写兼容性。更多刷写背景可参考 docs/flashing.md 与 docs/newbs_flashing.md。常见问题与后续进阶自定义键位复制keymaps/default为keymaps/你的名字并修改keymap.c随后执行make cannonkeys/savage65:你的名字:flash若使用 JSON 键位可参考 docs/keymap.md 的qmk json2c流程调整 RGB 动画led_count固定为 20动画开关在keyboard.json的rgblight.animations中集中管理功能裁剪以减小固件体积Savage65 的config.h中保留了NO_DEBUG、NO_PRINT、NO_ACTION_LAYER等开关的注释示例量产或精简需求下可参考 docs/squeezing_avr.md 的思路进行裁剪迁移与升级三个 ChibiOS 配置文件均由qmk chibios-confmigrate生成升级 QMK 版本时可按需重新执行该命令迁移。以上内容覆盖了 Savage65 从硬件理解、固件编译、布局体系、默认键位到 DFU 刷写的完整闭环。结合 keyboards/cannonkeys/savage65 目录中的源码逐项对照即可快速完成属于自己的 Savage65 固件定制。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考