V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hitsmaxft
V2EX  ›  程序员

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

  •  
  •   hitsmaxft ·
    hitsmaxft · 200 天前 · 1731 次点击
    这是一个创建于 200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近业余时间把自己多年前买了之后一直吃灰的 野火指南者开发板拿出来把 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

    11 条回复    2024-05-11 03:30:15 +08:00
    CEBBCAT
        1
    CEBBCAT  
       200 天前
    很好👍 收藏了 /doge

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

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

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

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

    我用 stm32f1 用出于学习目的,基础知识完备工作量也挺小的。
    tywtyw2002
        4
    tywtyw2002  
       199 天前   ❤️ 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
       199 天前 via iPhone
    @tywtyw2002 作为一个开源项目,还是做得不错了,社区和文档都还行,就是蓝牙这个协议上限制死了很让人头疼
    hitsmaxft
        6
    hitsmaxft  
    OP
       199 天前
    @tywtyw2002 qmk 目前在用外挂蓝牙的方案挺普遍, anne pro 2 和 keychron 都是, 还有大量个人做的定制键盘 pcb


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

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

    就是底下那个 chibios 感觉不是太流行, 也不支持 nrf52 或者 esp32
    tywtyw2002
        7
    tywtyw2002  
       199 天前   ❤️ 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
       199 天前 via iPhone
    @tywtyw2002 我自己现在用着 61 键和 lily58 的分体,说实话我实在是没觉得分体和直列有多大优势,误操作太多了,还不如固定的😂
    tywtyw2002
        9
    tywtyw2002  
       198 天前 via iPhone
    @hitsmaxft 分体优势还是 36 42keys 这样的,不过需要练习,熟悉了就觉得很舒服。键盘定义一堆 combo ,然后大部分操作都可以 2 个键解决。

    这东西跟 vim 一样,有学习曲线。
    hitsmaxft
        10
    hitsmaxft  
    OP
       198 天前 via iPhone
    @tywtyw2002 我就是长时间使用了直列分体之后的感想
    直列只不过简化了制作,但是使用体感确实不如交错布局😵‍💫。
    tywtyw2002
        11
    tywtyw2002  
       197 天前 via iPhone
    @hitsmaxft 斜列也不复杂啊。

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

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

    corne 我搞了个专门玩游戏的键位,玩起来特别爽。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2922 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:47 · PVG 22:47 · LAX 06:47 · JFK 09:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.