项目场景:9 ]' E8 t4 O. [) z STM23G070单片机的PD0引脚作为开漏输出的时候,外部接了一个51K上拉电阻到5V,想让PD0开漏输出高的时候是5V,开漏输出低的时候是0V。6 C% L5 @% @6 e( k & W3 u0 ]+ k7 C6 O 问题描述:: U- b/ e1 l) G v/ n4 P STM23G070单片机的PD0引脚作为开漏输出的时候,外部接了一个51K上拉电阻到5V,单独测试PD0的时候是可以正常的,开漏输出高的时候5V,低的时候可以到0V,但是一旦PD1推挽输出输出高之后,情况就变了,在PD1推挽输出高情况下,PD0开漏输出高的时候却始终只有2.4V,输出低的时候是0V,正常的。) ~) N- q) u6 |! x# F ' i8 j$ t1 z' ~2 t8 _8 C# c, ? 原因分析:* y# G4 u% L% Z$ C- k$ z' | 查阅STM32G0数据手册可知 ) T6 J0 ^5 X, C 这个引脚的电平类型为FT_c,我们知道FT是容忍5V的意思,那么FT_c是什么意思?不妨看看说明: + [. E* {% i$ l6 y' I5 Z" l Q) N " \ R. I( P9 r6 z 然后去用户手册查看GPIO相关说明,找到以下内容:+ p4 g0 K e5 x( L# L # b; f7 q% n: d! Z 基本上了解状况了,再看一下相关寄存器说明: + P0 X+ p* C) Y4 F4 v4 H% ? 解决方案:4 b+ ]$ q6 c3 O3 L7 l% Y2 M 看了以上说明,基本明白怎么操作了。在初始化IO的时候,应该把SYSCFG registers的UCPD2_STROBE位设置一下就ok了。
其实PA8和PA15也是这样的。如果我们不需要这个下拉电阻,需要按照上面的操作调整一下。 1 y* `! y, q2 x3 }9 g* ~4 m . t1 V! G3 O* f# V# S; K 即TYPE-C充电管理的相关引脚,所以才会有这样的设置。若想进一步了解TYPE-C相关知识,可以自行查找相关资料。 * I9 C! w0 `- {, V0 V5 ?3 D |