OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18388|回复: 9

STM32F407 USB HOST 读取鼠标数据

[复制链接]

15

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2014-4-18
在线时间
68 小时
发表于 2014-5-3 20:01:37 | 显示全部楼层 |阅读模式
第一步:新建一个C文件 把usbh_hid_core.c 库文件粘贴进去 这样就能随便改了;其他的库文件不要动
第二步:把相关库文件全拽进来 键盘那个不要  usbh_usr.c文件还用读U盘的 然后编译;
第三步: 编译报错 把mouse_init mouse_data_process 等。。。相关函数自己写了 这不属于底层驱动可以随意写 一般串口输出标志性语句 等调试好了再根据应用改 然后把usb_krd_cb注释掉
第四步:单步调试 改程序直到正常输出鼠标型号 等信息为止(其实用U盘程序也是能读出鼠标型号的),如果读不出 查看能否进入USB中断 在中断那设串口打印或者灯
第五步:重点来了 正常读型号 但是无法进入鼠标初始化 单步调试 卡在前面自己粘贴的 usbh_hid_core.c :
case HID_REQ_SET_IDLE:
    
    classReqStatus = USBH_Set_Idle (pdev, pphost, 0, 0);
    
    /* set Idle */
    if (classReqStatus == USBH_OK)
    {
      HID_Machine.ctl_state = HID_REQ_SET_PROTOCOL;  
    }
    else if(classReqStatus == USBH_NOT_SUPPORTED) 
    {
      HID_Machine.ctl_state = HID_REQ_SET_PROTOCOL;        
    } 
    break; 
无法进入:USBH_Status USBH_HID_Handle 进而不能对鼠标操作
是请求idle时间不够造成的:

USBH_Set_Idle (pdev, pphost, 0, 0) 把第一个0改大点 我一开始设成10不行 改成100好使了
然后进USBH_Set_Idle函数

static USBH_Status USBH_Set_Idle (USB_OTG_CORE_HANDLE *pdev,
                                  USBH_HOST *phost,
                                  uint8_t duration,
                                  uint8_t reportId)
{
  
  phost->Control.setup.b.bmRequestType = USB_H2D | USB_REQ_RECIPIENT_INTERFACE |\
    USB_REQ_TYPE_CLASS;
  
  
  phost->Control.setup.b.bRequest = USB_HID_SET_IDLE;
  phost->Control.setup.b.wValue.w = (duration << 8 ) | reportId;
  
  phost->Control.setup.b.wIndex.w = 0;
  phost->Control.setup.b.wLength.w = 0;                                   这个0也改大点 我也改的100;
  
  return USBH_CtlReq(pdev, phost, 0 , 0 );
然后下进去就好使了
串口输出结果:
USB Host library started.
     USB Host Library v2.1.0
> Device Attached 
> USBH_USR_ResetDevice 
> Low speed device detected
> VID : 093Ah
> PID : 2521h
> HID device connected
> Manufacturer : N/Ar
> Product : USB OPTICAL MOUSE
> Serial Number : N/A
> Enumeration completed 
mouse init-30-70-120-170-190-200-230-230-230-240-250-270-290-280-290-290-300-310-320-300-280-240-210-150-80-4000-30-60-100-140-160-180-190-220-210-190-190-170-150-140-120-110-120-100-120-120-90-100-90-90-70-60-40-2000-20-20-30-50-60-70-90-110-140-150-150-160-150-140-120-80-60-200000000000-40-80-130-190-260-330-380-410-460-490-490-520-470-400-310-190-60-10-30-40-70-100-110-130-110-100-80-80-70-60-50-40-20-10-10-20-40-40-60-70-80-80-100-100-110-120-120-130-130-140-130-140-130-140-150-130-130-120-120-110-110-90-90-90-90-60-50-50-30-1000-30-50-60-70-80-100-100-110-110-130-110-110-90-80-60-50-30-20-10-1000-20-40-50-60-70-70-90-100-110-110-110-120-110-120-100-90-80-70-40-30-10-10-30-40-50-60-50-50-40-30-30-30-30-20-30-20-100000-1000pressed release pressed release pressed 00 release pressed release pressed release pressed release


具体延迟时间和请求数据设多少好像不同的鼠标不一样 但是肯定不能是零吧  不过尽量长点吧
以上个人经验 不知道对不对 留个记录 以后用到好百度

USB MOUSE.zip

12.21 MB, 下载次数: 4819

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-5-3 23:58:05 | 显示全部楼层
回复【楼主位】y1294401826:
---------------------------------
方便上传下代码吧,方便他人学习参考。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

333

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-12
在线时间
63 小时
发表于 2014-5-16 20:56:26 | 显示全部楼层
你好,我最近也在搞这个USB,但是还是有一些问题!程序一直不稳定!
大约300次出现2次死机!
我按你的改了,还是有问题!

感觉USB只要稍微修改一点点枚举成功率就会下降!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-5-16 21:17:37 | 显示全部楼层
回复【3楼】小Y:
---------------------------------
我过几天也要搞usb了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2012-9-4
在线时间
13 小时
发表于 2014-5-18 15:06:44 | 显示全部楼层
楼主,我的卡在Full speed device detected  就不动了,是什么原因呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-6-15 19:21:56 | 显示全部楼层
USB 鼠标的话, 其实只需要将:phost->Control.setup.b.wLength.w设置为100,就可以了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-5-3
在线时间
7 小时
发表于 2014-8-6 16:13:38 | 显示全部楼层
谢谢楼主 原来我的也不行 按楼主的意见改了 就可以了  不过我的改成3000  改成100还是不行 还不知道原因 先感谢下,也谢谢原子哥哈
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-4-26
在线时间
0 小时
发表于 2014-10-9 11:10:58 | 显示全部楼层
正想搞USB,谢谢楼主,还没有来得急测试。
回复 支持 反对

使用道具 举报

28

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
金钱
381
注册时间
2014-10-9
在线时间
6 小时
发表于 2014-12-9 17:50:32 | 显示全部楼层
谢谢楼主
 正在搞USB,参考下。。。
拿什么让你自己信服 自己
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-3-31
在线时间
1 小时
发表于 2015-4-7 17:17:22 | 显示全部楼层
mark!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 12:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表