打印
[STM32F1]

STM32F107的HOST驱动USB键盘的问题

[复制链接]
4637|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ldk060|  楼主 | 2016-6-8 10:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
现在实现了STM32F107 USB HOST读取键盘的数据,但是USB键盘的大小切换键CAPS LOCK和NUM LOCK键的指示灯却不对应的亮灭。查资料说是,需要HOST给USB键盘发送数据,请问是怎么发送呢?用哪个函数以及在代码哪个位置发送呢?
沙发
flydream0| | 2016-6-8 12:04 | 只看该作者
若是标准USB库,则是USBH_Set_Report函数,在USR_KEYBRD_ProcessData函数中使用。
若是HAL库,则用USBH_HID_SetReport函数,也是在USR_KEYBRD_ProcessData函数中使用。

使用特权

评论回复
板凳
ldk060|  楼主 | 2016-6-12 15:57 | 只看该作者
flydream0 发表于 2016-6-8 12:04
若是标准USB库,则是USBH_Set_Report函数,在USR_KEYBRD_ProcessData函数中使用。
若是HAL库,则用USBH_HID ...

可以帮忙写一段范例代码吗?刚开始研究这个好多都不懂。
还有我用BUS HOUND监测到在USB HOST给键盘发送CTL、OUT数据后,键盘大小写指示灯才会亮灭。用怎么用USB HOST向发送这个几个数据呢,可以帮忙写段例子程序吗?如图。
USBH_Status USBH_CtlSendData ( USB_OTG_CORE_HANDLE *pdev,
                                uint8_t *buff,
                                uint16_t length,
                                uint8_t hc_num)

比如这个参数hc_num,不明白这个参数的意思。看了些资料看的不太明白。

截图.png (139.05 KB )

截图.png

使用特权

评论回复
地板
稳稳の幸福| | 2016-6-12 22:26 | 只看该作者
如果有那个功能,一定提供了标准库函数,而且会给例程,怎么用库。

使用特权

评论回复
5
flydream0| | 2016-6-13 11:17 | 只看该作者
ldk060 发表于 2016-6-12 15:57
可以帮忙写一段范例代码吗?刚开始研究这个好多都不懂。
还有我用BUS HOUND监测到在USB HOST给键盘发送CT ...

官方有示例的,你用的是标准库?还是HAL库? 标准库请看STM32_USB-Host-Device_Lib_V2.1.0内的示例,HAL库直接看Cube内CubeF下USB的Host示例。

没有看到键盘给的报告描述符,要知道这个后才能知道该如何向键盘发送消息。给demo是没有意义的,就是调用USBH_Set_Report函数给键盘发送消息,问题的关键是发送的内容是在报告描述符内定义的,得根据实际情况来,你多学习下吧,多花点时间。

使用特权

评论回复
6
ldk060|  楼主 | 2016-6-13 11:27 | 只看该作者
flydream0 发表于 2016-6-13 11:17
官方有示例的,你用的是标准库?还是HAL库? 标准库请看STM32_USB-Host-Device_Lib_V2.1.0内的示例,HAL ...

我用BUS bound监测到,电脑给键盘发送报告描述符,即0x21,0x09,0x00,0x02,0x00,0x00,0x01,0x00。以及发送OUT,即 0x03。发送这些数据后,键盘指示灯会亮。搞不明白怎么通过stm32 HOST发送这些数据。

使用特权

评论回复
7
ldk060|  楼主 | 2016-6-13 11:28 | 只看该作者
flydream0 发表于 2016-6-13 11:17
官方有示例的,你用的是标准库?还是HAL库? 标准库请看STM32_USB-Host-Device_Lib_V2.1.0内的示例,HAL ...

我用的是标准库

使用特权

评论回复
8
flydream0| | 2016-6-13 11:35 | 只看该作者
ldk060 发表于 2016-6-13 11:27
我用BUS bound监测到,电脑给键盘发送报告描述符,即0x21,0x09,0x00,0x02,0x00,0x00,0x01,0x00。以及发送 ...

BUS BOUND这个工具不是专业的USB开发工具,它实际与USB的数据对应关系我不熟,但可以肯定的是前面那个就是用USBH_Set_Report这个函数发的。

使用特权

评论回复
9
ldk060|  楼主 | 2016-6-13 11:59 | 只看该作者
本帖最后由 ldk060 于 2016-6-13 12:01 编辑
flydream0 发表于 2016-6-13 11:35
BUS BOUND这个工具不是专业的USB开发工具,它实际与USB的数据对应关系我不熟,但可以肯定的是前面那个就 ...

前面OUT对应的0x03用哪个函数发送啊?

使用特权

评论回复
10
flydream0| | 2016-6-13 12:22 | 只看该作者
ldk060 发表于 2016-6-13 11:59
前面OUT对应的0x03用哪个函数发送啊?

比如使用同步传输接口就能产生OUT的TRANSACTION,但这里明显不是,估计你换个工具可能就没有这个OUT了,BUS BOUND这个工具是不行的,USB的各种传输以及USB事务都看不出对应关系,最最最重要的是,配置描述符,报告描述符这个最重要的枚举过程的数据都看不到其解析后的信息,只能望洋兴叹,只能参考。我也帮不了你的。

使用特权

评论回复
11
huangqi412| | 2016-6-13 15:16 | 只看该作者
这个,不能保证每个键盘都是一样的数据格式吧。
你能读键盘按键,同理也就能写按键灯。
单片机自己分析报告描述符很麻烦,可以把键盘挂在电脑上用BUSHOUND抓数据知道收发数据格式。  然后单片机照着做就能读按键和写按键灯了。

使用特权

评论回复
12
Stannis| | 2016-6-13 20:06 | 只看该作者
调用USBH_Set_Report函数给键盘发送消息

使用特权

评论回复
13
ldk060|  楼主 | 2016-6-15 11:17 | 只看该作者
huangqi412 发表于 2016-6-13 15:16
这个,不能保证每个键盘都是一样的数据格式吧。
你能读键盘按键,同理也就能写按键灯。
单片机自己分析报告 ...

前面OUT对应的0x03用哪个函数发送啊?

使用特权

评论回复
14
ldk060|  楼主 | 2016-6-15 11:17 | 只看该作者
Stannis 发表于 2016-6-13 20:06
调用USBH_Set_Report函数给键盘发送消息

前面OUT对应的0x03用哪个函数发送啊?

使用特权

评论回复
15
ldk060|  楼主 | 2016-6-15 11:19 | 只看该作者
huangqi412 发表于 2016-6-13 15:16
这个,不能保证每个键盘都是一样的数据格式吧。
你能读键盘按键,同理也就能写按键灯。
单片机自己分析报告 ...

我就是把键盘挂在电脑上,然后通过BUS BOUND监测到电脑发送上述数据后,键盘的指示灯对应的亮灭。不知道那个OUT 0x03用stm32 USB host库中的哪个函数发送。

使用特权

评论回复
16
hdh88717| | 2016-10-13 16:28 | 只看该作者
楼主,你好,能把你的STM32F107的HOST驱动USB键盘的程序发一份来参考参考一下吗,谢谢,邮箱:417777872@qq.com

使用特权

评论回复
17
Rollo| | 2016-10-13 20:01 | 只看该作者
发送的内容是在报告描述符内定义的

使用特权

评论回复
18
yutianxiang618| | 2017-3-31 15:01 | 只看该作者
ldk060 发表于 2016-6-15 11:19
我就是把键盘挂在电脑上,然后通过BUS BOUND监测到电脑发送上述数据后,键盘的指示灯对应的亮灭。不知道 ...

LZ我也想知道0X03怎么来发送,现在是调用USBH_Set_Report来发送设置配置后,data自动发送的0x00,不知道怎么怎么修改使用USBH_CtlSendData函数发送0X03,谢谢啦

使用特权

评论回复
19
typeof| | 2017-3-31 16:42 | 只看该作者
能够提供一下代码借鉴一下吗

使用特权

评论回复
20
typeof| | 2017-3-31 16:45 | 只看该作者
最近想研究一下stm32的usb

使用特权

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

本版积分规则

31

主题

344

帖子

0

粉丝