CubeMX生成的代码,USB只能识别很少一部分的U盘。同一块板子,不用CubeMX生成的代码,使用标准库移植的USB库,能够识别大部分的U盘,包括CubeMX代码识别不了的U盘都能识别。而且还有一个很奇怪的现象,先烧录标准库的程序,能够识别的U盘在不断电的情况下插在USB上,然后烧录CubeMX代码后就又能够识别U盘了,U盘重新插拔后就又识别不了。
追踪CubeMX代码发现,USB枚举过程中,一直无法正常获取设备描述符,USB通过控制传输发送一个Setup包后等待设备返回相应的设备描述符,可是设备未能正常返回数据,提示USB处于NotReady状态。
提示USB未就绪:
获取设备描述符的状态机里,一直卡在CTRL_SETUP_WAIT这个状态,这个状态下最外层的if语句:
if (URB_Status == USBH_URB_DONE)
{
//成功获取设备描述
}
else
{
if ((URB_Status == USBH_URB_ERROR) || (URB_Status == USBH_URB_NOTREADY))
{
//获取设备描述符失败,URB_Status == USBH_URB_NOTREADY
}
}
请教一下,有没有类似的问题,怎么解决。
|