QMK 中 Piantor Pro 键盘实现解析:RP2040 上的 42 键热插拔 Split 键盘构建与烧录
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
QMK 仓库中 keyboards/beekeeb/piantor_pro/readme.md 定义了 Piantor Pro——一款基于 RP2040 的 42 键热插拔(hotswappable)键盘。本文以该文档为主体,结合其 config.h、keyboard.json 与默认键帽映射 keymap.c 的源码,完整覆盖从编译(make beekeeb/piantor_pro:default)、四层键位解析到 RP2040 bootloader 烧录的全流程,读完后可独立完成该键盘的固件构建、键位定制与固件烧写。
产品定位与硬件概况
原文档给出的核心信息为:
- 键盘型号:Piantor Pro,42 键、热插拔、RP2040 主控;
- 键盘维护者:beekeeb;
- 固件构建命令:
make beekeeb/piantor_pro:default(需先搭好 QMK 构建环境); - 烧录方式:按住 BOOT 键插入 USB 进入 bootloader,再运行
make beekeeb/piantor_pro:default:flash,或直接将编译出的 uf2 固件拷贝到 U 盘形态的存储设备。
从 keyboard.json 可进一步确认其硬件画像:
processor为RP2040,bootloader为rp2040(即 UF2 固件形态);- 键阵方向为
COL2ROW; - 启用了 QMK 的 split 键盘框架(
split.enabled: true,串行驱动为vendor)——从源码结构看,左右两半共用同一颗 RP2040,通过本地矩阵模拟 split 结构,左右半侧的区分由 config.h 中的SPLIT_HAND_PIN(GP17)判断; - 启用的固件特性:
bootmagic、extrakey、mousekey、nkro(N-Key Rollover,全键无冲); - USB 标识为厂商 beekeeb 申请的
0xBEEB(VID)/0x0002(PID),设备版本1.0.0。
该键盘与仓库中的近亲型号 Piantor(RPi Pico 平台、可断列、Cantor fork)同属 beekeeb 系列,二者构建命令格式一致,可互为参考。
构建环境与编译
原文档给出的构建入口为:
make beekeeb/piantor_pro:default其中beekeeb/piantor_pro是键盘在仓库中的相对路径,default是 keymaps/default/keymap.c 对应的键位配置名。原文档同时指出,正式编译前需先完成构建环境搭建,仓库内对应的官方文档为:
- 构建环境搭建说明;
- make 编译指南;
- 零基础入门可参考 QMK 新人完整指南。
编译产物位于.build/beekeeb_piantor_pro_default/下,其中beekeeb_piantor_pro_default.uf2即为烧录用的 UF2 固件。
键阵与引脚分配解析
keyboard.json 中的matrix_pins定义了 42 键的物理键阵:
"matrix_pins": { "cols": ["GP11", "GP12", "GP13", "GP14", "GP15", "GP16"], "rows": ["GP7", "GP8", "GP9", "GP10"] }名义上是 4 行 × 6 列,但 Piantor Pro 将其拆成左右两个镜像的 4×6 半区共 48 个物理位置,其中 42 个实际布键(每侧 3×6 主区 + 3 个 thumb 键)。keymap.c 的注释布局图印证了这一结构:
[0] = LAYOUT_split_3x6_3( //,-----------------------------------------------------. ,-----------------------------------------------------. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ... KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT即左半区 18 键 + 右半区 18 键,外加中间底部一排 6 键(每侧 3 键),合计 42 键。
布局宏LAYOUT_split_3x6_3由社区布局提供:layouts/community/split_3x6_3/readme.md 声明了该布局宏名,默认实现可参考 layouts/default/split_3x6_3/default_split_3x6_3/keymap.c;keyboard.json 中的community_layouts字段也显式引用了它,并给出了带 x/y 坐标的 42 键物理坐标表(用于 QMK Configurator 渲染)。
config.h 则补充了板级硬件细节:
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U #define SERIAL_USART_FULL_DUPLEX #define SERIAL_USART_TX_PIN GP0 #define SERIAL_USART_RX_PIN GP1 #define SERIAL_USART_PIN_SWAP #define USB_VBUS_PIN GP19 #define SPLIT_HAND_PIN GP17 #define SPLIT_HAND_PIN_LOW_IS_LEFT逐项说明:
| 宏 | 含义 |
|---|---|
RP2040_BOOTLOADER_DOUBLE_TAP_RESET+..._TIMEOUT 1000U | 开启“双击 RESET 进入 bootloader”:1 秒内双击复位键即可跳入 RP2040 的 UF2 bootloader,作为 BOOT 键方式之外的第二种进入手段 |
SERIAL_USART_*(GP0/GP1,全双工、引脚对调) | RP2040 的 UART 引脚分配。从源码结构看,这些引脚在split.serial.driver: vendor配置下用于 split 框架的本地/硬件串口通道 |
USB_VBUS_PIN GP19 | 检测 USB 供电(VBUS)的引脚,用于判断是否连接供电 |
SPLIT_HAND_PIN GP17+SPLIT_HAND_PIN_LOW_IS_LEFT | 通过 GP17 的电平判断当前是左半还是右半(低电平为左),供 split 框架定位半侧 |
默认键位:四层结构详解
keymaps/default/keymap.c 提供了 4 个 layer,全部使用LAYOUT_split_3x6_3:
- Layer 0(主层):标准 QWERTY 布局。左侧 Tab 置于左上角,底部 thumb 区为
LGUI / MO(1) / SPC / ENT / MO(2) / RALT,两个MO键分别切换到 Layer 1 和 Layer 2; - Layer 1(数字与方向键):上排
1–0数字键,右侧 thumb 区复用为方向键LEFT / DOWN / UP / RIGHT,底部切换键改为MO(3); - Layer 2(符号层):上排与右侧为 Shift 组合符号(
! @ # $ % ^ & * ( )与- = [ ] \_ + { } | ~`); - Layer 3(启动层):左上角放置
QK_BOOT,按下即可直接重启进入 RP2040 bootloader,为日常烧录提供纯键盘操作入口。
一个值得注意的细节是 Layer 1/2 中方向键与符号键的排布:右侧 3×6 主区承担方向键和符号,而左侧大片区域标记为XXXXXXX(无功能占位),这说明该键位是按右手主操作习惯设计的,实际使用可按个人习惯重排。
自定义键位时,复制该 default keymap 目录、修改keymap.c并以新目录名作为 make 参数(如make beekeeb/piantor_pro:my_layout)即可,QMK 会按目录名自动定位键位文件。
固件烧录与 Bootloader 进入方式
原文档的 Flashing 章节给出:
先断开键盘与电脑的连接;按住BOOT键的同时将键盘插入电脑,即可进入 bootloader 模式。
随后两种写入方式:
# 方式一:make 直刷 make beekeeb/piantor_pro:default:flash # 方式二:手动拷贝 # 将 .build/beekeeb_piantor_pro_default/beekeeb_piantor_pro_default.uf2 # 拷贝到键盘挂载出来的 USB 大容量存储设备(U 盘)上结合源码,该键盘实际拥有三种进入 bootloader 的途径:
- BOOT 键:原文档说明的硬件按钮方式,按住 BOOT 键插入 USB;
- 双击 RESET:config.h 中
RP2040_BOOTLOADER_DOUBLE_TAP_RESET使能在 1 秒超时(1000U)内双击复位键直接进入 UF2 bootloader; - 按键组合:默认 keymap Layer 3 左上角的
QK_BOOT键,按下后固件自行重启并进入 bootloader,无需物理按键。
烧录完成后键盘会自动复位并以新固件启动。RP2040 的 UF2 bootloader 会将固件写入 flash 并重载,因此拷贝 uf2 的方式与make ...:flash效果等价,后者只是自动完成了“识别设备 + 拷贝”步骤。
特性与可定制点
除原文档的构建/烧录说明外,结合仓库文件可梳理出以下实用定制点:
- NKRO:keyboard.json 中
"nkro": true,出厂默认全键无冲; - Bootmagic:已启用,即在开机时按特定键组合(默认 Ctrl+左 Shift)可直接进入 bootloader;
- Mousekey / Extrakey:默认启用鼠标键与扩展键(音量、媒体键等)支持;
- split 半侧判定:如需调整左右半判定逻辑,改动点在 config.h 的
SPLIT_HAND_PIN系列宏; - USB 描述符:VID/PID 固定为 beekeeb 厂商标识,
make ...:flash即依赖该 PID 识别设备。
小结
Piantor Pro 在 QMK 中的实现是“单 RP2040 + split 框架 + 本地 4×6 键阵”的典型范例:readme.md 提供构建与烧录的最小操作集,keyboard.json 描述键阵、特性与 USB 标识,config.h 落实 BOOTLOADER 双击复位、串口与半侧判定引脚,keymap.c 给出含QK_BOOT启动层的四层默认键位。掌握以上文件即可独立完成该键盘的编译、键位定制与固件烧写。
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考