分享一下最近自己入门嵌入式写的几篇博客, 一步一步在 stm32f103 开发板上移植上 qmk 固件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hitsmaxft
V2EX    程序员

分享一下最近自己入门嵌入式写的几篇博客, 一步一步在 stm32f103 开发板上移植上 qmk 固件

  •  
  •   hitsmaxft
    hitsmaxft 2024-05-08 21:02:24 +08:00 2300 次点击
    这是一个创建于 519 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近业余时间把自己多年前买了之后一直吃灰的 野火指南者开发板拿出来把 qmk 跑上去了. 一点点地熟悉了 qmk chibios 和 stm32, 完全没搞过微电子类的开发, 算是分享一下学习笔记.

    说实话 stm32f103 不是新手入门 qmk 的好选择, 不过我自己一点点把问题搞清楚并解决, 也算是提前学习了更多基础知识了.

    文章一, 给这块老板子刷上了 dfu bootloader, 解决刷 qmk 固件麻烦的问题.

    https://io.bhe.ink/2024/04/16/YEHUO-ZNZ-Part-1-build-dfu-bootloader-for-znz-board/

    其实, 这块板子的 usb 的 disc pin 困扰了我好久, 这也让我学习了要看原理图, 相关引脚的原理图上都要看一遍, 该初始化对的一个都不能少.

    文章二, 开始一步一步调试把 qmk 跑了起来.

    https://io.bhe.ink/2024/04/29/YEHUO-ZNZ-Part-2-make-a-qmk-prototype-base-on-znz-board/

    这块没啥困难, 需要了解一下 layout 和引脚的映射关系, 用的 direct pin. 用更实用的行列式配置也简单的.

    文章三, 搞定了 qmk 的基本部分, 接下来就是让板载的 eeprom 存储发挥作用, 和 w2812 RGB 灯珠.

    https://io.bhe.ink/2024/04/30/YEHUO-ZNZ-Part-3-make-a-qmk-prototype-base-on-znz-board-rgb-and-eeprom/

    oled 还没写. 由于 chibios 很挫的只支持了 i2c1 , 我实际上又把 eeprom 切回了实用 mcu 内部的 flash 模拟(更简单), 把 i2c1 让给了 ssd1306 这块屏幕

    成品图 https://img.bhe.ink/IMG_2238.jpeg

    13 条回复    2025-06-25 02:46:20 +08:00
    CEBBCAT
        1
    CEBBCAT  
       2024-05-08 21:30:55 +08:00
    很好 收藏了 /doge

    学校学的都是软件方向,虽然自己也尝试过加入电子社团,但是就像我那学了一半的编译器,始终没有很好的进展。晚点时候看看,希望能有大结果
    tywtyw2002
        2
    tywtyw2002  
       2024-05-09 03:57:16 +08:00 via iPhone
    f103 弄 qmk 的确有点跟自己作对。除非是老板子是带 f103 mcu 的,否则新设计都不会去选 f103 ,毕竟那个 mcu 性能有点堪忧。

    现在 diy 键盘,有线 mcu 选 rp2040 ,蓝牙选 nrf52840 。

    自己 diy 键盘还是要选社区支持性好的 mcu ,否则折腾底层太浪费时间了。
    hitsmaxft
        3
    hitsmaxft  
    OP
       2024-05-09 08:21:59 +08:00 via iPhone
    @tywtyw2002 实际操作下来难度倒也不大,毕竟键盘固件基础功功能开销很小。我也就是学习了下 dma 和时钟是咋工作的。

    蓝牙我打算下一步用外挂 nrf52810 来实现。参考一下 annepro2 的代码实现

    我用 stm32f1 用出于学习目的,基础知识完备工作量也挺小的。
    tywtyw2002
        4
    tywtyw2002  
       2024-05-09 10:40:36 +08:00   1
    @hitsmaxft #3
    是啊键盘 8bit AVR 都能跑。mcu 性能好了,编程就容易多了,不用去考虑 flash ram 够不够。

    如果我没记错的化,qmk 蓝牙是目前是走得 AT 协议,的确可以说是外挂了。不过需要蓝牙模块有支持 HID 的 AT 协议程序。

    qmk 挂蓝牙,功耗在那里摆着呢,太费电了。根本没法到 uA 级别,远不如原生 nrf52480+zmk 了。

    说起代码,QMK 真的跟一坨 X 一样。远远不如 ZMK 简洁。
    ( QMK 的主逻辑跟功能支持是用一堆 define 写的,ZMK 的主逻辑是消息队列。)
    hitsmaxft
        5
    hitsmaxft  
    OP
       2024-05-09 12:47:30 +08:00 via iPhone
    @tywtyw2002 作为一个开源项目,还是做得不错了,社区和文档都还行,就是蓝牙这个协议上限制死了很让人头疼
    hitsmaxft
        6
    hitsmaxft  
    OP
       2024-05-09 13:54:25 +08:00
    @tywtyw2002 qmk 目前在用外挂蓝牙的方案挺普遍, anne pro 2 和 keychron 都是, 还有大量个人做的定制键盘 pcb


    zmk 在计划任务里. nrf52480 开发板还没买.

    qmk 定制的改起来难度也不大,该有的回调函数也都提供了, 可能我没怎么接触 c 代码项目. 看上去都一个样, 宏满天飞..

    就是底下那个 chibios 感觉不是太流行, 也不支持 nrf52 或者 esp32
    tywtyw2002
        7
    tywtyw2002  
       2024-05-09 14:35:13 +08:00   1
    @hitsmaxft #6
    历史遗留问题啊,201X 年那时候机械键盘刚流行,很多 60%定制 PCB 都是 GH60 开源的改版,mcu 是 AVR8bit ,出货量最大的是 Satan 的板子。
    后来一些开源项目把 MCU 升级成了 STM32 了,然后各个作坊就开始量产定制键盘了。
    画画 pcb + qmk 就敢说是定制。

    chibios 就是当年 STM32 刚出来的产物,要移植 QMK 到 STM32 平台,最简单就是找个支持 USB HID 的底层,然后不知道为什么就选了 chibios 。
    VIA 什么的应该是为了方便改 QMK 键盘层搞出来的东西,对普通人意义重大,但是对程序员没啥用,改键位什么的直接改 C 代码然后编译,也就是几分钟的事情。

    EPS32 没有任何支持的固件,各种 RTOS 对 ESP32 USB 的支持很差,想搞键盘固件,要不你把 QMK 的 keymatrix scan 和 action 移植到 IDF 上,要不等 zephyrproject 支持了 ESP32 USB 和低功耗跑 ZMK 。

    ZMK 算是现在键盘固件,直接找了个 RTOS 然后重写整个键盘的逻辑层,只要 zephyrproject 支持的 MCU ,简单移植下,ZMK 就能跑。

    现在社区键盘高玩们都在画板子玩 Split 了,类似 Corne 3*6 之类的了。layout 搞 tap dance/macro 等等。

    ZMK nrf52 蓝牙无灯,能做到 500mha 电池半年一冲。


    nrf52480 搜 nicenano ,30+吧。RP2040 10+左右。
    hitsmaxft
        8
    hitsmaxft  
    OP
       2024-05-09 21:03:30 +08:00 via iPhone
    @tywtyw2002 我自己现在用着 61 键和 lily58 的分体,说实话我实在是没觉得分体和直列有多大优势,误操作太多了,还不如固定的
    tywtyw2002
        9
    tywtyw2002  
       2024-05-10 03:02:21 +08:00 via iPhone
    @hitsmaxft 分体优势还是 36 42keys 这样的,不过需要练习,熟悉了就觉得很舒服。键盘定义一堆 combo ,然后大部分操作都可以 2 个键解决。

    这东西跟 vim 一样,有学习曲线。
    hitsmaxft
        10
    hitsmaxft  
    OP
       2024-05-10 15:08:40 +08:00 via iPhone
    @tywtyw2002 我就是长时间使用了直列分体之后的感想
    直列只不过简化了制作,但是使用体感确实不如交错布局。
    tywtyw2002
        11
    tywtw2002  
       2024-05-11 03:30:15 +08:00 via iPhone
    @hitsmaxft 斜列也不复杂啊。

    画 pcb 的时候 switch 和 diode 都是用脚本排位置啊,什么布局都没差别。。。。

    边框用 cad 画或者 build123d 直接脚本出 dfx 了。

    corne 我搞了个专门玩游戏的键位,玩起来特别爽。
    hitsmaxft
        12
    hitsmaxft  
    OP
       107 天前
    @tywtyw2002 现在我基本也全是 corne solfe 之类的.

    直列熟悉过程是比较复杂, 不过熟悉之后, 输入体验确实提升了不少.

    个人感觉就是每一列的高低和位置还是有比较多的调整空间. corne 的 p 和 a 列的位置还是可以再低半 u
    tywtyw2002
        13
    tywtyw2002  
       107 天前 via iPhone
    @hitsmaxft 现在又出了个新的,人体工学 split 。可玩性也极高。
    https://ryanis.cool/cosmos/

    corne 还是 小 携带方便
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5692 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:22 PVG 14:22 LAX 23:22 JFK 02:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86