功能亮点#
最初我想做一块分体键盘,但由于已经有了一块分体板(crkbd),做一块类似 Arteus/Reviunge 的一体板更有意义。
设计采用激进式行列错位(与我的分体设计相同的列错位),列方向倾斜 15 度。
其他功能:
- OLED 状态显示
- RGB 底部灯
- 音频
- 编码器
STM32 设计考量#
由于 F072 缺货,将使用 F411。
在 QMK 中配置 STM 芯片的技巧:https://discord.com/channels/440868230475677696/440870965728116754/839978277489082370
查找使用特定芯片的键盘的代码片段:
| |
外设的 DMA 通道#
I2C、SPI、ADC、DAC 等外设使用 DMA 通道。PWM 也可以使用 DMA 以获得更好的性能,例如用于 LED 驱动器。STM32F072 有 7 个 DMA 通道(详情见参考手册)。选择外设时需要谨慎,避免 DMA 通道冲突。
QMK 对以下功能使用 DMA:
- WS2812 LED:PWM 驱动使用 DMA+PWM
- 音频:DAC 驱动使用 DMA;PWM 驱动不使用 DMA
- OLED:使用 I2C,I2C 使用 DMA 通道
F072 DMA 详情#
F072 只有一个 DMA 控制器(DMA1),有 1 个通道,7 个流。
- I2C1:使用 DMA 流 6/7(或 2/3)(需要魔法启动代码进行配置)
- DAC1/2:使用 DMA 流 3 和 4
- SPI1:流 2/3
- SPI2:流 4/5 或 6/7
- TIM3_CH1:流 4
- TIM1_CH1:流 2
F411 DMA 详情#
F411 有 2 个 DMA 控制器,每个有 8 个通道,每通道 8 个流。
我设计中 DMA 使用情况汇总:
|———–|————|——-|———————|———————-|
| 功能 | QMK 驱动 | 引脚 | 外设 | DMA 通道 |
|---|---|---|---|---|
| OLED | I2C | PB6/7 | I2C1 | DMA1-Chan1-Stream5/6 |
| 音频 | PWM | PA8 | TIM1_CH1 + TIM6 GPT | N/A |
| RGB LED | PWM | PB1 | TIM3_CH4 | DMA1-Chan5-Stream2 |
| RGB(备选) | SPI1 | PB5 | SPI1 | DMA2-Chan3-Stream2/3 |
| ———– | ———— | ——- | ——————— | ———————- |
音频驱动#
两种选择:DAC 和 PWM。DAC 会占用一个或两个 DMA 通道;PWM 不使用 DMA。
使用 DAC 的音频#
使用两个引脚可以提供更高的电压幅度和更大的音量。
- 引脚(A4/A5)。参考
| |
使用 PWM 的音频#
- 使用任意定时器的 PWM 输出方波,仅支持单引脚模式。
以 TIM3_CH1 为例(用 tim6 作为音频状态定时器):
| |
OLED#
I2C:使用 I2C1(引脚 B6/7)。参考
注意:I2C 引脚需要上拉电阻(4.7kOhm)。
魔法修复#
对于 F072,正确使用 I2C1 需要额外配置。详情见 discord。
示例代码#
| |
背光 RGB#
- LED:使用 WS2812S
使用 PWM 的 RGB 驱动#
使用 PWM 和 DMA。这里使用引脚 B1 上的 TIM3_CH4 作为输出,通过上拉电阻连接到 5V(B1 是 5V 容忍引脚)。
| |
使用 SPI 的 RGB 驱动#
使用 SPI2(B15)。参考
| |
元器件选择#
使用此网站搜索 JLCPCB 零件,查看 SMD 贴片服务的可用性和价格。
汇总:
|—————-|—————|———–|————————————-|—————————————|
| 元件 | 型号 | JLCPCB 料号 | 数量 | 备注 |
|---|---|---|---|---|
| MCU | STM32F072CBU6 | C92504 | 1 | |
| 稳压器 | XC6206P332MR | C5446 | 1 | 3.3V 固定输出 |
| BJT | MMBT3904 | C20526 | 1 | 用于复位电路,需加电阻 |
| 二极管 | 1N4148 | C81598 | 用于按键和复位按钮 | |
| 保险丝 | JK-MSMD050 | C369167 | 用于 USB 总线电压保护 | |
| 肖特基二极管 | SS14 | C2480 | 用于稳压器之间 | |
| 蜂鸣器 | KLJ-1625 | C201041 | SMD 压电蜂鸣器 |
MCU#
使用 STM32 MCU,比 Pro Micro 上的 atmega 更强大。atmega32u4 是 8 位处理器,只有 32K 存储。相比之下,ARM 芯片是 32 位的,程序存储更大(F072C8 有 64K,F072CB 有 128K,F411 有 256K/512K Flash 和 128K SRAM)。
F4 系列没有内置 EEPROM 模拟器,需要外部 EEPROM 芯片,否则某些功能无法使用,例如 bootmagic 和板载设置(默认层等)。
复位按钮电路#
要复位(并进入 bootloader),需要同时触发 NRST 和 BOOT0 引脚。我使用中间那种方案,需要一个晶体管。
保险丝#
Ferris 使用的型号缺货,在 LCSC 上找到了规格相近的 C369167。
肖特基二极管#
使用 JLCPCB 基础件 SS14,规格为"40V 1A 550mV @ 1A",与 Ferris 使用的 RB060MM-30 接近。
电阻和电容#
全部使用 0603 封装。
TODO#
下次设计需要改进的地方:
- 给 I2C 引脚加 4.7k 上拉电阻
- 使用 8MHz 晶振代替 25MHz。参考