完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在 STM32F745 上的 USB 复合设备出现间歇性问题,端点无法将数据发送回 PC,然后 PC 重置连接。
我已经应用了中断禁用 确实有所改善,但并未修复。 我的代码来源于ST的示例代码。 在正常操作中,PC 会定期使用“测试单元就绪”命令查询 MSC。CDC 以每秒约 150 个有用数据包的速度全速传输。 在随机时间段(几分钟到几小时之间)后,USB 发送功能无法将数据添加到 IN FIFO。 此行失败: 如果 ( ((USBx_INEP(ep)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == 0) && ((USBx_INEP(ep)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) ) { 因为 EPENA 已设置。 我的代码之前只是忽略了这一点,并希望主机再次请求数据。但是,当测试单元就绪命令失败时,主机会在大约 30 秒后重置 USB 连接,这会破坏我的 CDC 数据。 此外,一旦发生这种情况,它会继续每 30 秒重置一次,因为 MSC 再也不会工作了——端点似乎坏了。调试器中的设备重置会将其清除。 我尝试添加代码进行短暂等待并重试(无效果),还尝试设置 EPDIS,然后检查 DIEPINT_EPDISD,但似乎从未设置过。 客户有直接清除 EPENA 位的代码- 这行得通吗?数据表只提到核心清除位。 EPENA 钻头“卡住”的原因是什么?为什么不设置 DIEPCTL_EPDIS 位来清除它? 还有其他想法吗? |
|
相关推荐
1个回答
|
|
我_think_我现在实际上已经解决了这个问题。我的 FIFO 设置错误(自 2018 年以来一直如此)。我的最小测试代码现在已经运行了 20 小时。
如果您设置的 FIFO 超出 USB RAM 区域,HAL_PCDExSetTxFifo 代码不会执行任何错误检查或提供返回代码。我试图以字节而不是单词来设置它们。我开始的示例代码没有解释这些数字。当我 100% 确信我已经解决了它时,我将发布一个带有注释的固定代码示例,这些注释可能会帮助其他人在未来绊倒这篇文章。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2222 浏览 1 评论
3019 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1591 浏览 1 评论
3408 浏览 6 评论
5737 浏览 21 评论
753浏览 4评论
1116浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
390浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1103浏览 3评论
1151浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-8 13:19 , Processed in 1.070861 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191