[STM32H5] 实战经验 | STM32H5的PB14引脚被意外拉低的问题解析

[复制链接]
412|2
STM新闻官 发表于 2025-10-10 23:32 | 显示全部楼层 |阅读模式
本帖最后由 STM新闻官 于 2025-10-10 23:38 编辑

01问题现象
客户反馈,使用STM32H523RET6应用中配置了两个IO口,PC9为输出模式,内部下拉;PB14为输入模式,内部上拉。在程序中将PC9引脚输出高电平,结果观察到PB14的电平被拉低。

656268e92718ec329.png
图 1 PC9输出低时,PB14为高
574468e9272c5d788.png
图2 PC9输出高时,PB14被拉低

02问题重现
使用NUCLEO-H533RE板,新建一个cubemx工程(cubemx版本:v6.13.0),按客户问题所述配置PC9和PB14,然后在代码中驱动PC9输出高,结果很容易就重现了问题。


03问题分析
一般来说,在ST官方DEMO板上很容易重现,就意味着问题能很快解决或者很可能是芯片就是如此设计的。于是查找相关文档,注意到PC9可复用为UCPD1_DBCC2引脚,而PB14则可复用为UCPD1_CC2引脚。STM32H5默认时UCPD外设的DB(Dead Battery)功能是激活的,而这个DB特性刚好会影响正常的GPIO功能,这个在AN2552 Rev7文档中的第11.3.1节有相关描述:
6379368e9274360927.png


在DBCCx引脚(PC9)上检测到电压超过1V时,则芯片内的Rd电阻激活,进而将CCx引脚(PB14)拉低。
2023168e927555f03c.png

也许有人会问,我啥也没做啊,我也没用到UCPD外设,我的电路图也根本不是图上这么设计的,芯片怎么会这样?这就得回到USB Type-C接口的PD功能来说了。USB Type-C口大体上来说数据可分为三个通路:USB3.x数据通路,USB2.0数据通路,以及走CC线的PD协议,当然还有VBUS上的电力供应。CC线上的PD协议正是用于SOURCE端和SINK端之间进行电力协商的,经典的应用场合就是SOURCE端比如手机充电适配器向带电池的SINK端(比如手机)充电,用多大功率,多少电压,最大电流多少,这个就得协商,协商的过程是通过300K的CC线来进行的。
562268e92783eb780.png
图3 USB Type-C口的CC线连接STM32H5是带UCPD外设,全称USB Type-C®/USB Power Delivery interface,是专门用于CC线上的PD协议通信的外设。如上图所示,SOURCE端通过检测SINK端的Rd电阻来判断是否有SINK设备连接,只有检测到这个连接,在USB Type-C口上的VBUS才会供电过去,否则不会有电供应。这就涉及到一个问题,若SINK端是电池设备,且电池耗尽(Dead Battery)时,SOURCE端还能正常供电吗?这里存在一个关键逻辑点:当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供电流程。知道了原因,那么解决方法就很简单,即在代码中将DB功能关闭,才能释放DBCCx引脚作为普通GPIO引脚的功能,如:
  1. void HAL_MspInit(void){ /* USER CODE BEGIN MspInit 0 */ /* USER CODE END MspInit 0 */ /* System interrupt init*/ /* USER CODE BEGIN MspInit 1 */ HAL_PWREx_DisableUCPDDeadBattery(); //Disable the DB feature of UCPD /* USER CODE END MspInit 1 */}


同时,因为UCPD_DBCCx引脚(PC9)只要一检测电平>1V,则会将内置的Rd电阻激活。如果DBCC引脚仅只用于GPIO功能,为了避免意外激活Rd,建议在DBCC引脚外加上100K的下拉电阻。
5783068e928157962f.png
图4 当DBCC引脚(PC9)用于GPIO功能时的建议电路这就是整个解决方案了。

04后记
在STM32G0中,同样的问题,在STM32CubeMx中是可以配置是否在代码中关闭DB特性的。见下图示意:



7424468e9283a14f28.png
图5 在cubemx中针对G0的DB功能关闭选项Cubemx中针对H5这一选项当前版本还未添加,后续版本应该会更新此功能。


 楼主| STM新闻官 发表于 2025-10-10 23:38 | 显示全部楼层
 楼主| STM新闻官 发表于 2025-10-10 23:39 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1391

主题

1687

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部