短文标题:推挽输出:上管推、下管拉,驱动强但不"合群"

你有没有想过一个问题:GPIO直接点亮LED,靠的是哪种输出模式?**推挽输出。**它内部有两个MOS管:
- 上面的PMOS管接VCC(推)
- 下面的NMOS管接地(拉)
输出高电平时,上管导通,下管关断 → 电流从VCC流出,这叫做拉电流 。输出低电平时,上管关断,下管导通 → 电流从引脚流入地,这叫做灌电流。
"推挽"这个名字,就来自"推"(高电平)和"挽"(低电平)两个动作。推挽的驱动能力 ARM32的GPIO在推挽模式下,单个引脚最大输出电流可达**±25mA**(拉和灌都能到25mA,但总电流受芯片散热和VDD/VSS引脚数量的限制)。

这意味着可以直接点亮LED(串个几百欧电阻),甚至驱动小功率MOS管。推挽还支持2MHz、10MHz、50MHz三档速度可选,是高速信号输出(如SPI时钟、PWM)的首选模式。推挽的"弱点":不适合并联,两个推挽输出引脚直接连在一起:
- 一个输出高(3.3V),一个输出低(0V)
- 3.3V和0V短接 → 巨大电流 → 烧引脚
这就是推挽"不合群"的地方。因此,I2C总线不能使用推挽模式------它需要多个设备的输出接在同一条线上,必须用开漏输出 。推挽 vs 开漏

从功耗角度,推挽输出在电平切换瞬间(死区)上下管可能同时微导通,产生贯穿电流;开漏输出没有上管,不存在贯穿电流,低功耗场景更友好。典型应用
- 点灯:推挽直接驱动LED
- PWM调光:推挽输出高速翻转
- SPI总线:SCK和MOSI必须用推挽
- 驱动74HC595:推挽提供陡峭边沿
这个故事的启示, 推挽驱动能力强,适合"一对一"控制。但多个推挽不能直接连在一起------会打架。选对模式,用对场景,才能发挥GPIO的最大效能。写在最后, 点亮LED只是第一步。理解"上管推、下管拉",才知道什么时候用推挽,什么时候换开漏。选对了,少走弯路;选错了,查半天。

(本文灵感源于于振南《新概念ARM32单片机》教程第3.3节"GPIO输出模式之推挽输出",感谢作者把推挽输出的原理讲得如此清晰。)
觉得有用?点赞、转发,让更多人看懂"推挽"背后的驱动逻辑。
