[STM32F1]

USB-HOST和HID设备怎么通信呢?现在单片机这边能够正确识别...

[复制链接]
1759|11
手机看帖
扫描二维码
随时随地手机跟帖
cry1109|  楼主 | 2019-12-7 11:15 | 显示全部楼层 |阅读模式

USB-2.4G.png
如图,串口打印的枚举过程信息。使用cubeMX配置stm32f107 USB-host,支持所有设备类。MSC类的U盘可以正常读写,HID设备使用的是一个带51内核+USB的nrf24lu1的2.4G无线通信模块,刚开始调试的时候枚举不通过提示无法找到接口,后来修改了一下HID的设备描述符,枚举通过了但是不知道为啥被识别成了鼠标设备。打印信息如上图,是不是表示已经正确识别且已建立连接了啊,那么stm32如何通过USB和HID双向通信呢?发现没有像CDC类那样的USBH_CDC_Transmit()函数简单啊。

使用特权

评论回复
cry1109|  楼主 | 2019-12-7 11:22 | 显示全部楼层
刚接触USB没多久,希望路过的热心大佬们解惑。

使用特权

评论回复
cry1109|  楼主 | 2019-12-9 09:11 | 显示全部楼层
还是没搞定。

使用特权

评论回复
li880wert| | 2019-12-9 13:44 | 显示全部楼层
现在这么高级了吗,直接cubeMX配置生成,我之前都是发库函数做了,做了HOST 对应CDC,CH340G,和 自HID定义的HID,键鼠,

USB HOST通讯的HID 比PC快多了,PC 接收发送HID通讯类经常会丢包,用HOST 从没丢过

使用特权

评论回复
cry1109|  楼主 | 2019-12-9 14:30 | 显示全部楼层
li880wert 发表于 2019-12-9 13:44
现在这么高级了吗,直接cubeMX配置生成,我之前都是发库函数做了,做了HOST 对应CDC,CH340G,和 自HID定义的 ...

是的哥,cubeMX让开发变的越来越简单了。请教一下,HID类怎么双向通信,现在我这边已经识别HID类了,直接通过端点采用中断收发数据USBH_InterruptReceiveData()、USBH_InterruptSendData(),可是发送数据容易卡死,接收的数据只能接收5个字节。

使用特权

评论回复
评论
蜗牛0101 2019-12-16 14:49 回复TA
你好 请问ST USB HOST怎么调用USBH_InterruptSendData()发送数据给设备,我是参考正点原子的库函数,例程只有中断接收数据,不知道状态机中怎么添加发送数据?麻烦指导一下,谢谢。QQ640083933 
li880wert| | 2019-12-9 18:21 | 显示全部楼层
cry1109 发表于 2019-12-9 14:30
是的哥,cubeMX让开发变的越来越简单了。请教一下,HID类怎么双向通信,现在我这边已经识别HID类了,直接 ...

CUBEMX的库我不知道了

使用特权

评论回复
蜗牛0101| | 2019-12-14 14:16 | 显示全部楼层
li880wert 发表于 2019-12-9 13:44
现在这么高级了吗,直接cubeMX配置生成,我之前都是发库函数做了,做了HOST 对应CDC,CH340G,和 自HID定义的 ...

你好,现在在做STM32F4 USB HOST和HID类设备通信,使用官方库函数,参考正点原子USB鼠标键盘例程,例程中只有读取数据,不知道怎么调用USBH_InterruptSendData通过out端点发送数据给设备,麻烦指导一下有工程参考一下么,谢谢。邮箱zhangshaoru@fmsh.com.cn QQ 640083933

使用特权

评论回复
cry1109|  楼主 | 2019-12-17 12:51 | 显示全部楼层
蜗牛0101 发表于 2019-12-14 14:16
你好,现在在做STM32F4 USB HOST和HID类设备通信,使用官方库函数,参考正点原子USB鼠标键盘例程,例程中 ...

在HID的处理函数static USBH_StatusTypeDef USBH_HID_Process(USBH_HandleTypeDef *phost)中添加发送数据的状态。状态机比较灵活,我现在搞的是在接收到数据后,对数据进行解析,解析完毕后,跳转到发送数据,添加一句case HID_SEND_DATA:就可以调用USBH_InterruptSendData()了。但是发送完数据后还要跳回case HID_GET_DATA:这个状态,这个貌似是接收轮训的一个状态。

使用特权

评论回复
蜗牛0101| | 2019-12-19 19:22 | 显示全部楼层
cry1109 发表于 2019-12-17 12:51
在HID的处理函数static USBH_StatusTypeDef USBH_HID_Process(USBH_HandleTypeDef *phost)中添加发送数据 ...

谢谢您,昨天也是刚搞通 我用STM32F4的USB做HOST与自定义的HID设备通信 由于库函数的问题,获取配置描述符的时候没有解析OUT端点,导致没有分配OUT通道,我现在调用USBH_InterruptSendData设备可以收到数据了。HID主机是根据设备描述符中一个轮训时间,定时发送SOF包查询设备数据。

使用特权

评论回复
磨砂| | 2020-1-7 12:52 | 显示全部楼层
是不是通过串口通讯啊

使用特权

评论回复
晓伍| | 2020-1-7 12:57 | 显示全部楼层
好像有专用的函数啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

172

帖子

3

粉丝