你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H5 的 PB14 引脚被意外拉低的问题解析

[复制链接]
STMCU小助手 发布时间:2025-8-26 17:03
1. 问题现象
" ]8 h' C, n1 d# V; R客户反馈,使用 STM32H523RET6 应用中配置了两个 IO 口,PC9 为输出模式,内部下拉;PB14 为输入模式,内部上拉。在程序中将 PC9 引脚输出高电平,结果观察到 PB14 的电平被拉低。
: j! h" H1 z. t- H, @5 V
8.png
图 1 PC9 输出低时, PB14 为高
9.png
图 2 PC9 输出高时,PB14 被拉低

$ v& g9 ?8 V* Q& Z  }- y

8 U# a' a( f; A+ w, q2 y2. 问题重现
9 B, ^+ s5 ~7 V2 _4 `- n0 ~使用 NUCLEO-H533RE 板,新建一个 cubemx 工程(cubemx 版本 : v6.13.0),按客户问题所述配置 PC9 和 PB14, 然后在代码中驱动 PC9 输出高,结果很容易就重现了问题。
2 o2 G) Z; u/ h: p( W) \0 g
2 H$ K' F( N% d+ [& s& q* S3. 问题分析7 t6 H% S! N/ j
一般来说,在 ST 官方 DEMO 板上很容易重现,就意味着问题能很快解决或者很可能是芯片就是如此设计的。于是查找相关文档,注意到 PC9 可复用为 UCPD1_DBCC2 引脚,而 PB14则可复用为 UCPD1_CC2 引脚。STM32H5 默认时 UCPD 外设的 DB(Dead Battery)功能是激活的,而这个 DB 特性刚好会影响正常的 GPIO 功能,这个在 AN2552 Rev7 文档中的第11.3.1 节有相关描述 :
, ?- K- ^; Q4 D! z! X
- t+ e% }0 i! |" a8 L在 DBCCx 引脚(PC9)上检测到电压超过 1V 时,则芯片内的 Rd 电阻激活,进而将 CCx 引脚(PB14)拉低。
: W' y& A& d7 ^0 l: y" n
8 y" n. R0 z0 _. g% K% M& F也许有人会问,我啥也没做啊,我也没用到 UCPD 外设,我的电路图也根本不是图上这么设计的,芯片怎么会这样?
2 E! r. G8 b; ?' H( K5 R6 q3 J; R5 S* H2 O# s

) f5 [4 N9 H' o5 f; d这就得回到 USB Type-C 接口的 PD 功能来说了。USB Type-C 口大体上来说数据可分为三个通路:USB3.x 数据通路,USB2.0 数据通路,以及走 CC 线的 PD 协议,当然还有 VBUS 上的电力供应。4 b4 [9 I  C8 P; [3 z

' {* \: c2 I6 S: I: m0 @+ `" O

5 r9 i) i: Y7 xCC 线上的 PD 协议正是用于 SOURCE 端和 SINK 端之间进行电力协商的,经典的应用场合就是 SOURCE 端比如手机充电适配器向带电池的 SINK 端(比如手机)充电,用多大功率,多少电压,最大电流多少,这个就得协商,协商的过程是通过 300K 的 CC 线来进行的。
4 l8 o3 P, j9 }$ z* T! O
10.png
图 3 USB Type-C 口的 CC 线连接
4 V* J$ G4 o0 w+ U; C$ _" C

, L# P) t! ^8 ?0 I+ c) nSTM32H5 是带 UCPD 外设,全称 USB Type-C®/USB Power Delivery interface. 是专门
" M7 A) q3 Y! s' w用于 CC 线上的 PD 协议通信的外设。$ S/ i# r: M/ [7 j. [" W

& p, _0 n. ~% K, D

) I" w* c* V8 e如上图所示,SOURCE 端通过检测 SINK 端的 Rd 电阻来判断是否有 SINK 设备连接,只有检测到这个连接,在 USB Type-C 口上的 VBUS 才会供电过去,否则不会有电供应。这就涉及到一个问题,若 SINK 端是电池设备,且电池耗尽(Dead Battery)时,SOURCE 端还能正常供电吗?. S1 a5 ?) A, }$ \
6 B) Y. u" C( K) V! g) p

' \! q! ?+ N- ]& Z0 ?这里存在一个关键逻辑点:当 SINK 端电池耗尽时,SOURCE 端是否仍能检测到 Rd 电阻?进一步说,假设 SINK 端的 PD 芯片为 STM32,在其未上电前,CC 引脚(PB14)必须对外呈现 Rd 下拉电阻特性——这是 UCPD 协议中 DB(Dead Battery)功能的核心要求。
$ ^9 j2 b: t* b: D( \2 `: n; p* P
# ~; T+ d9 e1 @! o& F
: y1 `5 r( j# p8 L. k* u
若 CC 引脚未表现出 Rd 电阻,SOURCE 端会认为 SINK 端不具备受电条件,从而不会通过VBUS 供电。而没有 VBUS 供电,STM32 就无法上电运行,形成 “无电-无法上电-无法反馈” 的死循环。因此,STM32H5 芯片默认激活 DB 功能,正是为了确保在未上电状态下,CC 引脚通过内部下拉电阻满足 SOURCE 端的检测要求,从而触发 VBUS 供电流程。; r) b7 p+ b0 f+ _4 M. `
$ Y1 g+ Q4 f1 o

) N1 c$ U& u3 w  p; Z9 |$ h知道了原因,那么解决方法就很简单,即在代码中将 DB 功能关闭,才能释放 DBCCx 引脚作为普通 GPIO 引脚的功能,如 :
5 n: g0 P# D! z) ]; R: r. n
+ w. k, i( t; X* O- G. z同时,因为 UCPD_DBCCx 引脚(PC9)只要一检测电平>1V,则会将内置的 Rd 电阻激活。如果 DBCC 引脚仅只用于 GPIO 功能,为了避免意外激活 Rd,建议在 DBCC 引脚外加上 100K的下拉电阻。
2 o- L' S$ d' v& a2 d$ o- ]
11.png
图 4 当 DBCC 引脚(PC9)用于 GPIO 功能时的建议电路

" {( F( W$ S% z) d
$ D; j0 }. O5 T" _' z8 n2 J) n
这就是整个解决方案了。
8 ]8 g) l: |/ i. H4 B# C
* K6 C( @1 {- d4 d1 r( ~. J4. 后记
( s  W/ c$ n$ \1 Y8 y在 STM32G0 中,同样的问题,在 STM32CubeMx 中是可以配置是否在代码中关闭 DB 特性的。见下图示意:
9 ]* B2 W* c3 W- i( o8 q
12.png
图 5 在 cubemx 中针对 G0 的 DB 功能关闭选项

6 A$ ~5 [% w# p* ?% s% V

. @: [5 g6 {9 L+ D& O' j- k% VCubemx 中针对 H5 这一选项当前版本还未添加,后续版本应该会更新此功能。
2 m+ U# Y+ r5 s/ W# z3 \————————————————  z9 P6 m) ]2 O$ P: d) l% l$ |% r

) _4 ~$ ?, }& ?. n, S  p- r8 I1 K& E& x0 u1 N
收藏 评论0 发布时间:2025-8-26 17:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版