文章目录
之前参考立创开源平台的夏天大佬,做了一个基于 ATMega32A MCU + QMK 固件的 40% 配列键盘,不过最后又想用起来的时候发现,可能因为 ATMega32A 用的是软件模拟 USB,所以在 Mac 上的兼容性有点问题,因此就想着自己重新搞一个键盘。
在 QMK 固件的 MCU 支持列表里面翻了一下,发现 STM32F103C8T6 也是支持范围,而且搞一个 STM32duino-bootloader 就可以直接通过 USB 刷机,也是相当方便了。
关于 STM32F103 使用 STM32duino-bootloader,之前已经写了篇文章分享 做键盘必备,抛掉ST-Link,STM32F103通过USB烧录,STM32duino-bootloader踩坑记录 。
免费打样来测试
但是直接搞整个 40% 配列键盘,PCB 的尺寸超过了嘉立创免费打样的范围,因此准备先搞个数字小键盘来验证一下 STM32F103 做键盘的原理图。
照猫画虎搞个原理图
搞键盘主要就是确定行和列的引脚,为了最大能支持 104 键,就把能用的引脚全用上了。
另外为了使用 OLED 屏幕,这里使用了 PB8、PB9 作为 I2C 通信引脚。
原理图画了之后,先拿开发板测试一下固件能不能用吧,然后就发现 PB9、PB8 对应的 STM32F103 I2C 是需要 Remap 才能使用,这就得改一下 QMK 固件了。
修改 QMK 固件
这就要修改一下 QMK 固件来让它启用 I2C Remap,通过 PB8、PB9 来作为 I2C 通信引脚。
注意:我这里为了可以动态改键,使用的固件是 vial-qmk。
启用 I2C1
要在 QMK 固件中使用 I2C,需要先启用一下,在文件 mcuconf.h
修改对应的配置:
// 文件路径 platforms/chibios/boards/STM32_F103_STM32DUINO/configs/mcuconf.h
#define STM32_I2C_USE_I2C1 TRUE
启用 I2C Remap
根据网上搜索到的教程,要启用 I2C Remap 需要先启用 AFIO 时钟,需要修改一下初始化代码中 boardInit
相关的代码。
这就是加上了 AFIO_MAPR_I2C1_REMAP
标志位。
// 文件路径 platforms/chibios/boards/STM32_F103_STM32DUINO/board/board.c
void boardInit(void) {
//JTAG-DP Disabled and SW-DP Enabled
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE | AFIO_MAPR_I2C1_REMAP;
//Set backup register DR10 to enter bootloader on reset
BKP->DR10 = RTC_BOOTLOADER_FLAG;
}
rules.mk 配置 I2C 引脚
最后就在 rules.mk
中配置 I2C 引脚,就可以正常使用 OLED 屏幕了。
#define I2C_DRIVER I2CD1
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
测试
最后测试屏幕就可以正常显示了:
参考资料
- 模块组合键盘: https://oshwhub.com/joba/pkb16x4-atmega32a
- https://github.com/vial-kb/vial-qmk
- https://blog.csdn.net/Oushuwen/article/details/109164466
- https://blog.csdn.net/williamgavin/article/details/79776654
- https://stackoverflow.com/questions/77852801/stm32f103-switch-i2c-pins
- https://forum.chibios.org/viewtopic.php?t=5859
- https://electronics.stackexchange.com/questions/473721/stm32f103-i2c-bare-metal-programming-question
- https://xuanxuanblingbling.github.io/assets/attachment/stm32/STM32%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8CV10.pdf
0 条评论。