EmbeddedRelated.com
Jacob Beningo
Live online course · Jacob Beningo
AI for Embedded Developers
$100 off for EmbeddedRelated readers until Nov 1 · 5 live sessions, Dec 7-11
Discount ends in
15days 01hrs 11min 38sec
Learn More →

Push-Pull

Category: Electrical | Also known as: push pull

A push-pull output stage uses two complementary switching elements (typically one high-side and one low-side transistor or MOSFET) to actively drive a signal both high and low. Unlike open-drain or open-collector outputs, which can only pull in one direction, a push-pull stage sources current when driving high and sinks current when driving low.

In practice

On most microcontrollers, GPIO pins can be configured as push-pull or open-drain. In push-pull mode, the output is actively driven to both VCC and GND, which typically results in faster edge transitions and less susceptibility to noise compared to open-drain configurations. This makes push-pull suitable for point-to-point signals like SPI, UART TX, and PWM outputs where only one driver is on the bus at a time.

Because push-pull outputs actively drive both rails, they should not be directly wired together unless the design explicitly prevents contention. Connecting two push-pull outputs to the same net -- for example in an attempt to share a line -- creates a low-impedance path between VCC and GND when the drivers disagree, causing excessive current and potential damage. This is a common mistake when a developer tries to replicate an I2C-style wired-AND topology using GPIO pins that are in push-pull mode. I2C is designed around open-drain signaling to support wired-AND behavior and multi-device arbitration, among other reasons, as covered in "A simple working I2C (TWI) level shifter" and "Introduction to Microcontrollers - More On GPIO."

In power electronics and motor drive circuits, push-pull also refers to a wider class of topologies where two switches alternate driving a load or transformer primary. In that context, the term describes the circuit architecture rather than just an output mode, but the underlying principle is the same: active drive in both directions. "Which MOSFET topology?" and "Byte and Switch (Part 1)" discuss related switching topologies.

When driving capacitive or heavily loaded lines, push-pull outputs can introduce significant switching noise due to fast slew rates. Some MCUs offer configurable drive strength or slew-rate limiting on push-pull GPIO pins to mitigate this, though availability varies by family. Exceeding the pin's source/sink current rating -- for example, 8 mA to 20 mA per pin on some common MCUs, though this varies widely by family -- can damage the device, reduce long-term reliability, or corrupt nearby signal levels.

Frequently asked

When should I use push-pull instead of open-drain on a GPIO pin?
Use push-pull for point-to-point outputs where only one driver is on the net: SPI MOSI/SCK, UART TX, PWM, chip-select lines, and LED drives. Use open-drain when multiple devices share a line and need a wired-AND arrangement, such as I2C SDA/SCL, or when you need the output to swing to a voltage rail different from the MCU's own supply.
Can I connect two push-pull outputs together?
Generally no. If both drivers are active simultaneously and disagree on the logic level, they create a low-impedance path between VCC and GND, causing excessive current and potential damage. Bus arbitration schemes like I2C use open-drain for exactly this reason, enabling wired-AND behavior and safe multi-device sharing. Wired-OR or wired-AND logic requires open-drain or open-collector outputs.
What is the difference between push-pull and open-drain in terms of signal speed?
Push-pull outputs typically switch faster because both the rising and falling edges are actively driven. Open-drain outputs rely on a pull-up resistor for the rising edge, so the rise time is determined by the RC time constant of the pull-up resistor and the line capacitance. For high-speed buses or long traces, this can be a meaningful limitation.
Is a totem-pole output the same as push-pull?
Largely yes. Totem-pole refers to a complementary active pull-up/pull-down output stage -- a high-side transistor sourcing current and a low-side transistor sinking current, stacked vertically in the schematic -- which is the same fundamental arrangement as push-pull. The term push-pull is more commonly used in modern MCU documentation, while totem-pole appears frequently in older TTL logic and 8051-era datasheets, though the term is not exclusive to BJT-era circuits.
How do push-pull outputs behave during MCU reset or power-up?
During reset, most MCUs tri-state or configure GPIO as high-impedance inputs by default, so the push-pull driver is not actively driving the line. The exact state depends on the MCU family and any boot-configuration pins. Relying on a push-pull output to hold a defined level during power sequencing without verifying the reset behavior in the datasheet is a common design mistake.

Differentiators vs similar concepts

Push-pull is most commonly confused with open-drain (or open-collector in BJT circuits). An open-drain output has only a low-side switch; the line is pulled high passively through an external resistor. Push-pull has both a high-side and low-side switch, so it actively drives both levels. The tradeoff is that open-drain allows multiple devices to share a net safely and supports voltage translation via the pull-up resistor, while push-pull offers faster edges and lower power dissipation on the output stage. Push-pull should not be confused with differential or half-bridge drive, which also involve complementary switches but drive two separate lines or a load with opposite polarity rather than a single-ended logic signal.