用STM32F103ZET6写的USB HID设备与计算机通信程序,可以接收数据,但发送有问题,请教一下大家

2019-07-21 03:04发布

USB枚举过程是成功了的,计算机设备管理器中看到的设备:

用PortHelper调试USB如下:

点击发送后,STM32接收到数据并且从串口返回接收到的数据如下:

我的STM32 USB通信程序中,当端点1接收到一次数据后就每隔一段时间通过端点2发送数据(内容是:哦艾斯黛拉),然后从串口返回的数据发现STM32每隔一段时间端点2都会产生IN中断,但是PortHelper软件并没有接收到数据,然后我用Bus Hound抓取USB包,首先抓取的是HID-compliant device设备,如下图:

然后用PortHelper USb调试器与STM32通信,Bus Hound只抓取到了OUT数据包,如下:

从端点2发送到计算机IN的数据包没有,但是STM32 USB每隔一段时间产生了IN中断,也就是说STM32发送了数据给电脑,但PortHelper中端点2没有收到数据,接着我有用Bus Hound抓取“USB输入设备”的数据,如下图:

PortHelper与STM32进行USB通信,Bus Hound抓取到的数据包如下:

从抓取到的数据包看到“USB输入设备”收到的STM32发来的数据,图中圈出来的就是“哦艾斯黛拉”的十六进制数据,我想问的是为什们“HID-compliant device”收不到IN数据?而“USB输入设备”可以?(USB的各种描述符是直接从一个STM USB HID例程复制过来的,那个例程HID-compliant device”和“USB输入设备”都可以收到STM32从端点2发送上来的数据。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
yellowmid
1楼-- · 2019-07-25 13:25
楼主问题解决了吗?我按照楼主给的提示改了
在USB报告描述符中这两句
0x75,0x08, // REPORT_SIZE (8)  
0x95,0x16, // REPORT_COUNT (22)   =》0x95,0x40;

依旧没能解决一次只能发22的问题(发送64不成功)
dataozi022
2楼-- · 2019-07-25 16:54
谢谢分享 学习一下
richishion
3楼-- · 2019-07-25 17:36
 精彩回答 2  元偷偷看……
richishion
4楼-- · 2019-07-25 20:42
非常感谢非常感谢!
751872025
5楼-- · 2019-07-26 00:30
楼主您那有可以收发64字节的例程吗我用的是stm32f103ZET6的片子。用您上边那个例程串口总不能打印出64字节的数据。上位机USB也收不到数据。麻烦您发一个最新的例程。

一周热门 更多>