
QMK 固件中的 Cordillera 键盘基于 STM32F072 的 Alice 布局背光 PCB 移植详解【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware导读Cordillera 是 Coarse 出品的一款公开在售的 Alice 风格替换 PCB专为 top mount USB-C Alice 外壳设计支持背光与三颗指示灯。本文以 keyboards/coarse/cordillera/readme.md 为主线结合 keyboard.json、config.h、keymaps/default/keymap.c 等仓库源码从硬件规格、矩阵布线、数据驱动配置、背光实现、默认键位到编译刷写完整讲解这块 PCB 在 QMK 固件中的落地方式。读完本文你将掌握如何为 Cordillera 编译固件、四种 Alice 布局宏之间的差异、PWM 背光的底层配置原理以及如何在默认键位基础上自定义自己的层。一、Cordillera 是什么根据官方 readme 的描述Cordillera 是一款公开可用的替换背光 PCBbacklit replacement PCB适配top mount USB-C Alice 外壳键盘维护者Maintainercoarse支持的硬件Cordillera PCB硬件可获得性通过维护者 coarse 公开发售所谓 Alice 布局是指仿照 TGR Alice 的人体工学配列——键盘中间区域向内收拢、左右手区各有一块弧形排列的字母区空格被拆分为左右两颗整体呈 V 形。Cordillera 的价值在于它是一块可以直接替换进现有 top mount Alice 外壳的第三方 PCB同时自带背光能力这一点在数据驱动配置中被backlight: true明确启用见下文。该键盘属于 Coarse 旗下的三块板子之一与 coarse/ixora6 键 ARM 宏键盘和 coarse/vinta65% 键盘同属一个维护者但 Cordillera 是其中唯一采用 Alice 配列、且支持 PWM 背光的型号。二、硬件规格从 keyboard.json 读出的核心参数QMK 采用数据驱动配置data-driven configurationCordillera 的全部硬件描述集中在 keyboard.json 中。这是理解这块板子的第一手资料项目值说明键盘名Cordillera厂商名 CoarseVID / PID0x434B/0x1401USB 设备标识刷写与驱动识别依据设备版本0.0.1USB device version处理器STM32F072ARM Cortex-M0 系列 MCUBootloaderstm32-dfuSTM32 内置 USB DFU 引导矩阵方向COL2ROW列扫描行读取矩阵规模5 行 × 16 列见matrix_pins背光6 级亮度 呼吸效果引脚 A8PWM 驱动2.1 启用的功能开关features: { backlight: true, bootmagic: true, command: true, console: true, extrakey: true, mousekey: true, nkro: true }backlight背光功能配合backlight: {pin: A8, levels: 6, breathing: true}使用bootmagic允许通过插线瞬间按住指定键进入刷写模式等魔法功能command启用 QMK 命令行Command调试功能console启用调试控制台输出配合 docs/faq_debug.md 使用extrakey多媒体/系统控制键支持mousekey鼠标键支持nkroN 键无冲。2.2 指示灯与锁定键配置indicators: { caps_lock: A1, num_lock: B0, scroll_lock: A0, on_state: 0 }Caps Lock、Num Lock、Scroll Lock 三颗指示灯分别接在 A1、B0、A0 引脚on_state: 0表示低电平点亮。同时在qmk.locking中开启了锁定键重同步qmk: { locking: { enabled: true, resync: true } }三、矩阵布线5×16 的 COL2ROW 扫描Cordillera 的矩阵在 keyboard.json 的matrix_pins中定义matrix_pins: { cols: [B15, B14, B13, B12, B11, B10, B2, B1, B8, B7, B6, B5, B4, B3, A15, A14], rows: [A13, B9, F1, A10, A9] }16 根列线依次接在 STM32F072 的 GPIO 上B15…A145 根行线接在 A13、B9、F1、A10、A9diode_direction: COL2ROW表示二极管从列指向行这是大多数现代 PCB 的接法。16 列 × 5 行一共 80 个矩阵节点而 Alice 配列实际按键数远少于 80因此布局宏中大量矩阵位置如[4,0]、[4,2]等被留空这是 Alice 类 PCB 的典型特征——左右手区之间以及底行中央存在大段空位。可以推断从源码结构看行信号 F1 的使用说明这块 PCB 将矩阵分散在了 STM32F072 的不同 GPIO 端口上实际布线时需以厂商提供的原理图为准。四、四种 Alice 布局宏同一个矩阵多种配列Cordillera 在 keyboard.json 中一口气定义了4 种布局宏并声明了两个社区布局community_layouts: [alice, alice_split_bs]布局宏特点LAYOUT_alice标准 Alice右侧 Backspace 为 2U 大键LAYOUT_alice_split_bs拆分 Backspace两颗 1U 键LAYOUT_alice_split_bs_full_rshift拆分 Backspace 2.75U 右 ShiftLAYOUT_alice_full_rshift标准 2U Backspace 2.75U 右 Shift对比可见四个布局的差异集中在右上角 Backspace 区和右下角 Shift 区LAYOUT_alice中{matrix: [0, 15], x: 17, y: 0.25, w: 2}是 2U BackspaceLAYOUT_alice_split_bs中第 0 行末尾变成[0, 14]与[0, 15]两颗 1U 键底行方面LAYOUT_alice与LAYOUT_alice_split_bs的右 Shift 为 1.75U[3, 14][3, 15]各 1U、1.75U而两个full_rshift变体把右 Shift 合并为w: 2.75的一颗大键。这些布局宏与 QMK 社区布局目录 layouts/community/alice/readme.md 中的LAYOUT_alice保持命名一致好处是社区通用键位如 layouts/default/alice/default_alice/keymap.c可以直接编译到 Cordillera 上实现跨键盘的键位复用。这也是 QMK 数据驱动布局体系的核心价值。4.1 用坐标理解 Alice 的错位以LAYOUT_alice第一行为例{matrix: [0, 0], x: 0.5, y: 0}, {matrix: [0, 1], x: 1.75, y: 0.25}, {matrix: [0, 2], x: 2.75, y: 0.25},Esc 在y: 0其后字母区整体下沉到y: 0.25x从 1.75 开始步进 1——这就是 Alice 配列中部下沉、两侧上浮的人体工学错位在数据层的直接体现。w字段用于定义 1.5U、1.75U、2U、2.25U、2.75U 等异形键帽宽度。五、背光实现PWM 驱动的 6 级背光Cordillera 最鲜明的特性是背光。背光的开关位于 keyboard.jsonbacklight: { pin: A8, levels: 6, breathing: true }而在固件底层背光由三份 ChibiOS/ChibiOS 配置文件协同完成5.1 config.h指定 PWM 驱动与通道config.h 中只有两条核心宏#define BACKLIGHT_PWM_DRIVER PWMD1 #define BACKLIGHT_PWM_CHANNEL 1PWMD1即 ChibiOS 的 PWM 驱动 1绑定到 TIM1 定时器BACKLIGHT_PWM_CHANNEL 1选择 PWM 通道 1。A8 引脚正是 STM32F072 TIM1 通道 1 的复用功能引脚——QMK 通过 PWM 输出来调节背光亮度而非简单的开关 GPIO。5.2 halconf.h / mcuconf.h打开 PWM 外设halconf.h 中#define HAL_USE_PWM TRUE启用 HAL 层的 PWM 抽象mcuconf.h 中#undef STM32_PWM_USE_TIM1 #define STM32_PWM_USE_TIM1 TRUE显式启用 TIM1 定时器用于 PWM同时#define STM32_I2C_USE_DMA FALSE关闭 I2C 的 DMA 使用。这三份文件加上 keyboard.json 中的backlight配置共同构成了完整的背光链路数据驱动层声明pin/levels/breathing→ ChibiOS HAL 层HAL_USE_PWM→ MCU 定时器层TIM1→ 引脚输出A8。想要调整背光亮度档位改keyboard.json中的levels即可无需触碰 C 代码。这三份文件头部均标注由qmk chibios-confmigrate自动生成如 mcuconf.h 第 17-20 行说明它们是 QMK 官方配置迁移工具的产物手工修改时需保持格式兼容。六、默认键位图解析Cordillera 自带一份默认键位 keymaps/default/keymap.c包含两层6.1 层 0标准 Alice 输入层[0] LAYOUT_alice( KC_ESC, 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_PGUP, 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_PGDN, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL ),值得注意的细节左右各有一颗空格KC_SPC是 Alice 配列的标志性特征KC_B出现两次第 3 行左字母区末尾与右字母区开头各一个 B 键均映射到同一矩阵列附近位置[3,5]与[3,8]这是 Alice 中间双 B 的典型布局MO(1)出现两次左右手区各有一颗层切换键方便任意单手操作左侧KC_PGUP/KC_PGDN放在 Tab 上方将功能键融入主键区属于该默认键位的个人风格。6.2 层 1功能层[1] LAYOUT_alice( QK_BOOT, _______, 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_DEL, KC_HOME, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),QK_BOOT放在 Esc 位置按MO(1) Esc 即可让键盘进入 DFU 刷写模式配合stm32-dfubootloader 与 docs/newbs_flashing.md 使用方向键安排在WASD位置的KC_UP/KC_LEFT/KC_DOWN/KC_RGHT适合游戏或快速导航F1–F12 映射到数字行Del/Home/End 分布在右侧。_______表示透传transparent即沿用上一层层 0的按键功能这是 QMK 分层机制的标准写法详见 docs/feature_layers.md。七、编译与刷写7.1 构建固件readme 给出的标准构建命令为需先完成 QMK 构建环境配置参见 docs/newbs.md 与 docs/getting_started_make_guide.mdmake coarse/cordillera:default该命令会编译默认键位keymaps/default并生成 hex/bin 固件。若要编译其他键位将default替换为目标键位目录名即可。7.2 进入刷写模式该键盘 bootloader 配置为stm32-dfu默认键位层 1 的 Esc 位置绑定了QK_BOOT按住MO(1)的同时按 Esc 即可触发软件复位进入 DFU也可借助bootmagic功能已启用进入刷写模式进入 DFU 后使用 docs/newbs_flashing.md 中介绍的qmk flash或make coarse/cordillera:default:flash进行刷写。注意同为 Coarse 出品的 Ixora、Vinta 使用的是 STM32F042 芯片其 readmecoarse/ixora/readme.md特别注明该芯片无法通过软件跳转 bootloader只能按住 BOOT0 上电进入刷写模式。而 Cordillera 使用STM32F072 stm32-dfu组合默认键位中安排了QK_BOOT两者进入刷写模式的方式不同操作时需区分。7.3 构建环境的其他入口QMK 新手建议从 docs/newbs.md 的完整新手指南开始已经具备环境的老手可直接按上述命令构建。构建产物与更多键盘参数可通过make coarse/cordillera:default:info之类的 QMK 命令查看。八、小结Cordillera 是 QMK 数据驱动配置体系下的一个典型范例一块面向 top mount USB-C Alice 外壳的替换背光 PCB采用 STM32F072 主控通过 keyboard.json 声明了 5×16 COL2ROW 矩阵、4 种 Alice 布局宏、PWM 背光与三颗指示灯并在 config.h、halconf.h、mcuconf.h 中完成了 TIM1 PWM 驱动的底层配置。默认键位 keymaps/default/keymap.c 提供了双空格、双 B、双MO(1)的标准 Alice 输入体验并将QK_BOOT安排在功能层首位便于刷写。对玩家而言可以基于以上文件快速定制修改keyboard.json的背光档位、增删社区布局、复制keymaps/default新建个人键位再以make coarse/cordillera:自定义键位名完成构建——这正是 QMK 生态硬件描述与键位逻辑解耦的设计意图。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考