你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f429 USB Host HID键盘枚举成功,读取键值失败

[复制链接]
sjtu_zhang 提问时间:2018-1-31 14:30 /
求助大神,手上一块stm32f429的板子,作为USB host连接USB键盘,使用cubemx生成工程文件,在主循环内添加键值处理程序,现在的问题是通过串口打印调试信息显示,USB枚举成功,但是在读取键盘键值的时候不成功,通过打断点发现程序在运行到k_pinfo = USBH_HID_GetKeybdInfo(phost)这一句时,返回为零,进一步查找USBH_HID_KeybdDecode这个函数返回USBH_FAIL。使用USB FS和USB HS的现象完全一样,可以枚举但不能读取键盘键值。求助有过类似经验的朋友指点一二。
收藏 评论4 发布时间:2018-1-31 14:30

举报

4个回答
sjtu_zhang 回答时间:2018-2-7 16:03:10
我来结个贴吧,大概大家用CubeMX来做USB的比较少,发了一周没有朋友来回复。我最终放弃使用CubeMX来做USB,改用ST的USB host的库文件来手工移植,目前键盘已经可以正常工作,只是偶尔会有掉线或是识别不到的情况,这个后期再优化吧。

点评

大家可能是用的比较少吧,也欢迎参与其他问题交流  发表于 2018-2-7 16:27

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

sjtu_zhang 回答时间:2018-3-9 18:59:24
本帖最后由 sjtu_zhang 于 2018-5-4 09:34 编辑

重新回复这个问题,今天在google上终于找到了这个问题的解决方法,出自ST的英文社区,这个问题是因为ST的HAL库中的一个bug导致的,原因是在HID设备枚举之后程序会卡在Get_Report处,所以USBH_HID_Process这个函数会一直卡在HID_IDLE这里,不能进入下一个阶段,从而无法响应键盘的按键,解决方法也很粗暴,具体为打开USB库中的usbh_hid.c文件,找到函数USBH_HID_Process,修改如下:
    HID_Handle->Init(phost);
// <---- add these lines, from here
    HID_Handle->state = HID_SYNC;    // skip HID_IDLE state
    break;
// <---- to here
即:直接跳过HID_IDLE这个状态,问题解决。
大致原因是用于boot系统的键盘必须执行Get_Report,而日常使用的键盘其内部芯片是不支持Get_Report这个功能的,更详细的原因这里就不列出了,感兴趣的朋友可参阅下面的链接,里面有说明。
http://community.st.com/thread/13529
豌豆佛 回答时间:2018-7-27 16:53:15
楼主你好,能发下工程参考一下么。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版