模仿Joystick自制HID六轴24按键游戏摇杆,貌似快成功了……

2019-08-14 20:08发布

发现市面上卖的汽车方向盘、飞行摇杆其实协议和鼠标键盘都是HID设备,正巧前一阵子自己用stm32将官方的joystick例程改成了可以用电位器控制移动速度的鼠标、可用按钮控制的小键盘,于是想着自己做一个类似于fly5(图示)飞行摇杆。做了很久,stm32的usb接口报告描述符总是出错,于是从网上下载一个前辈做好的游戏手柄,各种描述符通过了,奈何电脑无法识别从stm32发送过来的量。
下图是我用stm32烧写进自己改过的程序后连接电脑显示的,可以看到电脑可以识别为游戏操纵杆了:

打开属性后,六个轴和24个按键都显示出来了,觉得报告描述符应该没问题。后面不管我怎么按下各种按键,对应的按钮或者轴都没有反应。我担心是GPIO口没控制好,于是直接每轮循环都是如下设置,就是说不按下按钮也该识别出来了:
 sendbuf[3] |= 0x08;
 USB_WriteEP(0x81,sendbuf,6); 
结果还是不行:

用bus hound来看,数据确实发到电脑上了,只是上位机软件识别不了,此时我觉得可能是我发送的数据不是通用格式,有可能是“USB_WriteEP(0x81,sendbuf,6)”这个模块有问题。
然后我撤下我的stm32板子换上现成的游戏摇杆:

可以识别并能够正常通信了:

按下按钮,晃动摇杆,都可以显示


真的不知道怎么办了,请大家给点思路吧。最后附上源码及下载地址(未经过我修改的)

pudn程序员联合开发网下载地址:
http://www.pudn.com/downloads542/sourcecode/embedded/detail2238611.html

csdn下载:
http://download.csdn.net/download/gezi0/5357395

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
scorpio_b
1楼-- · 2019-08-15 00:18
回复【10楼】真的爱你19911:
---------------------------------
不好意思现在才回复你……记得当时是数据发送端口0那边出问题了,发送格式不正确
登云钓月
2楼-- · 2019-08-15 05:23
数据格式不对!?
是不是能用软件看一下别人的数据合适呢。
前段时间用f4做host解码游戏手柄,就是连着仿真器一点点看它的数据变化再写解码程序的。
楼主也可以试一下。
scorpio_b
3楼-- · 2019-08-15 06:36
回复【2楼】登云钓月:
---------------------------------
谢谢解答!关于“f4做host解码游戏手柄”这个可以详细说说吗?或者转一下这个帖子网址?麻烦啦
登云钓月
4楼-- · 2019-08-15 11:01
别人的游戏杆应该也是HID设备。

原子哥综合例程里有最游戏手柄的支持,但是只做了简单的解码,你可以用它来驱动你的游戏杆,跟踪到usbh_hid_gamepad.c中的static void  GAMEPAD_Decode(uint8_t *data)函数,把*data复制出来(好像只有8个有效字节),然后看看不操作游戏杆和操控游戏杆的数据变化,这样就可以游戏杆解码了。在知道游戏杆的编码之后,就可以它的编码格式写自己的游戏杆了。

个人拙见,仅供参考。
真的爱你19911
5楼-- · 2019-08-15 12:09
 精彩回答 2  元偷偷看……
scorpio_b
6楼-- · 2019-08-15 13:49
回复【5楼】真的爱你19911:
---------------------------------
你好!我用的是核心板,ZET6的

一周热门 更多>