UART Baud Rate Error Calculator

Find the achievable baud rate and error percentage for any MCU clock and prescaler configuration

Clock & Baud Configuration

Common: 8 MHz (STM32 internal), 16 MHz (Arduino), 72 MHz (STM32F103), 168 MHz (STM32F4)
bps
Common: 9600 · 19200 · 38400 · 57600 · 115200 · 230400 · 1M
STM32 supports both; AVR/Arduino always uses 16x (or 8x with U2X bit).
Prescaler / BRR Value
Actual Baud Rate Achieved
bps
Baud Rate Error

All Standard Baud Rates — Error Scan

Shows all standard baud rates achievable within ±2% error for the current clock settings. ✅ = within spec, ⚠ = marginal, ❌ = unusable.

Baud Rate BRR Actual (bps) Error Status
Click Calculate to scan all baud rates
Advertisement (In-Article)

Understanding UART Baud Rate Error

UART (Universal Asynchronous Receiver-Transmitter) generates baud rates by dividing a peripheral clock frequency by an integer prescaler (BRR — Baud Rate Register). Because the division must be an integer, the actual baud rate is rarely exactly equal to the target, resulting in a small error.

The formula is: BRR = FCLK / (Oversampling × Target_Baud). The BRR is rounded to the nearest integer, giving: Actual_Baud = FCLK / (Oversampling × round(BRR)).

Acceptable Error Limits

Tip: Use Crystal Clocks for UART

Internal RC oscillators (e.g., STM32 HSI at 8 MHz) have ±1–2% frequency tolerance themselves. For reliable high-baud UART, always use an external crystal oscillator so the clock error doesn't add to the baud rate error.