A pull-down resistor is a resistor connected between a signal line and ground (VSS) to establish a defined low logic level when no active driver is asserting the line. Without it, an undriven input floats to an indeterminate voltage that can cause unpredictable behavior.
In practice
Pull-down resistors appear wherever a signal line might otherwise be left undriven: push-button inputs, open-drain bus lines, enable pins, and logic-level translator circuits, among others. When a button is wired between a GPIO input and VCC, a pull-down resistor holds that input firmly at logic 0 until the button is pressed. This is the complement of the more common pull-up configuration, though the choice between the two usually depends on the active logic level needed and what the downstream circuit expects.
Resistor value is a trade-off between noise immunity and current draw. Common values for GPIO inputs range from about 1 kohm to 100 kohm. A lower value (stronger pull-down) charges and discharges parasitic capacitance faster and is more resistant to noise coupling, but draws more quiescent current from any source driving the line high. A higher value (weaker pull-down) wastes less power but can leave the line vulnerable to noise pickup on long traces or cables. In battery-powered or low-power designs, values of 47 kohm to 100 kohm are typical for slow signals, while 1 kohm to 10 kohm is common on faster or more noise-sensitive lines.
Many modern MCUs include optional internal pull-down resistors on GPIO pins, configurable in software -- for example, STM32 GPIOs can be set to pull-up, pull-down, or floating via the GPIOx_PUPDR register, and nRF52 series GPIOs offer similar options through the PIN_CNF register. Internal values are typically in the range of 10 kohm to 50 kohm. Relying on internal pull-downs avoids an external component, but the actual resistance value is often loosely specified (sometimes varying by a factor of two or more across temperature and process), so verify the datasheet if the exact value matters. The blog post "Introduction to Microcontrollers - More On GPIO" covers these GPIO configuration options in practical detail.
On buses and high-speed signals, pull-down resistors interact with line capacitance and driver impedance to form RC networks that affect rise and fall times. On signals running at several megahertz or above, even a modest 10 kohm pull-down combined with 50 pF of board and pin capacitance produces a 500 ns time constant that can round edges significantly, depending on source impedance and signal thresholds. In those cases, a stronger pull-down or an active driver is usually the better solution.
Discussed on EmbeddedRelated
Frequently asked
When should I use a pull-down instead of a pull-up?
Use a pull-down when the idle or default state of the signal should be logic 0 (near ground) and the active state is logic 1 (near
VCC). Pull-ups are more common in practice because
open-drain and open-collector interfaces (
I2C,
1-Wire, and similar buses) rely on them, but the choice is ultimately dictated by the circuit's logic polarity, the active driver type, and sometimes by which state must be guaranteed during power-on before firmware configures the pin.
What value should I choose for a pull-down resistor on a GPIO button input?
For a simple button wired to
VCC, values from 10 kohm to 47 kohm are a practical starting point. This keeps
quiescent current low (roughly 100 uA to 330 uA when the button is pressed) while still holding the line cleanly at ground when open. If the trace is long or runs near noisy signals, go lower (4.7 kohm to 10 kohm). If power consumption is critical and the signal is slow, 100 kohm is workable but increases sensitivity to noise.
Can I rely on an MCU's internal pull-down resistors instead of placing an external one?
Often yes, but check the datasheet. Internal pull-downs on most MCUs are in the 10 kohm to 50 kohm range, and their tolerance is wide, sometimes plus or minus 50 percent over voltage and temperature. For a
GPIO button input or a simple enable line, this is usually fine. For circuits where the pull-down value matters for timing, current limiting, or impedance matching, use a precise external resistor instead.
What happens if a pull-down resistor is missing on an undriven input?
The input floats -- its voltage is determined by leakage currents, internal input bias currents, protection structures, capacitive coupling from nearby signals, and
electromagnetic interference rather than a defined logic level. On a CMOS input, a floating pin can sit near the switching threshold, causing the input buffer to oscillate and draw significantly more current than normal, and the logic value read by firmware will be indeterminate. This is a common source of intermittent bugs that are difficult to reproduce.
Is a pull-down resistor the same thing as a termination resistor?
Not exactly. A pull-down establishes a default DC logic level on an otherwise undriven line. A termination resistor is placed at the end of a transmission line to match its characteristic impedance and prevent signal reflections -- its purpose is signal integrity at high frequencies. Some configurations, such as an AC termination network or a resistor to a bias voltage, can serve both roles simultaneously, but the two are distinct concepts with different design goals.
Differentiators vs similar concepts
A
pull-up resistor connects the signal line to
VCC to establish a default high level; a pull-down connects to ground to establish a default low level. The terms are often paired because the choice between them determines the idle and active logic polarity of the signal.
Open-drain and open-collector outputs require a pull-up (not a pull-down) to reach a high level, which is why
I2C, for example, uses pull-ups exclusively. A termination resistor, by contrast, is sized to match transmission-line impedance for signal integrity purposes rather than to define a DC logic level.