QMK 实战Cheshire Curiosity 键盘默认键位的三层布局设计与源码解析【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本篇以 QMK Firmware 仓库中 Cheshire Curiosity 默认键位 为线索完整拆解这款 Alice 配列 PCB 的官方默认键位图三层布局QWERTY 主层、功能与鼠标键层、方向与媒体键层、IJKL 方向键、Caps/Control 合一的 Mod-Tap 设计并结合 keymap.c 源码、keyboard.json 硬件配置与 QMK 核心键码定义讲清每个键位背后的实现原理与刷写方法。读完本文你将掌握 Alice 配列分层键位的组织思路并能直接理解、修改或迁移这套默认键位。Curiosity 是什么硬件与键位文件速览Cheshire Curiosity 是 Cheshire Alice Keyboard 的替换 PCB由 Nightingale Studios/PhoenixStarr 设计维护者为 sidcarter基于 STM32F072CBT6 主控。其硬件配置集中在 keyboards/cheshire/curiosity/keyboard.jsonUSB 标识VID0xCAFE、PID0x0FAD、设备版本0.0.1主控与引导处理器STM32F072bootloader 为stm32-dfu指示灯Caps LockA9、Num LockA8、Scroll LockA10on_state为 0低电平点亮RGB 灯效通过 WS2812引脚 B15驱动 14 颗 LED启用了 breathing、rainbow_mood、rainbow_swirl、snake、knight、christmas、static_gradient、rgb_test、alternating、twinkle 等动画启用功能bootmagic、extrakey媒体/系统键、mousekey鼠标键、rgblightnkro关闭即使用 6KRO布局community_layouts声明了alice与alice_split_bs两种社区布局且LAYOUT_default通过layout_aliases直接映射到LAYOUT_alice_split_bs——因此 keymap.c 中使用的LAYOUT_default(...)宏本质上就是 Alice 分裂退格配列。而默认键位的「说明书」——keymaps/default/readme.md——用四句话概括了整套设计哲学一个承载全部功能键与鼠标键的层一个承载方向键与媒体键的层IJKL 上放方向键Caps Lock 键同时承担 Control 功能。这四点将在下面逐一展开并落到具体的键码与 QMK 核心机制上。三层布局总览_QWERTY / _FNMS / _NAVMED默认键位用 C 枚举定义了三层见 keymap.cenum my_layers { _QWERTY, _FNMS, _NAVMED };层名用途切入方式_QWERTY日常打字主层默认层_FNMS功能键F1–F12 鼠标键 RGB 控制按住右下角FNMS键右 Shift 位置_NAVMED方向键 媒体键 Home/End 复位/清空按住空格位置NAVMED键层切换采用MO()Momentary / 瞬时层键码按住即临时切入对应层松手自动回到主层#define FNMS MO(_FNMS) #define NAVMED MO(_NAVMED)MO(layer)在 QMK 中的定义位于 quantum/quantum_keycodes.h本质是把层号编码进QK_MOMENTARY键码族按下时由layer_on()使能目标层释放时调用layer_off()恢复因此配合主层键位实现「按住不松手、另一只手按功能键」的操作方式无需额外的层状态管理。键位表的完整定义使用LAYOUT_default即LAYOUT_alice_split_bs三层共用同一物理配列各键位以_______透明继承主层键位这正是 QMK 分层机制的核心用法。完整源码见 keymaps/default/keymap.c。主层 _QWERTY打字布局与修饰键定制主层保持标准 QWERTY 打字排布同时做了三处典型的 Alice/生产力键盘定制1. Grave EscapeQK_GESCEsc 与反引号合一最左上角键位是QK_GESC对应 QMK 的QK_GRAVE_ESCAPE见 quantum/keycodes.h单独按下输出Esc配合 Shift 或 GUI 键按下则输出反引号或~省去一个物理键位。2. Caps 与 Control 合一CTL_T(KC_CAPS)这是 readme 中「Caps and control on caps lock - wonderful」一句的落地实现#define CAP_CTL CTL_T(KC_CAPS)CTL_T(kc)是 QMK 的 Mod-Tap 键码——点按输出普通键按住则充当修饰键。其定义在 quantum/quantum_keycodes.h#define LCTL_T(kc) MT(MOD_LCTL, kc) #define CTL_T(kc) LCTL_T(kc)即CTL_T(KC_CAPS)展开为MT(MOD_LCTL, KC_CAPS)轻点一次发送 Caps Lock 切换大写长按不放则表现为左 Ctrl可用于 CtrlC/V 等组合键。对 Vim 用户或经常使用组合键的开发者而言这一设计让「小指够 Ctrl」的痛点在 Alice 布局上得到缓解。需要说明的是Mod-Tap 涉及按键时长判定由TAPPING_TERM控制默认 200ms长按与点按的边界行为属于 QMK 通用机制可参考仓库 docs/mod_tap.md 进一步调整。3. 双空格、双 B 与系统键主层还体现了 Alice 分裂空格的设计空格被拆为两个[4,5]与[4,9]位置左侧为KC_LALT、右侧为KC_SPC中间NAVMEDMO(_NAVMED)被放在空格键位置方便拇指按住切换方向层。底部还保留KC_LCMD左 GUI、KC_RALT右 Alt、左右 Ctrl 等系统键其中_QWERTY层左 Ctrl 为普通KC_LCTL。功能与鼠标层 _FNMS右手不离键盘完成一切_FNMS层由右 Shift 位置的FNMS键MO(_FNMS)切入是 readme 所述「A layer for all functions and mouse keys」的载体键位分配见 keymap.cF 区KC_F1~KC_F12铺满数字行配合UG_TOGG、UG_NEXT的 RGB 开关与模式切换鼠标移动MS_UP/MS_LEFT/MS_DOWN/MS_RGHT放在主层I / J / K / L的位置形成「方向键式」的鼠标指针移动鼠标按键MS_BTN1左键在 H 位置、MS_BTN2右键在分号;位置左右手食指/小指均可触及RGB 精细化控制UG_SATU/UG_SATD饱和度加减、UG_HUEU/UG_HUED色相加减、UG_VALU/UG_VALD亮度加减分布在左手拇指区附近对应 QMK 的 underglow 键码族见 quantum/keycodes.hAG_TOGG位于主层左 Ctrl 位置一键交换/恢复 Alt 与 GUI 键兼容 macOS 与 Windows 键位习惯对应QK_MAGIC_TOGGLE_ALT_GUI见 quantum/keycodes.hQK_BOOT置于右上角按下直接进入 DFU 刷写模式。鼠标键能够工作依赖 keyboard.json 中启用的mousekey特性RGB 相关键码则依赖rgblight特性与 WS2812 配置。方向与媒体层 _NAVMEDIJKL 方向键 媒体控制_NAVMED层由空格位置切入readme 所述「Arrows on IJKL」在此实现见 keymap.c物理键位主层字母_NAVMED 层键码功能IKC_UP上JKC_LEFT左KKC_DOWN下LKC_RGHT右U上方KC_HOME行首H 左侧E 下KC_END行尾GKC_MPLY播放/暂停B 位置KC_VOLD/KC_VOLU音量减/加右上角QK_BOOT进入刷写模式回车旁EE_CLR清除 EEPROM恢复出厂将方向键放在 I/J/K/L 是类 Vim 的经典映射打字时双手保持在字母区无需移向独立方向键区。KC_UP等方向键码、KC_MPLY/KC_VOLD/KC_VOLU媒体键码的定义分别见 quantum/keycodes.h 与 quantum/keycodes.h。两个隐藏的「维护键位」值得注意QK_BOOT进入刷写_FNMS与_NAVMED右上角各放一个对应QK_BOOTLOADERquantum/keycodes.h配合stm32-dfu引导无需反复按硬件复位EE_CLR清空 EEPROM对应QK_CLEAR_EEPROMquantum/keycodes.h可将配置如 RGB 设置、键位改写等恢复为默认用于排障。刷新固件make 命令与首次刷写流程Curiosity 的官方刷写说明见 keyboards/cheshire/curiosity/readme.mdmake cheshire/curiosity:default:flash首次刷写该 PCB 时按以下顺序操作将 PCB 背面的DIP 开关拨到 1按下Reset 按钮随后执行make cheshire/curiosity:default刷写成功后将 DIP 开关拨回 0。编译命令中的cheshire/curiosity对应键盘目录 keyboards/cheshire/curiosity:default指定本篇文章解析的默认键位:flash在编译后直接调用刷写工具。若要自定义键位可在keymaps/下新建目录并复制 keymaps/default/keymap.c 作为起点然后以make cheshire/curiosity:你的键位名:flash构建。小结从键位表到 QMK 机制的对应关系Curiosity 默认键位虽只有三行说明但背后串联了 QMK 的多项核心机制可用下表速查readme 要点实现键码/机制源码位置功能鼠标层MO(_FNMS)、MS_*鼠标键keymap.c、quantum/keycodes.h方向媒体层MO(_NAVMED)、KC_UP/LEFT/DOWN/RGHT、KC_MPLY等keymap.cIJKL 方向键_NAVMED层在 I/J/K/L 位放置方向键码同上CapsControlCTL_T(KC_CAPS)Mod-Tapkeymap.c、quantum/quantum_keycodes.h这套键位设计的核心价值在于把「打字」与「控制」两种操作解耦到不同的瞬时层让右手始终停留在字母区——方向键、鼠标、媒体、功能键全部通过两个拇指/小指可及的MO()键调用符合 Alice 配列紧凑高效的定位。如果你正在使用或移植 Curiosity 键盘直接对照本文的键位表与源码即可快速上手如果你在其他配列上复用这套思路Mod-Tap 加双瞬时层的组合同样值得借鉴。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考