ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

QMK 中 CannonKeys Bastion75 键盘的构建、刷写与硬件配置详解

QMK 中 CannonKeys Bastion75 键盘的构建、刷写与硬件配置详解 QMK 中 CannonKeys Bastion75 键盘的构建、刷写与硬件配置详解【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本指南以 QMK Firmware 仓库中 CannonKeys Bastion75 的官方支持文件为骨架系统讲解这款基于 RP2040 主控的 75% 配列 PCB 的固件编译、烧录流程以及 bootloader 三种进入方式。在此基础上文章将深入keyboard.json、config.h、默认键位图与矩阵定义帮助读者理解 QMK 数据驱动配置与硬件实现的对应关系并能独立完成编译、刷写与自定义键位调整。Bastion75 在 QMK 仓库中的目录结构Bastion75 的支持代码位于 keyboards/cannonkeys/bastion75由 CannonKeys 维护维护者 Andrew Kannan见 readme.md采用纯数据驱动data-driven方式配置目录内包含keyboard.json键盘的完整数据驱动配置主控、USB ID、矩阵引脚、特性开关、背光、RGB、全部布局定义config.hRP2040 引导相关与 PWM 背光的底层宏配置halconf.h 与 mcuconf.h启用 ChibiOS 的 PWM 外设支持keymaps/default/keymap.c默认键位图matrix_diagram.md矩阵与配列的可视化参考图硬件概览RP2040 主控与板载资源根据 keyboard.json 的声明Bastion75 的核心硬件规格如下项目配置值主控处理器RP2040Bootloader 类型rp2040USB 引导模式USB VID / PID0xCA04 / 0x0022设备版本 0.0.1矩阵二极管方向COL2ROW矩阵行引脚GP25、GP26、GP27、GP15、GP16、GP17共 6 行矩阵列引脚GP28、GP8、GP14、GP13、GP12、GP11、GP10、GP9、GP6、GP5、GP4、GP3、GP2、GP1、GP0共 15 列Caps Lock 指示灯GP29on_state为 0即低电平点亮背光PWM 驱动GP2215 级亮度支持呼吸灯RGB 灯效WS2812GP7vendor 驱动20 颗 LED从矩阵规模可以看出这是一块 6 行 × 15 列的 PCB通过 COL2ROW 方式扫描按键。需要注意的是矩阵中存在空洞例如第 0 行没有 col 5 的物理按键这是由 75% 配列中功能区留白造成的布局定义中通过跳过的矩阵坐标与之对应。编译与刷写从构建环境到固件烧录构建固件在配置好 QMK 构建环境后编译 Bastion75 默认键位的固件只需一条命令make cannonkeys/bastion75:default该命令会以 keyboards/cannonkeys/bastion75/keymaps/default/keymap.c 为键位源文件结合 keyboard.json 生成 RP2040 目标固件。由于keyboard.json中声明了processor: RP2040与bootloader: rp2040构建系统会自动选择对应的 ARM 平台与 ChibiOS 引导加载器支持无需在 Makefile 中额外指定。如果你尚未搭建构建环境可参考仓库内文档新手上路newbs.md、newbs_getting_started.md、newbs_building_firmware.mdDocker 构建环境getting_started_docker.mdMake 命令完整指南getting_started_make_guide.md刷写固件在目标机器上连接键盘并进入引导模式后执行make cannonkeys/bastion75:default:flash:flash目标会先编译固件随后调用与rp2040bootloader 对应的烧录流程RP2040 通过 USB 引导模式配合reset_usb_boot进入具体实现见下文。更详细的刷写流程可参考 newbs_flashing.md。Bootloader三种进入引导模式的方式Bastion75 支持三种方式进入 bootloader详见 readme.md 的 Bootloader 章节Bootmagic 重置按住矩阵 (0,0) 位置的按键通常是左上角键或 Escape 键再插入 USB 线。这依赖keyboard.json中bootmagic: true的特性开关。物理复位按钮按住 PCB 背面的 BOOTMODE 按钮同时轻按 PCB 背面的 RESET 按钮。这是 RP2040 最标准的 USB 引导模式进入方式。键位中的 Keycode按下映射为QK_BOOT的按键即可。默认键位图中该键位于 Fn 层见下文。双击重置Double-Tap Reset背后的实现除上述三种官方方式外config.h 还启用了 RP2040 的双击重置引导功能#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U #define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64其实现位于 platforms/chibios/bootloaders/rp2040.c固件在__late_init进入main之前检查一块位于.ram0.bootloader_magic段、不会被启动初始化清零的 RAM 中的魔法值0xCAFEB0BA。若该值不匹配则写入魔法值并通过忙等待延时RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT本板为 500ms平台默认 200ms后清零返回若匹配则调用reset_usb_boot()直接进入 USB 引导模式。换言之在 500ms 窗口内连续两次复位或复位后立即触发键盘就会进入 bootloader这也是许多 RP2040 键盘双击上电进入刷写模式的原理来源。同时bootloader_jump()即QK_BOOT的执行路径也直接调用reset_usb_boot()与双击重置共享同一条引导入口。PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64则是为了在特定晶体/供电条件下加大 RP2040 外部晶振启动延时提高上电稳定性的配置宏。背光与 RGB数据驱动配置详解PWM 背光keyboard.json中背光配置为backlight: { breathing: true, breathing_period: 5, levels: 15, pin: GP22 }对应config.h中指定了 PWM 外设#define BACKLIGHT_PWM_DRIVER PWMD3 #define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A而 halconf.h 通过HAL_USE_PWM TRUE打开 ChibiOS 的 PWM 子系统mcuconf.h 则#undef RP_PWM_USE_PWM3并重新#define RP_PWM_USE_PWM3 TRUE启用 RP2040 的 PWM3 通道。三个文件共同构成了数据驱动声明 → 平台宏 → ChibiOS HAL 使能的完整链路背光在 GP22 上以 PWM 调光支持 15 档亮度与呼吸灯周期 5。默认键位图中BL_BRTG、BL_UP、BL_DOWN、BL_TOGG即用于控制这些背光功能。WS2812 RGB 灯效ws2812: { pin: GP7, driver: vendor }, rgblight: { led_count: 20, hue_steps: 17, animations: { static_gradient: true, twinkle: true, rainbow_mood: true, rainbow_swirl: true } }RGB 灯珠接在 GP7采用 vendor 驱动即 RP2040 的 PIO 驱动而非 bit-bang 软件驱动共 20 颗。固件预置了静态渐变、闪烁、彩虹情绪与彩虹旋转四种动画默认键位图的 Fn 层使用UG_TOGG开关 RGB与UG_NEXT切换 RGB 模式进行控制。布局体系从 LAYOUT_all 到多种 ANSI/ISO 变体keyboard.json定义了 8 种布局宏覆盖 ANSI / ISO 与 Blocke r / Tsangan 及分体退格键split Backspace的组合布局宏说明LAYOUT_all全键位布局默认键位图使用LAYOUT_ansi_blocker/LAYOUT_ansi_blocker_split_bsANSI Blocker含分体退格变体LAYOUT_ansi_blocker_tsangan/LAYOUT_ansi_blocker_tsangan_split_bsANSI Tsangan 底行LAYOUT_iso_blocker/LAYOUT_iso_blocker_split_bsISO 回车 BlockerLAYOUT_iso_blocker_tsangan/LAYOUT_iso_blocker_tsangan_split_bsISO Tsangan 底行同时通过layout_aliases将LAYOUT作为LAYOUT_all的别名方便键位文件使用更短的名字。布局定义中的每个条目以matrix指定矩阵坐标[row, col]以x/y指定物理位置以w/h指定键帽宽度/高度如 1.5u Tab、2.25u 右 Shift、ISO 回车用w: 1.25, h: 2表示 1.25u 宽、2 行高的竖回车。需要对照矩阵坐标理解配列时可参考 matrix_diagram.md 中的 ASCII 矩阵图它同时标注了 2u 退格、ISO 回车、2.25u 左 Shift、Blocker 与 Tsangan 底行等各变体的键位占用情况。默认键位图分析默认键位定义在 keymaps/default/keymap.c包含两个图层_BASE层标准 75% 布局——顶部为 Esc F1~F12 播放键KC_MPLY主键区为完整字母区、数字区与方向键底部为标准 WKL 风格 6.25u 空格KC_SPC× 3右侧为MO(_FN1)功能层触发键。_FN1层提供 F 区快捷复用QK_GESC、F1~F12、RGB 控制UG_TOGG、UG_NEXT、背光控制BL_BRTG、BL_UP、BL_DOWN、BL_TOGG、方向键/编辑键KC_LEFT、KC_RIGHT、KC_UP、KC_DOWN、KC_DEL、KC_HOME、KC_END、KC_PGUP、KC_PGDN并在LAYOUT_all最后一个矩阵位置映射了QK_BOOT即文章开头提到的按键进入 bootloader方式。自定义键位时复制keymaps/default目录并修改keymap.c中的keymaps[][MATRIX_ROWS][MATRIX_COLS]数组即可若使用其他布局变体如 ISO需将宏替换为对应的LAYOUT_iso_*名称并保持每个矩阵坐标都有对应键值。小结CannonKeys Bastion75 是一个典型的纯数据驱动 RP2040 键盘硬件声明全部集中在 keyboard.json引导与 PWM 底层细节收敛在config.h/halconf.h/mcuconf.h键位与配列则分别由默认键位图和 8 个布局宏承载。编译与刷写只需make cannonkeys/bastion75:default与make cannonkeys/bastion75:default:flash两条命令配合 Bootmagic、物理 BOOTMODE/RESET 按钮或QK_BOOT键即可随时进入引导模式适合作为学习 QMK 数据驱动键盘配置与 RP2040 引导机制的参考实现。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表