打印
[信息]

十分着急,请大侠帮忙, 关于stm32 USB HOST驱动USB...

[复制链接]
3138|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ldk060|  楼主 | 2016-6-16 12:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用的芯片是STM32F107, 我用USB键盘链接STM32F107的USB HOST。请问,向USB键盘发送什么数据(用哪几个函数),才能使键盘的LED指示灯亮灭。
之前通过BUS bound监测得知,电脑发送给键盘发送Set Report (0x21,0x09,0x00,0x02,0x00,0x00,0x01,0x00),以及发送一个字节的OUT,从而键盘指示灯会对应亮灭。


我用了 STM32 USB HOST中的一个函数发送了上述报告,怎么键盘灯还是没有亮灭呢?

USBH_Set_Report (&USB_OTG_Core_dev,
                                                        &USB_Host,
                                                        0,         
                                                        2,              
                                                        1,            
                                                        out_buf);        
其中out_buf是我定义的一个数组,代表OUT数据。这么定义的 u8 out_buf[1]={0x03}; 也就是说让小键盘和大小写指示灯亮。
但是我在程序中加了这个函数后,灯却不亮。是我哪个地方写错了,还是说还需要再添加别的函数呢?急!急!

123.png (139.98 KB )

BUS BOUND监测到的数据

BUS BOUND监测到的数据
沙发
xfcjava2| | 2016-6-16 15:09 | 只看该作者
请参照如下的: HID键盘--键盘指示灯-----定义


祝你好运!

使用特权

评论回复
板凳
xfcjava2| | 2016-6-16 15:13 | 只看该作者
请参照我原来的项目程序截图如下:
  【 HID键盘_Caps指示灯_程序截图】
      

使用特权

评论回复
地板
ldk060|  楼主 | 2016-6-16 15:17 | 只看该作者
xfcjava2 发表于 2016-6-16 15:09
请参照如下的: HID键盘--键盘指示灯-----定义

这个输出字节通过STM32 HOST库的哪个函数发出啊?我做的是HOST,不是键盘。即读取USB键盘数据的一个工具。我已经知道STM32向键盘发送一个set report后,还需要再发一个字节的OUT数据。现在不知道怎么发送这个OUT数据。

使用特权

评论回复
5
ldk060|  楼主 | 2016-6-16 15:25 | 只看该作者
xfcjava2 发表于 2016-6-16 15:09
请参照如下的: HID键盘--键盘指示灯-----定义

test_sta = USBH_Set_Report (&USB_OTG_Core_dev,   //·¢ËÍSET REPORT
                                                        &USB_Host,
                                                                                        0,         
                                                                                        2,              
                                                                                        1,            
                                                                                        out_buf);       
我用这个函数发送set report后,这个函数返回值为USBH_BUSY,不知道这是为什么?

使用特权

评论回复
6
ldk060|  楼主 | 2016-6-16 15:26 | 只看该作者
xfcjava2 发表于 2016-6-16 15:13
请参照我原来的项目程序截图如下:
  【 HID键盘_Caps指示灯_程序截图】
      

您这是USB HID程序。我想知道HOST端的程序怎么写。

使用特权

评论回复
7
ldk060|  楼主 | 2016-6-16 15:27 | 只看该作者
xfcjava2 发表于 2016-6-16 15:09
请参照如下的: HID键盘--键盘指示灯-----定义

我最想知道的是,这个字节是怎么才能正确发送给usb键盘。用的什么传输方式啊?

使用特权

评论回复
8
xfcjava2| | 2016-6-16 15:30 | 只看该作者
是控制传输,不是bulk传输!

使用特权

评论回复
9
ldk060|  楼主 | 2016-6-16 15:31 | 只看该作者
xfcjava2 发表于 2016-6-16 15:30
是控制传输,不是bulk传输!

est_sta = USBH_Set_Report (&USB_OTG_Core_dev,   //·¢ËÍSET REPORT
                                                        &USB_Host,
                                                                                        0,         
                                                                                        2,              
                                                                                        1,            
                                                                                        out_buf);        
这个就是用来发送报告的吧?属于控制传输吧?

使用特权

评论回复
10
xfcjava2| | 2016-6-16 15:32 | 只看该作者
不管usb host 还是usb device,键盘指示灯的定义都是一样的!

使用特权

评论回复
11
ldk060|  楼主 | 2016-6-16 15:33 | 只看该作者
xfcjava2 发表于 2016-6-16 15:32
不管usb host 还是usb device,键盘指示灯的定义都是一样的!

我现在遇到的问题是,不知道如何发送这个控制字节。我应该用哪个函数发送啊?

使用特权

评论回复
12
xfcjava2| | 2016-6-16 15:33 | 只看该作者
看来你是SET REPORT没有响应啊

使用特权

评论回复
13
ldk060|  楼主 | 2016-6-16 15:35 | 只看该作者
est_sta = USBH_Set_Report (&USB_OTG_Core_dev,   //·¢ËÍSET REPORT
                                                        &USB_Host,
                                                                                        0,         
                                                                                        2,              
                                                                                        1,            
                                                                                        out_buf);   
发送这个函数后,键盘正确接收后,是不是应该就会使指示灯按要求亮灭啊?

使用特权

评论回复
14
ldk060|  楼主 | 2016-6-16 15:36 | 只看该作者
xfcjava2 发表于 2016-6-16 15:33
看来你是SET REPORT没有响应啊


est_sta = USBH_Set_Report (&USB_OTG_Core_dev,   //·¢ËÍSET REPORT
                                                        &USB_Host,
                                                                                        0,         
                                                                                        2,              
                                                                                        1,            
                                                                                        out_buf);   
发送这个函数后,键盘正确接收后,是不是应该就会使指示灯按要求亮灭啊?

使用特权

评论回复
15
xfcjava2| | 2016-6-16 15:44 | 只看该作者
当然了,应该是这样的

使用特权

评论回复
16
ldk060|  楼主 | 2016-6-16 15:58 | 只看该作者
xfcjava2 发表于 2016-6-16 15:44
当然了,应该是这样的

est_sta = USBH_Set_Report (&USB_OTG_Core_dev,   //·¢ËÍSET REPORT
                                                        &USB_Host,
                                                                                        0,         
                                                                                        2,              
                                                                                        1,            
                                                                                        out_buf);   
我用的这个函数发送的。返回值一会是USBH_BUSY,一会是USBH_NOT_SUPPORTED  不明白是怎么回事?

使用特权

评论回复
17
xfcjava2| | 2016-6-16 16:02 | 只看该作者
很有可能是发送的  usb端点不对

使用特权

评论回复
18
ldk060|  楼主 | 2016-6-16 16:04 | 只看该作者
xfcjava2 发表于 2016-6-16 16:02
很有可能是发送的  usb端点不对

/**
* @brief  USBH_Set_Report
*         Issues Set Report
* @param  pdev: Selected device
* @param  reportType  : Report type to be sent
* @param  reportID    : Targetted report ID for Set Report request
* @param  reportLen   : Length of data report to be send
* @param  reportBuff  : Report Buffer
* @retval USBH_Status : Response for USB Set Idle request
*/
USBH_Status USBH_Set_Report (USB_OTG_CORE_HANDLE *pdev,
                                 USBH_HOST *phost,
                                    uint8_t reportType,
                                    uint8_t reportId,
                                    uint8_t reportLen,
                                    uint8_t* reportBuff)

这是函数原型,对各个参数有了介绍。里面没有选项端点选择的选项啊!


使用特权

评论回复
19
xfcjava2| | 2016-6-16 16:05 | 只看该作者
你自己参照一下STM32Cube_F1的usb host 有HID_Standalone,你可以看看

使用特权

评论回复
20
xfcjava2| | 2016-6-16 16:07 | 只看该作者


使用特权

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

本版积分规则

个人签名:----机器猫电子工作室---- 嵌入式系统交流QQ群:46605837 http://shop65647829.taobao.com/

31

主题

344

帖子

0

粉丝