STM32
直播中

李军

7年用户 1153经验值
私信 关注
[问答]

关于STM32F4 HID设备接收数据的疑问求解

STM32F4作为HOST,Device为HID协议但不是标准的鼠标键盘(只有IN 和 OUT EP),这个外设需要HOST发送命令后,才会上传数据,具体流程:
① Host->Dev(发送命令)
② Dev准备数据  
③ Host读取数据

使用官方的USB HOST库,版本V3.2.2,搭建工程鼠标和键盘正常工作,自己修改加了一个自定义支持的HID类型,主要是注册了OUT 和 IN 端口。
然后修改了USBH_HID_Process 支持发送数据,问题:
在HID类 USBH_HID_Process 中加入了 SEND状态机,通过USBH_InterruptSendData发送数据,发送成功。但是通过USBH_InterruptReceiveData不成功,分两种情况都不成功:
1、注释掉SOF定期轮询,只发调用一次USBH_InterruptReceiveData,收不到数据。
2、打开SOF定期读数据,会收到一次NACK,一次64字节(数据长度正确)的数据包(但是不能触发接收完成中断),下一次SOF再次触发USBH_InterruptReceiveData会导致HardFault_Handler。


这个HID外设用Libusb读取成功。

回帖(1)

廖靖华

2024-4-19 14:59:00
一般来讲,首先看看增加端点后FIFO分配是否调整好。其次 看看枚举是否真正通过,SOF信号是否正常,最后再看通讯是否能工作。 因为这种通讯是异步通许,所以最好通过USB分析去确认是否真正完成
举报

更多回帖

发帖
×
20
完善资料,
赚取积分