
概述 本章主要GPIO输出模式下不同配置的说明。 使用STM32CUBEMX生成例程,这里使用NUCLEO-L476RG开发板,因为我这只有这款板子的主频较快。 3 e3 O, H/ M3 S f/ a) Y; z![]() 不同速率对应的波形8 D+ F J) w ]8 e& J. j 以PC3为例,在推挽输出无上下拉情况下,输出速率主要有4种,一般的低端MCU只有3种,没有Very High。 2 b0 B; e' k: o9 { ![]() ![]() , U. Z; ~0 _9 \7 X ) ^2 C3 r3 Q7 \6 M* i+ [ ![]() High速率& }$ b. X) r- X% }( \0 N3 z x 9 q6 F" C2 B# T# e! j) S* M" C' T: ]5 L ![]() Very High速率 ![]() 可以看到,在不同速率下,端口的反应速度不一样,设置最大输出速率越大,响应越快,对应的噪声也就越大。 ![]() ![]() 在上图中,P-MOS带了一个⚪,说明是低电平导通。
上图是GPIO的示意图,有输入和输出,如果简化为输出,则如下所示。 8 Q; N T. c" B/ y, H. H6 R![]() 推挽输出 推挽输出的内部电路大概是下图这个样子,由一个P-MOS和一个N-MOS组合而成,同一时间只有一个管子能够进行导通。 ![]() : R$ U/ r# ?7 I% \3 p 当输出高电平时候,P-MOS导通,N-MOS截至,此时电源电流入R5。 ![]() 9 O5 _' b, w4 K% Q+ E8 u$ T) q 当输出低电平时候,N-MOS导通,P-MOS截至,此时电流流入R5的为0。 ; z( W& c$ V6 P& ?1 o![]() 线与/ d: W! [- \. _, w 推挽输出高电平与电源电压基本上没有压差 高低电平的驱动能力较强,推挽输出的电流都能达到几十mA。 但是无法进行线与操作,做进行线与操作,那么电源和地就会短路,因为mos管电阻很小。 看下图可以得知,电流通过Q3的P-MOS流到Q2的N-MOS,最终回到地。 开漏输出又叫漏极开漏输出简化后可以看作如下的示意图。 ![]() ( Q1 m: J8 h) Y( [3 K, H3 w% o 若还是使用上面推挽的电路图,当N-MOS为低电平时候,那么他的输出就是一个高阻态。 可以看到,R5没有电流通过,电压也是接近于0,所以GPIO无法对外输出高电平。 0 r7 {2 Y9 b1 {. J![]() 此时需要增加一个上拉,这样的话上拉的电流就会流出去。 所以在开漏输出情况下,需要增加一个上拉才能进行输出高电平。 ! j; t9 L) K- g1 N3 |# C: q![]() 对于输出低电平,他和推挽输出差不多,电流通过N-MOS流到地中。 - C1 O: x3 r4 c# ]- r ![]() 2 Q3 u) E% O5 G4 H% l; B 上图是没有增加上拉,但是开漏输出模式都需要增加,增加上拉之后如下图所示。 电流通过N-MOS流回地中。 ![]() 输出电压: L2 Z' p9 X% Z0 b: J 由于推挽输出在输出的时候是通过单片机内部的电压,所以他的电压是不能改变的。 但是开漏输出是通过外部上拉的电压,所以可以改变开漏输出模式下的电压大小。 下图是当上拉为5V时候,也是可以驱动出去的,这个上拉电压最大值需要看单片机的耐压。 1 m* p5 c/ p6 D0 ^# `) [" r![]() 转载自:记帖 如有侵权请联系删除. j: N9 P- M1 P, Y& r 8 K) R- X3 U; W, i( J- c3 g& g$ I' B' s% h1 e |
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
新版STM32Cube for Visual Studio Code开发体验
【STM32N6570-DK评测】摄像头video encoder
实战经验 | STM32CubeIDE实用技巧之工程联调
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
【下载问题解决】关于ST官网下载软件问题解决
【STM32N6570-DK评测】开发环境及LED debug
实战经验 | 基于STM32CubeIDE下载TouchGFX GUI应用的出错分析
实战经验 | 如何修改STM32Cube固件包的存储位置
兔哥的杂谈【002】——如何性价比更高地去编译STM32