整个带屏数字小键盘吧,先搞定 QMK 固件支持 STM32F103 的 I2C Remap

之前参考立创开源平台的夏天大佬,做了一个基于 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 通信引脚。

qmk-stm32f103-i2c-remap-1

原理图画了之后,先拿开发板测试一下固件能不能用吧,然后就发现 PB9、PB8 对应的 STM32F103 I2C 是需要 Remap 才能使用,这就得改一下 QMK 固件了。

qmk-stm32f103-i2c-remap-2

修改 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

测试

最后测试屏幕就可以正常显示了:

qmk-stm32f103-i2c-remap-3

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>