UART Baud Rate Calculator Formula

Understand the math behind the uart baud rate calculator. Each variable explained with a worked example.

Formulas Used

Baud Rate Divider

baud_divider = divider_int

Actual Baud Rate

actual_baud_rate = actual_baud

Baud Rate Error

baud_error_pct = abs(actual_baud - desired_baud) / desired_baud * 100

Bit Time

bit_time_us = 1e6 / actual_baud

Variables

VariableDescriptionDefault
clock_hzPeripheral Clock(Hz)16000000
desired_baudDesired Baud Rate(baud)115200
oversamplingOversampling Factor16
divider_exactDerived value= clock_hz / (oversampling * desired_baud)calculated
divider_intDerived value= floor(clock_hz / (oversampling * desired_baud) + 0.5)calculated
actual_baudDerived value= clock_hz / (oversampling * divider_int)calculated

How It Works

UART Baud Rate Generation

UART baud rate is derived from the peripheral clock using an integer divider and oversampling.

Formula

Divider = round(Clock / (Oversampling x Baud Rate))

Actual Baud = Clock / (Oversampling x Divider)

Error = |Actual - Desired| / Desired x 100%

Baud rate error should stay below 2% for reliable communication. Errors above 3-5% cause framing errors, especially for multi-byte transfers.

Worked Example

16 MHz clock, 115200 baud, 16x oversampling.

clock_hz = 16000000desired_baud = 115200oversampling = 16
  1. 01Exact divider: 16e6 / (16 x 115200) = 8.68
  2. 02Integer divider: round(8.68) = 9
  3. 03Actual baud: 16e6 / (16 x 9) = 111,111 baud
  4. 04Error: |111111 - 115200| / 115200 = 3.55%
  5. 05This is marginal; consider a different clock frequency

Ready to run the numbers?

Open UART Baud Rate Calculator