STMCU小助手
发布时间:2025-8-26 17:03
|
1. 问题现象 客户反馈,使用 STM32H523RET6 应用中配置了两个 IO 口,PC9 为输出模式,内部下拉;PB14 为输入模式,内部上拉。在程序中将 PC9 引脚输出高电平,结果观察到 PB14 的电平被拉低。
图 1 PC9 输出低时, PB14 为高
图 2 PC9 输出高时,PB14 被拉低 & X8 Q. I: E U6 H$ ^2. 问题重现 使用 NUCLEO-H533RE 板,新建一个 cubemx 工程(cubemx 版本 : v6.13.0),按客户问题所述配置 PC9 和 PB14, 然后在代码中驱动 PC9 输出高,结果很容易就重现了问题。0 H) |/ k1 c% k! [& J ) s2 [+ X9 @: E$ a9 F" m 3. 问题分析 一般来说,在 ST 官方 DEMO 板上很容易重现,就意味着问题能很快解决或者很可能是芯片就是如此设计的。于是查找相关文档,注意到 PC9 可复用为 UCPD1_DBCC2 引脚,而 PB14则可复用为 UCPD1_CC2 引脚。STM32H5 默认时 UCPD 外设的 DB(Dead Battery)功能是激活的,而这个 DB 特性刚好会影响正常的 GPIO 功能,这个在 AN2552 Rev7 文档中的第11.3.1 节有相关描述 : ( x! b/ e0 Q5 q- i* O" a0 O3 i 在 DBCCx 引脚(PC9)上检测到电压超过 1V 时,则芯片内的 Rd 电阻激活,进而将 CCx 引脚(PB14)拉低。 也许有人会问,我啥也没做啊,我也没用到 UCPD 外设,我的电路图也根本不是图上这么设计的,芯片怎么会这样?9 @7 Z- |' u3 }) h" E* M4 T3 U D, E! X( _" t& S8 J) N, } & P U8 ~0 I; t) h- y 这就得回到 USB Type-C 接口的 PD 功能来说了。USB Type-C 口大体上来说数据可分为三个通路:USB3.x 数据通路,USB2.0 数据通路,以及走 CC 线的 PD 协议,当然还有 VBUS 上的电力供应。$ B# ]& c1 N( f; U3 c+ x+ x ' ?7 Q2 d7 `& i& E" T ^- k CC 线上的 PD 协议正是用于 SOURCE 端和 SINK 端之间进行电力协商的,经典的应用场合就是 SOURCE 端比如手机充电适配器向带电池的 SINK 端(比如手机)充电,用多大功率,多少电压,最大电流多少,这个就得协商,协商的过程是通过 300K 的 CC 线来进行的。+ C( y2 T& K+ @: \) ]/ v: } Q
图 3 USB Type-C 口的 CC 线连接 STM32H5 是带 UCPD 外设,全称 USB Type-C®/USB Power Delivery interface. 是专门# {+ K9 u( y- i 用于 CC 线上的 PD 协议通信的外设。3 ^1 k2 B, f$ M; N8 o# H4 `- N2 O & @, X, J9 z2 ? 如上图所示,SOURCE 端通过检测 SINK 端的 Rd 电阻来判断是否有 SINK 设备连接,只有检测到这个连接,在 USB Type-C 口上的 VBUS 才会供电过去,否则不会有电供应。这就涉及到一个问题,若 SINK 端是电池设备,且电池耗尽(Dead Battery)时,SOURCE 端还能正常供电吗?0 f- {) l" l; F' {; S _: j# Z0 n, w, i7 q 这里存在一个关键逻辑点:当 SINK 端电池耗尽时,SOURCE 端是否仍能检测到 Rd 电阻?进一步说,假设 SINK 端的 PD 芯片为 STM32,在其未上电前,CC 引脚(PB14)必须对外呈现 Rd 下拉电阻特性——这是 UCPD 协议中 DB(Dead Battery)功能的核心要求。 若 CC 引脚未表现出 Rd 电阻,SOURCE 端会认为 SINK 端不具备受电条件,从而不会通过VBUS 供电。而没有 VBUS 供电,STM32 就无法上电运行,形成 “无电-无法上电-无法反馈” 的死循环。因此,STM32H5 芯片默认激活 DB 功能,正是为了确保在未上电状态下,CC 引脚通过内部下拉电阻满足 SOURCE 端的检测要求,从而触发 VBUS 供电流程。- G! J( i8 s" I' ?0 F4 m8 U: |' [ 8 o0 C% Q4 S# c4 @ + y c7 b7 b0 G 知道了原因,那么解决方法就很简单,即在代码中将 DB 功能关闭,才能释放 DBCCx 引脚作为普通 GPIO 引脚的功能,如 :* _0 o8 y/ m( w! S! o9 {6 K! A5 f# Z7 O 同时,因为 UCPD_DBCCx 引脚(PC9)只要一检测电平>1V,则会将内置的 Rd 电阻激活。如果 DBCC 引脚仅只用于 GPIO 功能,为了避免意外激活 Rd,建议在 DBCC 引脚外加上 100K的下拉电阻。& \8 a' h* a! ]: P7 p/ `* A p
图 4 当 DBCC 引脚(PC9)用于 GPIO 功能时的建议电路 ) m, M' ?# i' fz3 L! H" h% A7 v1 l6 Q1 F 这就是整个解决方案了。 " N4 ` L8 Q7 } 4. 后记. T* }! M. c3 |; D3 }/ y4 N0 x: Y4 @ 在 STM32G0 中,同样的问题,在 STM32CubeMx 中是可以配置是否在代码中关闭 DB 特性的。见下图示意:; W2 V |$ Y5 I" J
图 5 在 cubemx 中针对 G0 的 DB 功能关闭选项 Cubemx 中针对 H5 这一选项当前版本还未添加,后续版本应该会更新此功能。 ————————————————2 P! V& |3 I) q4 c0 H% ^ 1 [$ \ ~4 d4 t9 a# A& f# N. I7 O |
【STM32H5 评测】MNIST 数字识别
【STM32H5 评测】3、STM32H5 Lwip 移植、官方例程和UDP发送数据
【STM32H5 评测】+开发板拆箱介绍
【STM32H5 评测】4、移植CoreMark
【STM32H5 评测】ADC 电压表
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】基于NUCLEO_H5E5ZJ+Zephyr数字电源
【STM32H5 评测】NUCLEO-H5E5ZJ 使用 TrustZone 安全分区系统实践测试
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
微信公众号
手机版