这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。
3 W0 H2 x* {* O, @4 w- y! I 文章末尾分享该项目资料。
+ K& K3 y6 ^0 r& W% ?- [ 功能概述:设计框图# v& n4 i2 ^3 W8 _4 w P+ g
键盘使用STM32F103C8T6作为控制器。由于USB端口上的电源引脚为5V供电,但是该款单片机需要使用3.3V电源供电,因此需要将5V转为3.3V,项目中使用MCP1703T来实现该功能。使用Cherry MX风格的机械开关来作为键盘的按键。另外,还可以通过按键来控制LED的模式、颜色、亮度。 4 g! e% s4 Y& d+ g2 e! c
系统原理图
$ A5 \9 ]) }7 F9 W系统PCB1 n2 X- S+ Y$ l* V& G; Q) s: J/ N: }
- O& \. K* l' r {
PCB大小为58mm x 59mm。为了能够方便手工焊接,所有的SMD器件均使用0805封装。 ! h( r! s& H4 Q; I' }/ u) l& ~, k
7 Q3 l2 [0 C- s3 C$ \( t- J
硬件上提供了STLINK下载接口: SWDIO-SWDIO SWCLK-SWCLK GND-GND 3V3-3.3V
1 l) i' f9 R/ {4 {2 t2 e& l& U* r: m, s. R, Z9 A/ G P
材料清单:
5 h/ z- M' q& h! d/ y安装STM32Duino打开arduino ide,打开首选项
3 O6 n7 s' y3 g6 [
0 g B( F4 o6 r: q3 w8 O5 ]: v添加完成之后,打开开发板管理器,搜索STM,安装STM32F1xx/GD32F1xx 3 L2 g( ]8 ?: r0 g! U& l
8 ?; Q( F; Y& \' `
STM32Duino内的USB库已经提供的USB HID功能,但其轮询间隔为10ms,因此我们还要对其进行修改。 . }9 ?% p9 s- T8 n' O. l3 G3 l x
9 \8 z# c0 v2 o3 \' \- Z4 H9 R8 j3 j
代码配置说明去抖时间5 W! S7 {$ Q& ^, D
这是检测到按键后按键拒绝注册按键释放的时间。需要一个反跳时间,因为机械开关在按下后自然会“反跳”,如果不使用反跳计时器,可能会在很短的时间内记录多次错误的按键。在这种情况下,设置防抖计时器的方式不会影响延迟,因此更改此值不会使按键延迟更多。Cherry指定反弹时间为5毫秒,该值应适用于大多数机械开关。 RGB LED
* [, e5 t: R) M% D4 J/ W禁用此选项将禁用所有与RGB LED控制有关的代码。这可能会节省一些CPU周期,但不足以有效地更改键盘的性能。 串行通讯# L/ n! l, l: T/ K) S9 ]
禁用此选项将不允许通过串行或驱动程序软件对键盘进行编程,但是由于微控制器不再需要不断侦听串行命令,因此它将节省一些CPU周期。尽管理论上微控制器在不启用串行的情况下应该运行得更快,但是速度差异可以忽略不计。 RGB LED颜色和图案
- L( F0 ~9 p5 P如果需要修改RGB LED颜色,则必须直接编辑代码。在checkRGBMode()函数下定义的颜色存储所有的灯光模式0颜色(静态),而incrementColor()下的颜色存储灯光模式2(颜色循环)颜色。
6 ~+ b3 W1 S# q! ?7 `. e$ `更改颜色,只需更改rgbBrightness []值。这些值以百分比表示该颜色的亮度,其中0为0%,1为100%。rgbBrightness []中的1-3数组分别表示红色,绿色和蓝色。 ledDelay:
+ P% u8 K! g. s% Z这表示在灯光模式2下颜色切换过程之间的延迟,这意味着如果延迟较高,则颜色将缓慢切换,而如果延迟较低,则颜色将更快切换。 colorIncrementDelay# x- E; y7 L0 k3 `3 \& u7 D
这表示在灯光模式2下切换颜色之间的时间。
F G! b# U s! x, e+ M
+ c: Q4 j, i" X i. l 使用键盘
: H# G7 k# }6 u' f; l# N
- k) j0 }" C( ^- { ~2 ^) F1 ]灯光模式: " Y7 a' r$ n$ g& b
: E5 |1 N4 L" {$ d# Q6 P
系统的所有配置信息都是存放在EEPROM中。
& d7 l4 a3 m! G( }. v$ |5 ?
/ l! k' D' ^( R P' _, f) a 4 i2 v) {# [, [0 ~
配置按键若想能够随时、方便的修改按键对应的键值,则需要开启程序中的串口通信功能。有了该功能后,系统将可以通过串口命令对其进行配置。也可通过上位机软件对其进行配置 "s:1:k:",将按键1设置为k
* V. V: I6 h) ]/ `
使用上位机软件 # p, t7 w5 F \, ]3 U9 L+ i
- v: W0 @: x' d8 U" p
4 X! @. |0 f( R9 c上位机软件说明
( ]0 g8 K0 P' P, X' {9 x8 U
" a* V0 t5 M! u- d连接设备后,可以使用该程序即时设置按键绑定。为此,请使用名为"keybinds"的面板。您可以通过下拉菜单(参考帮助-键映射的键映射)选择键编号,然后可以通过文本框输入键绑定值。目前仅接受Ascii字符和数字,不幸的是,冒号不是可行的选择,因为它被用作分隔符。如果要禁用该键,只需在文本框中什么也不放,然后按set键即可。 填写完两个选项后,只需按设置按钮,如果一切顺利,就可以设置按键绑定。即使断电,此新设置也将保存在微控制器上。 原始序列号和状态
9 p8 a7 O- Z5 x* _这两个部分用于诊断目的。原始串行是设备发送回的串行数据的显示,状态面板显示了存储在设备上的不同设置。 e( w, ^ p. Y
$ F% I3 H: b( d' A# w& d# P0 ]& s4 z. i' ] 组装效果图
- z0 I2 E+ Y( W0 H0 Y4 O/ D. W8 P7 z2 S9 |$ o1 s- h& z
底板 - T1 }/ ]& S! g- z# L+ m9 q
$ e" a( S8 `0 {, v2 z+ c$ @2 H( z6 X实物图
; c' l. }7 X4 {1 a+ T9 R+ Q0 c9 O% h
4 L: l% P6 Y: l( @$ \% K2 b8 Y* [
) [0 ]& g# @/ Q) J' s& J( X公众号后台回复:stm32键盘 即可获取全部设计资料。
7 m' y6 I1 Z+ x9 e/ d1 C" ?
$ s: W' s) A0 z8 X |