电子DIY:用单片机设计一款USB游戏手柄
玩游戏的小伙伴都知道,有的游戏需要使用游戏手柄体验才会更好,今天就我们来DIY一款自己专属的手柄!1.设计思路电脑游戏手柄和鼠标键盘一样属于USBHID设备,Window系统和Linux系统和各种游戏机系统都会自带此种设备的驱动,使用这种协议可以免装装驱动,即插即用。本次DIY使用单片机stm32f103c8t6,其自带USB资源,通过移植USB功能,修改相关配置和描述符,使其识别为USB-HID
玩游戏的小伙伴都知道,有的游戏需要使用游戏手柄体验才会更好,今天就我们来DIY一款自己专属的手柄!
1.设计思路
电脑游戏手柄和鼠标键盘一样属于USB HID设备,Window系统和Linux系统和各种游戏机系统都会自带此种设备的驱动,使用这种协议可以免装装驱动,即插即用。本次DIY使用单片机stm32f103c8t6,其自带USB资源,通过移植USB功能,修改相关配置和描述符,使其识别为USB-HID设备,再通过按键检测,检测到不用的按键就发送不同键值给电脑,以实现手柄不同的操作,实现原理同电脑键盘。
2.准备材料如下:
洞洞板5*7cm x2
按键12*12cm x10
按键帽 x8
按键6*6 x2
usb线micro转A口 x1
连接线 若干根
螺丝M3*6 若干个
螺丝M3*8 若干个
3.硬件制作
使用一块stm32f103c8t6的最小系统板,将其部分io口接入按键的一端,将按键的另外一端接地,设置stm32的这些io口内部上拉,这样当按键按下后,单片机既可检测到,并做出相关处理。
手柄的各个位置对应到stm32上面的引脚号如下:
4.软件调试
移植stm32官方的usb扩展代码,在此基础上修改如下描述符,定义设备属性和数据格式,在加上按键检测功能,根据不同按键响应发送不同的数据以实现控制。
下面介绍主要的USB需要配置的几个描述:
第1个:设备描述符DeviceDesciptor
第2个:配置描述符ConfigurationDescriptor
第3个:接口描述符InterfaceDescriptor
第4个:HID描述符HIDDescriptor
HID设备专有的描述符,用于配置HID设备的属性和报告描述符的大小。
第5个:端点描述符EndpointDescriptor
端点描述符是用于配置端点号以及端点的输入输出。
第6个:报告描述符ReportDescriptor
报告描述符是HID设备专有的描述符,用于描述传输的数据的格式。
第7个:字符串描述符StringDescriptor
配置好描述符后,主要发送函数如下:
数据格式定义:
我们设定的一次发送的数据为9个字节,第1个字节默认0x1,第2个字节定义如下
第3个字保留位,后面几个字节为普通按键码。如发送01 02 00 04 05 00 00 00 00 表示同时按下Left_Shift + a + b 三个键。当然我们作为手柄不需要这么多按键功能,主要实现上下左右键,和A,B,X,Y键,ESC和Space键即可。需要什么按键功能,根据下图标准键值码值来进行设定修改代码。
5.外壳制作
使用proe5.0设计上下外壳如下:
外壳设计好之后,使用3D打印机打印外壳
将电路板装配进外壳里
全部安装完成后如下
6.测试使用
将手柄插入电脑后,识别为USB-HID设备
打开游戏测试,操作流畅!
至此,我们的USB电脑游戏手柄就完成啦
更多推荐
所有评论(0)