一 问题
笔者使用cubemx的生成STM32H750的USB虚拟串口代码,可无论怎么折腾都显示usb无法被识别。笔者尝试了以下思路去分析问题。最终还是在不显眼的地方找到了蛛丝马脚。成功的解决了问题。这里做个梳理吧。
二 思路分析
首先,我把问题区分成软件和硬件问题。为了验证这个,笔者使用不同的开发评估板都尝试了。还是相同的现象,说明和硬件没啥关系。
- 堆栈设置太小,USB 无法完成初始化,在 CubeMX 上设置大一点。这里我做了修改,还是不行。
- 电脑端使用了 USB 分线器,把 USB 直接连接到电脑上。这点笔者尝试使用了不同的电脑和硬件连接,还是不行。
- 关于DP,DN是否使用上拉电阻,这点笔者查询了芯片手册,H750上面系统内置了上拉。所以这里不需要上拉电阻即可。
最后可以把问题锁定在软件上了。针对软件,笔者作了以下尝试。
- 尝试降低系统的主频,依旧不行。
- 降低USB的系统主频,还是不行。
- 最后发现USB的时钟源我这边选的是:
这里是不是出现了问题呢?我尝试使用RC48的系统时钟源。测试立即ok了。
这里虽然问题解决了,可这里出现了盲点。
三 总结反思
这里还是有知识盲点的,为什么USB的时钟源只能选择RC48呢?这个笔者找了不少资料,还是没啥清晰的答案,只是有以下考量吧:
USB总线时钟设置为48MHz,一部分是传输电缆本身的衰减因素,另一部分,为了兼容USB1.1的低速传输,还有的就是规范上的一些限制吧。还有就是芯片手册上找到一些说明,不是很清楚的那种。
这里很多问题,就是需要踩坑的。踩到了才知道。不然就不清楚的。看来目前这里只能是记者了。麻烦知道原因的网友告知一下。