做开发最麻烦的就是做linux开发,但一些工具只能在windows上使用,一段时间感觉需要Ubuntu下做事就装Linux mint,再过段时间,又得在windows下阅读代码、使用工具,HHKB键盘又得不停按拨码开关切换。
真是烦,就想着改造,去淘宝上搜,发现一个做好stm32主控板要300多(带蓝牙)。
还不如自己动手,于是找带USB device功能的,找到了一个stm32f401ccu6小板,19块,首单优惠10元,也就是9块钱就够了。果断出手。
当然,还有最最最关键的,GitHub - tmk/tmk_keyboard: Keyboard firmwares for Atmel AVR and Cortex-M
有国外大神已经测出来需要的信号了,他也是卖改造后的主板的。而淘宝那个多半也是基于这个改的。
1. 让stm32f401ccu6 能正确识别为USB HID keyboard
单片机很久很久没碰了,幸好有STM32 CUBEIDE,可以图形化配置。
首先利用STM32 CUBEIDE生成一个HID例子,烧录板子,再插入到PC可以正常识别。
习惯了Linux gadget 思想,看CUBEIDE生成的例子,头疼,还是自己动手改造。
HID Keyboard 描述符网上一堆,然后写入不断尝试。
2. 开始对接 HHKB Pro2
看tmk_keyboard里的说明文档
最后整理如下
=======================================================================
STM32F401CCU6
ARM32 Cortex-M4 84MHz
64KB SRAM
256KB flash
BOOT0 set 0: STM32F401 bootloader dfu
At startup, boot pins are used to select one out of three boot options:
Boot from user Flash
Boot from system memory
Boot from embedded SRAM
The bootloader is located in system memory.
It is used to reprogram the Flash memory by using either USART1(PA9/10),
USART2(PD5/6), USB OTG FS in device mode (PA11/12) through DFU (device firmware upgrade),
I2C1(PB6/7), I2C2(PB10/3), I2C3(PA8/PB4), SPI1(PA4/5/6/7),
SPI2(PB12/13/14/15) or SPI3(PA15, PC10/11/12).
VID: 0x4643 'FC'
PID: 0x4B42 'KB'
manufacturer string: "FineClass"
product string : "KeyBoard"
config string : "Fineclass Keyboard"
interface string : "HHKB pro2"
使用STM32F401出厂DFU(system memory)烧录:
1. 使用STM32CubeIDE生成项目,修改PIN脚,使能USRT1,USB OTG DEVICE,
GPIO IN/OUT,编译得到hhkb.bin
2. BOOT0 置1,USB接入PC,出现 STM Device in DFU Mode
3. 启动 DFUSE DEMO V3.0.6,查看
VID PID VERSION
0483 DF11 2200
4. 启动DfuFileMgr,选择GENERATE a DFU file,
填写 VID PID VERSION,
点击Multi BIN,选择 hhkb.bin,Address填SRAM地址0x08000000,点击add to list,OK
target name 可填 HHKB,点击generate生成 hhkb.dfu
5. DFUSE DEMO下upload action可进行备份,upgrade or verify action
选择 hhkb.dfu,upgrade
不断调试,测试按键扫描间隔,测试keyboard按键。
如今用了很久了,和普通的usb keyboard一样,插入ubuntu 或 windows 可以直接用,不用再去调拨码了。
最后上实物图
不过不改硬件,只是修改按键值,加了按键,可以免拆机升级。



