BOR resets your microcontroller when supply voltage drops below a set threshold, preventing unstable execution and memory corruption. The real challenge isn't understanding how it works—it's choosing a threshold that actually protects without phantom resets, and diagnosing whether BOR or your power supply is the real problem.
Key Takeaways
- BOR threshold too high is the #1 configuration error; it causes reset loops blamed on "bad regulators" when the power system is actually fine
- Reset-cause registers and voltage measurement at the IC pin (not the regulator output) are the first diagnostic steps; most debugging skips this and wastes time
- Hysteresis alone doesn't prevent oscillation if the regulator transient response is slower than your hysteresis window—margin math matters
- Internal BOR works for single-rail, moderate-tolerance designs; external supervisors become necessary when regulator tolerance or reset timing precision is tight
- A 0.1–0.2 V margin between minimum operating voltage and BOR threshold is typical, but actual safe margin depends on your specific regulator's transient response and PCB layout
How BOR Works
BOR is a voltage comparator that continuously monitors your supply rail. When voltage drops below the threshold you configure in fuses or option bytes, an internal circuit asserts reset immediately. Once voltage recovers above a release threshold (typically 50–100 mV higher due to hysteresis), BOR releases reset—but only after a delay period you set, usually 50–100 ms, to let regulators and clocks settle.

The hysteresis band prevents oscillation near the threshold. Without it, a supply that drifts around 2.7 V could toggle reset dozens of times per second. With hysteresis, the voltage must actually climb to (threshold + hysteresis) before BOR releases.
The reset delay is equally important. If BOR releases reset too quickly, your oscillator or regulator may still be stabilizing, and the CPU begins executing with wrong clock frequency or unstable power—just as bad as running low-voltage in the first place.
The Threshold Selection Mistake That Wastes Hours
Most engineers approach BOR threshold selection by looking at the datasheet's guaranteed operating voltage range—say, 2.0 V to 3.6 V for a typical 3.3 V device—and assume the BOR threshold should be 2.0 V or slightly higher.
This is wrong for real systems.
The actual safe operating margin depends on three things: your regulator's accuracy, the voltage drop from your power connector to the IC pins, and transient load response. Missing any one of these causes repeated resets you can't explain.
Example: A wireless sensor with nominal 3.3 V supply:
- Regulator accuracy: ±5% = ±0.165 V
- Cable and connector loss: 0.1 V (measured at the microcontroller)
- Transient load dip: −0.3 V (radio transmit, antenna tuning circuit, GPIO surge)
- Minimum safe voltage per datasheet: 2.0 V
Sum of worst-case dips: 3.3 − 0.165 − 0.1 − 0.3 = 2.735 V
If you set BOR at 2.1 V, the MCU has only 0.035 V of margin. Any additional voltage error (aging battery, cold temperature drop, extended cable) will cause resets. Many engineers respond by lowering BOR to 2.0 V, but then the MCU runs at the edge of the datasheet spec, risking memory corruption or flash programming failures you only discover in the field.
The right approach: Set BOR at 2.4–2.5 V, then measure the actual minimum voltage at the MCU pins during your worst-case load event (use an oscilloscope probe on VCC at the IC). If real voltage stays above BOR during normal operation, your threshold is correct. If it dips below BOR, your power system needs fixing—not your BOR setting.
From my project history, I've seen designs where BOR at 2.7 V caused daily resets during radio use, but the team blamed the regulator as "unstable." Oscilloscope capture showed the regulator was fine; voltage dips to 2.5 V were load-induced, and the threshold was simply set too high for that particular load profile. Lowering BOR to 2.4 V eliminated the resets and required zero hardware changes.
Diagnosing BOR vs. Power Supply: The Reset-Register Workflow
When a system resets repeatedly, engineers usually assume the power supply is failing. It's actually the first place to blame, but check BOR's state first.
Step 1: Read the reset-cause register immediately after startup.
Most microcontrollers store the reason for the last reset in a status register (often called RESET_STAT, RESET_SRC, or similar). After power-up or a watchdog reset, read this register in your startup code and log it or display it via serial console:
uint8_t reset_cause = RESET_STAT & 0x1F; // Example for ARM M0/M4
if (reset_cause == 0x10) {
// BOR event
} else if (reset_cause == 0x01) {
// POR event (normal power-up)
} else {
// Watchdog or other cause
}
If the reset register consistently shows BOR events, BOR is the culprit, not your regulator. Proceed to Step 2.
Step 2: Measure voltage at the microcontroller supply pins during the suspect load condition.
Connect an oscilloscope probe directly to the VCC pin of the microcontroller (not the regulator output, not the test point on your schematic—the actual IC pin). Trigger a load event: transmit a radio frame, turn on a motor, switch a relay, or whatever causes resets.
Record the minimum voltage observed. If the scope shows voltage dropping to 2.4 V but your BOR is set to 2.7 V, BOR is working correctly—your power system cannot support the load without drooping below the threshold.
Step 3: Compare measured minimum voltage to BOR threshold and regulator spec.
- If measured voltage ≥ BOR threshold, BOR is not the issue. Check for firmware hangs, watchdog timeouts, or other causes.
- If measured voltage < BOR threshold, confirm whether the dip is within the regulator's spec. Most automotive-grade 3.3 V regulators promise ±5% transient droop; for 3.3 V, that's ±0.165 V, so minimum could be 3.135 V. If you're seeing 2.4 V, the load current exceeds the regulator's current rating, or your PCB traces have excessive resistance.
This oscilloscope measurement saves 80% of debugging time because it separates "BOR triggered because voltage actually dropped" (correct behavior) from "BOR triggered incorrectly" (threshold misconfiguration).
Common Threshold Selection Errors
Error 1: BOR set to the datasheet minimum operating voltage (e.g., 2.0 V)
No margin for regulator tolerance, temperature variation, or battery aging. The MCU runs right at the edge and flash programming, EEPROM writes, or RAM access become unreliable.
Error 2: BOR set to nominal supply voltage (e.g., 3.3 V)
Almost every load transient triggers reset. The team responds by disabling BOR ("It's causing more problems than it solves"), eliminating protection entirely.
Error 3: BOR set without accounting for cable/connector voltage drop
Many designs measure voltage at the regulator output and set BOR based on that. But the microcontroller may be 30 cm away with narrow traces or a thin cable. Voltage at the IC pins can be 0.1–0.2 V lower than the regulator output. BOR threshold set for regulator output causes nuisance resets when voltage at the pins dips slightly lower.
Error 4: Hysteresis set too small, or threshold math ignores regulator transient response
You've configured 100 mV hysteresis and 50 ms reset delay, thinking "that should be stable." But if your regulator has 20 ms transient settling time, the delay doesn't help—the clock still stabilizes after the reset is already released. BOR oscillates anyway because the root cause (slow regulator recovery) wasn't addressed.
When Internal BOR Is Enough vs. When You Need an External Supervisor
Internal BOR is sufficient when:
- Single main power rail (3.3 V or 5 V)
- Regulator tolerance ±5–10%
- Reset delay of 50–100 ms is acceptable
- No multi-rail interdependencies (e.g., analog supply, I/O supply independent of core supply)
- Load transients are modest and predictable
Use an external voltage supervisor when:
- Multiple rails must be monitored independently (core, analog, I/O supplies at different voltages)
- Regulator tolerance is tight (±3% or better, or part-to-part variation is critical)
- Reset timing must be sub-millisecond or longer than the MCU's built-in delay allows
- You need adjustable hysteresis without rebuilding firmware
- The system requires fail-safe behavior (supervisor must assert reset even if the MCU stops responding)
From my experience with automotive designs, I've found that a single external supervisor monitoring the main 5 V or 3.3 V rail often eliminates BOR issues because you can dial in the exact threshold on the supervisor PCB (via resistor divider) without recompiling firmware or re-flashing the MCU. When BOR threshold needs adjustment during field testing, an external supervisor is a lifesaver.
Power System Checks Before Blaming BOR
If you observe repeated resets and the reset-cause register confirms BOR:
-
Inspect power connectors for corrosion or loose contacts. A corroded connector can add 0.2–0.5 V of drop under transient load, causing false BOR triggers.
-
Measure cable resistance. Use a multimeter in resistance mode across the positive and negative conductors of the power cable (with power off). More than 0.5 Ω for a 1–2 meter cable suggests undersized conductors. Calculate voltage drop: V_drop = I × R. If peak load is 2 A and cable is 1 Ω, drop is 2 V—enough to trigger any reasonable BOR threshold.
-
Check PCB trace width and layer routing. Power traces that change layers without proper vias, or traces narrower than 0.1 inch on a 3.3 V rail, can add 0.1–0.2 V drop under load. Route power to the microcontroller with multiple vias and wide traces (minimum 0.1 inch for 1–3 A loads).
-
Verify decoupling capacitor placement and values. A 100 nF capacitor should be within 5 mm of the VCC pin. Bulk capacitors (10–100 µF) should be within 2 cm. If decoupling is distant or undersized, transient response suffers and BOR triggers even with a "good" threshold.
-
Measure actual load current during the suspect event. Use a current clamp or insert a resistive shunt on the supply line. If the load is drawing 5 A from a 1 A regulator, no amount of BOR tuning will help.
Application Guidelines
Battery-powered IoT / wireless sensors:
- Set BOR at 80–90% of nominal voltage (e.g., 3.0 V for a 3.3 V supply).
- This leaves 10–20% margin for battery aging, cold temperature drop, and radio transmit dips.
- Monitor battery voltage if possible; log or report when voltage falls within 0.2 V of BOR threshold so users know replacement is imminent.
Industrial controllers with motors/relays:
- BOR threshold 85–90% of nominal (e.g., 2.9 V for 3.3 V).
- Add an external supervisor if motors can draw peak currents exceeding the regulator's transient spec.
- Confirm that reset delay (50–100 ms) gives the controller enough time to stabilize before resuming operation.
Automotive systems:
- Cold-crank and load-dump events cause extreme voltage dips (down to 3.5 V in a 12 V system, or 6 V in some transients).
- Use an external supervisor with adjustable threshold; internal BOR alone is often insufficient.
- Implement multi-level BOR: a "critical operation" threshold that halts non-essential tasks, and a "hard reset" threshold that forces full reset.
Data loggers and safety-critical systems:
- Enable BOR and set threshold to ensure all writes (flash, EEPROM) occur only during stable voltage.
- If voltage is marginal, abort write operations rather than proceeding at the edge of datasheet spec.
- Use external supervisor with longer reset delay (100–200 ms) if the system stores critical data that must be flushed to non-volatile memory before shutdown.
The Honest Limitation: Threshold Selection Is Not Exact
BOR threshold selection is more art than science because it depends on unknowns: the exact regulator model you bought (tolerance varies by revision), the actual PCB layout your manufacturer delivered, and load transients that may vary across production units or change with firmware updates.
Many engineers set a threshold in the design phase and never revisit it. Then field data arrives showing resets only in certain humidity/temperature conditions or with certain battery brands. The threshold was never wrong—it was only marginal.
If you ship a product with BOR enabled at a marginal threshold (say, 2.6 V on a 3.3 V supply), a 5% regulator tolerance shift between production batches or a slightly different cable vendor will push some units into the reset loop. This is why experienced teams leave a full 0.2–0.3 V margin between nominal supply and BOR threshold, even if it means accepting some "unused" battery capacity on battery-powered devices.
Conclusion
BOR is not a set-and-forget feature. Threshold selection requires measuring your actual regulator tolerance, accounting for cable and PCB voltage drop, and confirming the selected threshold with oscilloscope measurements during real load events. The reset-cause register and voltage probe are your primary debugging tools; use them before assuming the power supply is broken.
Enable BOR in almost all embedded systems. Disable it only after confirming with oscilloscope measurement and reset-cause logging that your power system is genuinely rock-solid and BOR is not preventing legitimate operation. In practice, that day rarely comes.