ST意法半导体
直播中

名士流

8年用户 823经验值
私信 关注
[问答]

是什么原因导致USB主机堆栈挂起呢?

HAL 中的错误报告。
在重负载下,由于 HAL 错误地清除了 IN 通道上的 EPDIR 标志,USB 主机堆栈可能会挂起。
STM32f4xx_ll_usb.c,函数USB_HC_Halt,在请求队列满的情况下清除EPDIR。此例程由 IN 和 OUT 中断处理程序调用,并且可以使 EPDIR 错误地重置为 IN 通道。
在使用 DMA 的情况下,技术参考说(在“停止通道”部分)代码不需要检查请求队列是否已满 - 所以我认为代码也应该考虑 DMA。
我正在使用 DMA,我已经注释掉了进程队列检查。


回帖(1)

李蛹

2022-12-27 11:05:23
您能否指出使用的是哪个 HAL 版本?因为 EP dir clear 在 HALt 期间已经固定在 HAL 中。

看起来您使用的是很旧的固件。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分