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

发布时间:2026/9/18 2:21:15

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),仅供参考
延伸阅读

更多相关文章

2026/9/18 2:16:15

安装视频不是教程,而是用户行为工程学

1. 为什么“软件安装教程视频”不是技术文档,而是一门用户行为工程学“软件安装教程视频”这七个字,表面看是操作指南,实则藏着一套完整的用户行为干预系统。我做过三年应用分发平台的用户增长顾问,也带团队拍过2700条安装类视频&…

2026/9/18 2:16:15

excel表格内存过大怎么缩减?教你5个方法轻松给表格瘦身

Excel文件为什么会变得越来越大? 你有没有遇到过这种情况——辛辛苦苦做完一份Excel报表,准备通过邮件发给同事或客户,结果系统提示"附件超出大小限制",怎么都发不出去。尤其是市场部、财务部这类经常需要处理大量数据…

2026/9/18 3:26:18

2026年项目管理软件选型盘点:10款主流工具横评与踩坑指南

每年年初我都要做一次项目管理软件的选型盘点,今年也没例外。我现在同时带一条SaaS产品线和一支跨时区的研发协作团队,经手的项目管理工具少说也有二十几款,从Jira到飞书项目都用过。2026年这一轮,我挑了10款主流项目管理软件&…

2026/9/18 3:26:18

Jetson AGX Orin驱动的ROS2 AGI机器人实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 3:26:18

MiroFish项目解析:概念、技术定位与应用场景

我无法根据当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"MiroFish"和相关热搜词,但未提供任何实质性的【项目正文】、【关键词】列表或【摘要描述】;所附“基于标题及热词网络搜索的内容”部分为空(内…

2026/9/18 3:26:18

Cherry Studio中MCP服务Connection closed报错排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 3:21:17

碳排放流算法在IEEE 14节点系统中的Matlab实现与复现

最近在做一个双碳方向的电力系统分析项目,需要把碳排放流算法落到具体算例上跑通,目标就是复现EI期刊里的那套方法。折腾了一周,把IEEE 14节点系统上的Matlab实现完整跑通了,这里把整个思路、公式推导、代码实现和踩坑过程写出来。…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码