QMK Firmware 中的 45-ATS 键盘支持:配置结构、默认键位与编译烧录实战指南

发布时间:2026/9/15 18:12:05
QMK Firmware 中的 45-ATS 键盘支持:配置结构、默认键位与编译烧录实战指南 QMK Firmware 中的 45-ATS 键盘支持配置结构、默认键位与编译烧录实战指南【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware导读45-ATS 是一款由 Abec13 设计、QMK 官方仓库直接收录的 45%“And-Then-Some”配列键盘本篇文章以仓库中 keyboards/45_ats/readme.md 为核心骨架结合 keyboard.json、默认键位 keymap.c 与 config.h 的源码细节完整讲解这块键盘在 QMK 中的硬件配置、三种空格配列布局、默认三层键位逻辑以及从零编译固件到刷写的完整流程。读完本文你将能够独立完成 45-ATS 的固件编译、键位定制与烧录并理解其背后的矩阵扫描、旋转编码器与 Mod-Tap 配置原理。45-ATS 键盘与 QMK 官方支持概览45-ATS45% And-Then-Some由 Reddit 用户 Abec13 设计是一款强调“精致与美观”Premium and Beautiful的紧凑型 45% 键盘其设计理念是在保留绝大多数常用按键的同时将布局压缩到 45% 的尺寸。键盘硬件为 45-ATS v1.0 PCB最初于 2019 年 12 月通过 Group Buy团购方式发售。在 QMK 仓库中该键盘的官方维护信息如下见 keyboards/45_ats/readme.md项目内容键盘设计师Abec13键盘维护者MaintainerThe-Royal硬件支持45-ATS v1.0 PCB硬件获取方式2019 年 12 月团购Group Buy与许多早期键盘不同的是45-ATS 在仓库中采用了全>keyboard_name: 45ATS, manufacturer: Abec13, maintainer: The-Royal, usb: { vid: 0xAB13, pid: 0x4511, device_version: 0.0.1 }vid/pidUSB Vendor ID 与 Product ID。0xAB13中的 “AB” 取自设计者 Abec13 的名字0x4511对应 45% 配列45。device_version设备固件版本号0.0.1。主控与引导加载器processor: atmega32u4, bootloader: atmel-dfu45-ATS 使用经典的ATmega32U4主控与多数 AVR 系客制化键盘相同引导加载器为atmel-dfu这意味着刷写固件时需要以 DFU 模式进行详见下文烧录章节。矩阵引脚与二极管方向matrix_pins: { cols: [E6, B0, B1, B2, B3, B7, F6, F5, F4, C7, F7, C6, B6, D4], rows: [D3, D5, D7, D6] }, diode_direction: COL2ROW矩阵为4 行 × 14 列共 56 个矩阵节点与 45% 配列的按键数量吻合。diode_direction: COL2ROW表示二极管方向为列到行Col to Row这是 QMK 中最常见的接法之一该参数直接决定 QMK 扫描矩阵时的读写引脚角色接反会导致按键无法触发。旋转编码器encoder: { rotary: [ {pin_a: B4, pin_b: B5} ] }45-ATS 在 PCB 上集成了1 个旋转编码器A/B 相分别接在B4与B5引脚。编码器的具体行为由键位层的encoder_update_user回调定义见下文默认键位章节。固件特性开关features: { bootmagic: true, command: true, console: true, extrakey: true, mousekey: true, nkro: false }, qmk: { locking: { enabled: true, resync: true } }bootmagic启用 Bootmagic支持通过按键组合直接进入刷写模式或交换按键。command启用 QMK Command 调试功能。console启用调试控制台输出。extrakey启用系统/媒体按键如音量、播放控制。mousekey启用鼠标键功能。nkro: false默认未启用全键无冲N-Key Rollover即默认使用 6KRO6 键无冲如需全键无冲可在编译时以NKRO_ENABLEyes覆盖。qmk.locking启用按键锁定Locking功能并开启 resync 行为用于支持 Caps Lock 等锁定类按键。这些特性在>enum ats_layers{ _BASE, // 基础层 _FN, // 符号、数字与功能层临时层 _LN // 备用功能层临时层 };BASE 基础层QWERTY基础层是默认的 QWERTY 键位采用LAYOUT_split_space布局核心键位如下位置键位说明左上角KC_ESCEsc右上角隔离列KC_PGUP/KC_PGDN上/下翻页主键区QWERTY 标准字母 KC_DEL、KC_BSPC删除/退格第二行KC_TAB…KC_ENT制表符、引号、回车第三行KC_LSFT…RS_SLS左 Shift 与“Shift/斜杠”组合键底行KC_LCTL、KC_LGUI、KC_LALT、MO(_FN)、KC_SPACE、KC_RALT、MO(_LN)控制键 两个临时层触发键右下方KC_LEFT/KC_DOWN/KC_RIGHT与KC_UP、KC_CAPS方向键与 Caps Lock值得注意的细节右 Shift 被定义为RS_SLS#define RS_SLS RSFT_T(KC_SLSH)这是一个Mod-Tap 键点按Tap时输出/斜杠长按Hold时充当右 Shift。这是 45% 小配列键盘典型的空间压缩手法。MO(_FN)与MO(_LN)是临时层切换键按住即切入对应层松开后自动回到 BASE 层。方向键被压缩进右下角四个键位KC_LEFT、KC_DOWN、KC_RIGHT与第三行的KC_UP牺牲一个普通按键换取完整的方向键功能。FN 层数字、符号与标点FN 层[_FN]通过底行的MO(_FN)临时切入将主键区整体映射为数字、符号与函数键同时把右上角隔离列变成KC_HOME/KC_END第一行KC_EXLM!、KC_AT、KC_HASH#、KC_DLR$、KC_PERC%、KC_CIRC^、KC_AMPR、KC_ASTR*、KC_LBRC[、KC_RBRC]、KC_BSLS\即!#$%^*[]\的完整上档符号集。第二行KC_1~KC_0数字键与KC_ENTER。第三行KC_LPRN(、KC_RPRN)、KC_SCLN;、KC_DOT.、KC_MINS-、KC_PLUS、KC_ASTR*、KC_SLSH/、KC_EQL。未使用的键位全部以_______透明/透传填充表示沿用 BASE 层的功能。LN 层F 键、系统控制与媒体控制LN 层[_LN]通过底行的MO(_LN)临时切入主要负责系统与媒体控制第一行KC_PWR电源、KC_F1~KC_F6、KC_MPRV上一曲、KC_MNXT下一曲右上角隔离列为KC_VOLU音量。第二行KC_SLEP睡眠、KC_F7~KC_F12、KC_MPLY播放/暂停隔离列为KC_VOLD音量-。第三行KC_WAKE唤醒。底行第一个键为QK_BOOT进入 DFU 刷写模式这是 45-ATS 最便捷的刷写入口在任意时刻按住MO(_LN)再按底行第一个键即可让键盘直接进入刷写模式无需借助物理重置按钮。[_LN] LAYOUT_split_space( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLU, KC_SLEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_MPLY, KC_VOLD, KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______ )层指示 LED 的实现45-ATS 的 PCB 为每一层配备了独立的指示 LED由layer_state_set_user回调驱动见 keymap.clayer_state_t layer_state_set_user(layer_state_t state) { gpio_write_pin(D0, layer_state_cmp(state, 0)); gpio_write_pin(D1, layer_state_cmp(state, 1)); gpio_write_pin(D2, layer_state_cmp(state, 2)); return state; }其原理是layer_state_cmp(state, N)返回当前激活的最高层是否为第 N 层的布尔值将其直接写入D0、D1、D2三个引脚即可点亮对应层的指示 LED。三个引脚分别对应三层BASE/FN/LN让你在暗光环境下也能一眼看出当前处于哪个层。这里的gpio_write_pin是 QMK 的通用 GPIO 写函数定义于 drivers/gpio 驱动目录中。旋转编码器的音量控制编码器的行为由encoder_update_user回调定义见 keymap.cbool encoder_update_user(uint8_t index, bool clockwise) { if (index 0) { if (clockwise) { tap_code(KC_VOLU); } else { tap_code(KC_VOLD); } } return true; }即顺时针旋转输出“音量”按键逆时针旋转输出“音量-”按键。index 0对应keyboard.json中定义的唯一一个编码器。如果你希望编码器在不同层执行不同动作例如在 BASE 层调音量、在 FN 层滚动页面可以在此基础上结合layer_state_cmp扩展。深入理解config.h 中的 Tap-Hold 调优参数默认键位目录下还有一个 keymaps/default/config.h它针对 Mod-Tap 键尤其是RS_SLS这种 Shift/斜杠组合键做了精细调优#define TAPPING_TERM 175 #define PERMISSIVE_HOLD #define MOD_TAP_INTERUPTTAPPING_TERMTAPPING_TERM 175定义了“点按”判定窗口为175ms在 175ms 内按下并释放Mod-Tap 键输出斜杠超过该时长则视为长按输出 Shift。相比 QMK 默认的 200ms45-ATS 将窗口略微缩短让快速连续输入/时手感更跟手。从源码看TAPPING_TERM被用于 quantum/action_tapping.c 中的WITHIN_TAPPING_TERM宏与get_tapping_term函数实际生效值可通过TAPPING_TERM_PER_KEY实现逐键覆盖但 45-ATS 默认采用全局统一的 175ms。PERMISSIVE_HOLDPERMISSIVE_HOLD宽松保持是 QMK 中一项影响 Mod-Tap 手感的关键策略。其效果是当你在 Mod-Tap 键保持按住期间按下另一个键时Mod-Tap 立即触发 Hold修饰键功能而不再等待 TAPPING_TERM 结束。这在快速打字场景例如“Shift 字母”组合中能显著减少误触发。在源码层面PERMISSIVE_HOLD在 quantum/action_tapping.c 中被编译为TAP_GET_PERMISSIVE_HOLD并在第 374 行的判定中被用于提前结束点按等待TAP_GET_PERMISSIVE_HOLD ||MOD_TAP_INTERUPT需注意该宏已废弃config.h中定义的MOD_TAP_INTERUPT注意源码中的拼写为INTERUPT少一个 R是一个历史遗留宏。在当前版本的 QMK 中该行为已经合并为 Mod-Tap 的默认行为相关代码已被移除并改为编译报错提示。从 quantum/action_tapping.c 的源码可以看出#if defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY) # error IGNORE_MOD_TAP_INTERRUPT_PER_KEY has been removed; the code needs to be ported to use HOLD_ON_OTHER_KEY_PRESS_PER_KEY instead. #elif defined(IGNORE_MOD_TAP_INTERRUPT) # error IGNORE_MOD_TAP_INTERRUPT is no longer necessary as it is now the default behavior of mod-tap keys. Please remove it from your config. #endif变更日志 docs/ChangeLog/20230226.md 与 docs/ChangeLog/20230528.md 记录了完整演进IGNORE_MOD_TAP_INTERRUPT在 2023 年 2 月被标记为废弃2023 年 5 月被彻底移除其行为成为 Mod-Tap 的默认行为。如果你需要恢复旧行为应改用HOLD_ON_OTHER_KEY_PRESS完整的 Tap-Hold 配置项说明见 docs/tap_hold.md。这意味着当你基于当前仓库重新编译 45-ATS 默认键位时MOD_TAP_INTERRUPT这一行虽然会被编译器静默忽略或不再产生预期作用但它并不会导致编译失败如果你在自定义键位时从旧版本文档复制了IGNORE_MOD_TAP_INTERRUPT则必须将其替换为HOLD_ON_OTHER_KEY_PRESS否则编译会直接报错。从零构建与刷写 45-ATS 固件编译环境准备QMK 的构建环境安装方式遵循官方标准流程。全新用户建议从 Complete Newbs Guide 开始它涵盖了工具链安装、qmk setup拉取仓库等完整流程环境细节可参考 getting_started_build_tools。对于 Linux/macOS 用户也可以使用官方qmk_firmware/util/qmk_install.sh脚本快速安装依赖。安装完成后在仓库根目录执行qmk setup它会初始化你的构建环境。由于 45-ATS 已包含在当前仓库中keyboards/45_ats无需额外克隆键盘文件即可直接编译。编译默认固件readme 中给出的编译命令为make 45_ats:default该命令会在仓库根目录编译 45-ATS 的default键位即上文解析的 keymaps/default输出固件文件。由于默认键位使用分裂空格配列编译产物即为分裂空格版本。如果你持有其他空格版本或想编译自己的键位例如mykeymap命令模式为make 45_ats:mykeymap # 编译自定义键位 make 45_ats:default:flash # 编译并直接烧录make命令体系的完整参数如:flash、:dfu、键位选择、NKRO_ENABLEyes等编译覆盖项见 getting_started_make_guide 与 Make 参数参考 之外的 新手指南。刷写固件DFU 模式由于 45-ATS 使用ATmega32U4 atmel-dfu引导加载器刷写方式如下让键盘进入 DFU 刷写模式三种方式任选其一使用默认键位内置的QK_BOOT键按住MO(_LN)再按底行第一个键使用 Bootmagic插入 USB 时按住指定按键进入 Bootloaderbootmagic已在 keyboard.json 中启用按下 PCB 上的物理重置按钮。确认系统识别出 DFU 设备Linux/macOS 下通常显示为Atmel Corp. ...设备。执行编译并烧录make 45_ats:default:flashDFU 刷写的详细步骤驱动安装、Zadig 使用等见 flashing 与 driver_installation_zadig 文档。使用 QMK Configurator / 在线配置的注意点45-ATS 的keyboard.json采用>cp -r keyboards/45_ats/keymaps/default keyboards/45_ats/keymaps/mylayout编辑 keymaps/mylayout/keymap.c修改三层键位或层数量新增层只需在enum ats_layers中追加枚举值并在keymaps[][MATRIX_ROWS][MATRIX_COLS]数组中增加对应层。如需调整手感参数编辑config.h中的TAPPING_TERM、PERMISSIVE_HOLD等宏注意不要直接照搬已废弃的MOD_TAP_INTERUPT/IGNORE_MOD_TAP_INTERRUPT原因见上文“深入理解”章节。编译验证make 45_ats:mylayout确认无编译错误后烧录make 45_ats:mylayout:flash若想新增功能例如为编码器在 FN 层绑定页面滚动、给方向键加LT()层切换键可参考 keymap 文档、功能键码参考 与 编码器特性文档。常见问题与排障编译报错IGNORE_MOD_TAP_INTERRUPT ... has been removed这是旧版键位配置遗留问题删除该宏或改用HOLD_ON_OTHER_KEY_PRESS即可详见 docs/tap_hold.md。按键无反应或整行/整列失效先核对 PCB 焊接与二极管方向是否与keyboard.json中diode_direction: COL2ROW一致。编码器旋转无效果确认keyboard.json中encoder.rotary的引脚B4/B5与 PCB 实际接线一致并检查encoder_update_user中的index值。空格键是 6.25u/6u 却使用了 split_space 配列在键位代码中改用LAYOUT_625_space或LAYOUT_600_space宏重新编译。刷写时设备无法识别确认键盘已进入 DFU 模式可通过lsusb检查 Atmel 设备并按 flashing 文档安装对应平台的 DFU 驱动。结语45-ATS 是 QMK 仓库中一个结构清晰、极具学习价值的 45% 配列键盘案例它以单文件keyboard.json完成了全部 contenteditable="false">【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考