玩游戏的小伙伴都知道,有的游戏需要使用游戏手柄体验才会更好,今天就我们来DIY一款自己专属的手柄!

1.设计思路

电脑游戏手柄和鼠标键盘一样属于USB HID设备,Window系统和Linux系统和各种游戏机系统都会自带此种设备的驱动,使用这种协议可以免装装驱动,即插即用。本次DIY使用单片机stm32f103c8t6,其自带USB资源,通过移植USB功能,修改相关配置和描述符,使其识别为USB-HID设备,再通过按键检测,检测到不用的按键就发送不同键值给电脑,以实现手柄不同的操作,实现原理同电脑键盘。

2.准备材料如下:

java手机当键盘usb控制电脑_java手机当键盘usb控制电脑

java手机当键盘usb控制电脑_嵌入式_02

 

java手机当键盘usb控制电脑_java手机当键盘usb控制电脑_03

洞洞板5*7cm               x2

按键12*12cm              x10

按键帽                          x8

按键6*6                        x2

usb线micro转A口       x1

连接线                          若干根

螺丝M3*6                    若干个

螺丝M3*8                    若干个

 

3.硬件制作

使用一块stm32f103c8t6的最小系统板,将其部分io口接入按键的一端,将按键的另外一端接地,设置stm32的这些io口内部上拉,这样当按键按下后,单片机既可检测到,并做出相关处理。

java手机当键盘usb控制电脑_单片机_04

java手机当键盘usb控制电脑_描述符_05

 手柄的各个位置对应到stm32上面的引脚号如下:

 

java手机当键盘usb控制电脑_描述符_06

4.软件调试

移植stm32官方的usb扩展代码,在此基础上修改如下描述符,定义设备属性和数据格式,在加上按键检测功能,根据不同按键响应发送不同的数据以实现控制。

下面介绍主要的USB需要配置的几个描述: 

java手机当键盘usb控制电脑_嵌入式_07

第1个:设备描述符DeviceDesciptor  

java手机当键盘usb控制电脑_嵌入式_08

 第2个:配置描述符ConfigurationDescriptor

java手机当键盘usb控制电脑_描述符_09

第3个:接口描述符InterfaceDescriptor

java手机当键盘usb控制电脑_单片机_10

第4个:HID描述符HIDDescriptor

HID设备专有的描述符,用于配置HID设备的属性和报告描述符的大小。

第5个:端点描述符EndpointDescriptor

端点描述符是用于配置端点号以及端点的输入输出。

第6个:报告描述符ReportDescriptor

报告描述符是HID设备专有的描述符,用于描述传输的数据的格式。

第7个:字符串描述符StringDescriptor

 

java手机当键盘usb控制电脑_单片机_11

 配置好描述符后,主要发送函数如下:

 

java手机当键盘usb控制电脑_物联网_12

数据格式定义:

我们设定的一次发送的数据为9个字节,第1个字节默认0x1,第2个字节定义如下

 

java手机当键盘usb控制电脑_嵌入式_13

第3个字保留位,后面几个字节为普通按键码。如发送01 02 00 04 05 00 00 00 00 表示同时按下Left_Shift  + a + b 三个键。当然我们作为手柄不需要这么多按键功能,主要实现上下左右键,和A,B,X,Y键,ESC和Space键即可。需要什么按键功能,根据下图标准键值码值来进行设定修改代码。

 

java手机当键盘usb控制电脑_java手机当键盘usb控制电脑_14

5.外壳制作

使用proe5.0设计上下外壳如下:

 

java手机当键盘usb控制电脑_嵌入式_15

 

java手机当键盘usb控制电脑_单片机_16

 

外壳设计好之后,使用3D打印机打印外壳

java手机当键盘usb控制电脑_物联网_17

将电路板装配进外壳里

 

java手机当键盘usb控制电脑_java手机当键盘usb控制电脑_18

 全部安装完成后如下

 

java手机当键盘usb控制电脑_嵌入式_19

java手机当键盘usb控制电脑_描述符_20

java手机当键盘usb控制电脑_java手机当键盘usb控制电脑_21

 

6.测试使用

将手柄插入电脑后,识别为USB-HID设备

 

java手机当键盘usb控制电脑_描述符_22

 

打开游戏测试,操作流畅!

java手机当键盘usb控制电脑_单片机_23

 至此,我们的USB电脑游戏手柄就完成啦