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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版