引言
2018年4月的一天,某手柄刚刚参加完某比赛。结果不尽如人意,遂重新沉迷 osu! 这款音乐游戏,希望能够拥有一台趁手的小型键盘,无奈淘宝价格普遍过百,便尝试自造一台。
全文大部分内容根据自己数月前的经验和操作过程猜测和总结,所以有大量错误在所难免,还请各位大佬包涵并指出错误以改进本文!
总述
本节介绍了 项目的需求,选型,和 首次刷写程序,并使用 例程,完成了基本的 USB键盘 功能,完整项目可在 我的博客 获取,该部分源码可在 百度网盘 提取码33dt 下载查看。
注:
开发环境的操作系统为 Windows 10 1803 x64
在开发过程中可能会需要以下开发设计软件:(本文暂时还全部没用)
Keil μVision 5
Altium Designer 10
AutoCAD 2019
成品设备可在 我的淘宝店铺 直接购买。
从提出问题到解决问题
需求
制作出一个键盘,让其可以响应操作,并且键值可以配置,如果可能的话,最好还有RGB灯光和模拟鼠标按键功能
进行拆分
- USB识别为HID键盘设备,可响应操作
- USB识别为混合设备,额外包含HID输入设备,开发一个电脑上使用的控制程序用于修改键值
- 拥有若干RGB灯光,也可以被配置
- USB识别为混合设备,额外包含一个鼠标
选型
搜索某宝,某度和某应,找支持USB的单片机或键盘IC,找到如下可以使用的型号:
- WCH-CH340(模拟串口) + WCH-CH9328(键盘IC)
- WCH-CH55X(C51单片机)
- STM-STM32F10x(ARM32单片机)
最终基于“省钱”和“响应速度够快”两个想法的情况下, 采用 CH551G 型芯片(后期由于IO口不够用更换为了CH552T型),封装针脚定义如下图。
连接面包板
CH551G 为 SOP16 封装,无 DIP 封装版本,故购买了 SOP16 测试座一个(约¥14),将其转为 DIP 插口插入面包板。
接下来,给单片机连接 USB 线以用于连接至计算机,按照针脚定义,USB 以及供电针脚定义如下
P12:USB Data P
P13:USB Data M
P15:VCC
P14:GND
然后,参照 CH552/CH551 型单片机规格书的要求,给 P16 V33 以及 P15 VCC 分别接 0.1μF 电容至 P14 GND 上。
下载安装 WCHISPTool 连接数据线至计算机,可见 标签页 8位CH55X系列 下,在USB设备列表中已识别出设备,显示为 CH551。
设置刷写按钮
按照官方规格书说明,CH55x 提供了内置的 BootLoader ,正常来说按照下图来接就好……但是很玄学……在按照图像接好后并没有什么卵用……
最终我按照下图接线,成功工作……(D+反了别吐槽)
刷入例程
下载例程包,然后进入目录 \EVT\EXAM\USB\Device
,按住刚才设置的 刷写按钮 ,打开 WCHISPTool ,切换至标签页 8位CH55X系列 下,在固件中选择目录中的文件 CompositeKM.hex ,进行刷入,连接 P15 到一个按钮,然后接至 GND ,按下按钮,电脑收到按键响应。
这个固件的对应源码是 CompositeKM.C 其中的源码下次再详细说明。
(具体响应是什么我真的忘了……毕竟好几个月之前了……)
碎碎念
各位大佬好……本文本着水分的想法开写,将之前造键盘的过程发布出来进行分享。由于时间有点久远,有一些内容无法准确回忆起来,还望脑部部分缺失内容。
但愿本文还会继续更新下去,越新的内容我或许就能回忆起更过吧,笑。下次更新的内容应该是关于USB描述符相关的内容,尽量不鸽。
最后再水下,SimPad,基于C51的开源2键游戏键盘键盘项目,其中的PC端控制程序使用Electron完成,其中包含的无依赖组件 simple-color-picker (颜色选择器)可用于普通浏览器中,欢迎吐槽和建议。