调试 STM32F429 + USB3300

本文记录了STM32F429配合USB3300调试USB高速串口的过程,包括解决驱动锁冲突、编译优化问题及外设初始化导致的USB异常,最终定位到未使能IOBank的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调试 STM32F429 + USB3300 工作在HS模式

这两天调试基于STM32F429的USB功能,从通到不通再到通,花了好几个晚上,特记录一下,能帮到遇到同样问题的人就值啦!

原理图设计为STM32F429+USB3300实现高速USB串口(USB HS)。
调试时USB功能正常,设计USB Bootloader时,减化程序设计,去除了无用的外设初始化,结果发现不了USB外设。

反复调试时,还顺手发现并解决了一个Cube库中设备驱动的Bug:
USB驱动中加了软件Lock,操作时设置为1,释放时置0,避免访问冲突。
在库驱动中,初始化USB时,先置了Lock,然后初始化,之后再释放Lock。但是在初始化最后部分,先开了全局中断,再释放Lock,这在后再插入USB是没问题的,上电初始化时没有插入,不会有中断;但在调试时,设备是USB供电,USB一直是插在电脑上的,所以全局中断一开,立即进入中断,还未来得及做释放操作。中断服务函数中,在访问USB数据结构时,先判断是否Lock状态,结果因为没有释放Lock,导致服务程序运行异常,设备发现不了。

调整代码顺序,在开中断前先释放Lock,避免中断服务程序无法操作数据。
测试时发现问题依旧,单步调试,发现是STLib库在编译时,选择了优化选项,导致程序没有按照代码顺序执行,而是优化为先执行中断,再释放Lock,因为释放Lock操作在很多地方都有调用,所以被优化到统一位置执行,顺序放在了开中断之后。
将该驱动文件的编译优化选项设置为低后,该问题解决,不会再出现中断后Lock没释放的问题。

但USB不能正常工作的问题依旧,反复单步调试也查不到原因。无奈之举,重新从正常程序做减法,逐步去除无用外设的初始化,边去除边测试,直到发现USB工作不正常为止。此时发现有三个外设不能去除,一去除USB就出错。再仔细看这几个外设的初始化代码,发现里面都有使能IO Bank的操作,将这几个外设驱动中使能的IO Bank全部拿出来使能后,去除外设,再运行后USB工作正常。

结论:
仔细对比原理图与手册,设计中使用外置的USB PHY,一共使用了12个引脚,分别位于GPIOA、B、C、H、I 五个bank,但在驱动库的初始化中,只初始化了相应的引脚配置,并没有做引脚对应Bank的使能操作,导致没有使能的IO引脚没有正常工作,所以USB不正常。

此外,针对这种外置Phy的USB HS模式,由于Phy芯片使用了外置的24MHz晶振,所以没有使用MCU内部的PLL产生的48MHz时钟,因此不需要保证MCU初始化时钟时,PLL USB时钟为48MHz。
因此STM32F429可工作在180MHz主频。如果使用USB FS模式,则需要使用MCU产生的48MHz时钟,此时MCU只能工作在168MHz的降频模式,或192MHz的超频模式,不能工作在180MHz。

USB-IF高速;,经认证符合通用串行总线规范修订版 2.0 接口在 8 位模式下与 ULPI 规范修订版 1.1 兼容 工业标准 UTMI+ 低引脚接口 (ULPI) 可将 54 UTMI+ 信号转换为标准的 12 引脚链路控制器接口 54.7mA 未配置电流(典型情况)— 适用于总线供电的应用 83uA 挂起电流(典型情况)— 适用于电池供电的应用 闭锁性能超过 150 mA(每 EIA/JESD 78),Class II ESD 防护水平达 ±8kV HBM(在不使用外部保护设备的情况下) 集成了各种保护措施,在每个第三方的测试设备中均可耐受 IEC61000-4-2 ESD 测试(±8kV 接触电压和 ±15kV 空气电压) 支持用于附带 LS 设备的 FS 集线器的 FS 前导码 (UTMI+ Level 3) 支持 HS SOF 和 LS keep-alive 脉冲 包括对可选的 On-The-Go (OTG) 协议的全面支持,在 On-The-Go 附录修订版 1.0a 规范中有详细说明 支持 OTG 主机协商协议 (HNP) 和会话请求协议 (SRP) 允许主机关闭 VBUS,以便在 OTG 应用中节省电池电量 通过内部比较器支持 VBUS 电平的 OTG 监视。包括对外部 VBUS 或故障监视器的支持。 低潜伏高速接收器(最高为 43 高速时钟)允许使用带 ULPI 包装器的潜伏 UTMI 链路 用于接口保护的 STP 上的集成下拉电阻,允许在使用低速链路(针对低功率情况对软件进行了配置)的情况下,可靠地启动 Link/PHY 内置的 1.8V 调节器允许在使用单个 3.3V 电源的情况下工作 对 ID、DP 和 DM 线路到 VBUS 或接地进行内部短路保护 集成的 24MHz 晶振支持水晶操作或 24MHz 外部时钟输入 用于 480MHz 高速 USB 操作的内部 PLL 工业运行温度:-40°C 到 +85°C 符合 RoHS32 引脚无铅 QFN 封装(5 x 5 毫米, 高度为 0.90 毫米)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值