
HK32F103x/C/D/E是深圳市航顺芯片技术研发有限公司推出的中大容量的32位MCU芯片,内部集成丰富且强大的外设,如SPI/IIC/UART/USB/FSMC/SDIO等。
有客户在快速替换使用过程中,遇到过使用HAL库的USB枚举失败的情况:VID/PID值等设备描述符内容不正确。使用bus hound捕获USB包,观察设备描述符内容,如下红色箭头所指IN包数据部分,大多数时候是不对的,即不是预期值,偶发是对的。

通过分析客户代码,且使用逻辑分析仪+DSview跟踪USB通信数据,发现是在枚举过程中,第三次获取设备描述符的时候出错,如下:

进一步分析发现并确认(根本原因):
USB设备在收到STALL之后的下一条SETUP的情况下,硬件会设置Tx状态为Valid,这导致接下来IN包来了之后,USB直接就把还未准备好的数据发送给主机,即发送的数据不是预设值/乱码,例如一部分为本次要发送的数据,另外一部分为上一次的数据。
解决方案:
屏蔽掉软件设置STALL的代码,例如在HAL库的HID类,屏蔽下图处。

相关阅读:
HK32MCU应用笔记(一)| HK32F030X系列在PH测量笔的应用
HK32MCU应用笔记(二)| 国外品牌采用航顺HK32F030R8T6代替出现串口不兼容解决方法
HK32MCU应用笔记(三)| 航顺芯片在5G光纤测试仪的应用
HK32MCU应用笔记(四)| 关于老版本HK32F103串口USART偶尔出现数据错误
HK32MCU应用笔记(五)| 关于应用HK32F030延时效率问题
HK32MCU应用笔记(六)| HK32MCU芯片调试心得
HK32MCU应用笔记(七)| 航顺HK32MCU闩锁效应问题研究及预防措施
HK32MCU应用笔记(八)| 航顺HK32F03X内部8M时钟倍频成72M解决方案
HK32MCU应用笔记(九)| HK32F103x8xB系列CAN的应用解决方案
HK32MCU应用笔记(十)| HK32F103xC/D/E的ADC常规和注入通道同时触发时的处理机制
HK32MCU应用笔记(十一)| HK32F103xC/D/E的flash读保护应用及注意事项
HK32MCU应用笔记(十二)| HK32F103xC/D/E的GPIO的应用及注意事项
HK32MCU应用笔记(十三)| HK32F103xC/D/E-ADC的应用及注意事项
HK32MCU应用笔记(十四)| HK32F103x/C/D/E-TIM1的应用及注意事项
HK32MCU应用笔记(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作状态不能单独配置
HK32MCU应用笔记(十六)| HK32F103xC/D/E-Timer的应用及注意事项
HK32MCU应用笔记(十七)| HK32F103xC/D/E-flash擦写应用及注意事项
HK32MCU应用笔记(十八)| HK32F103xC/D/E-DAC的应用及注意事项
HK32MCU应用笔记(十九)| HK32F103xC/D/E USB枚举情况分析
来源:航顺芯片
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。