A USART (Universal Synchronous/Asynchronous Receiver-Transmitter) is a serial communication peripheral that supports both asynchronous operation (like a standard UART) and synchronous operation using an explicit shared clock line. Most MCU datasheets distinguish a USART from a plain UART by the presence of this clock pin (often labeled CK, CLK, or SCLK), though the asynchronous mode is by far the more commonly used of the two.
In practice
In everyday embedded development, the terms UART and USART are often used interchangeably, and most of the time the synchronous mode goes unused. When configuring a USART peripheral on chips like the STM32 series or AVR ATmega devices, you typically select asynchronous mode, set a baud rate, choose word length (commonly 8 bits), parity (none, even, or odd), and stop bits (1 or 2). The result is functionally equivalent to a UART for most purposes, though some USARTs retain extra features, register differences, or pin multiplexing behavior even in asynchronous mode.
Synchronous mode is occasionally useful when you need a clocked serial link without the overhead or pin count of SPI. In synchronous mode the peripheral drives a clock output, reducing the need for both sides to independently derive the same bit rate from their own oscillators; however, the two sides must still agree on the clocking relationship and polarity, and the receiver must correctly sample data relative to the supplied clock. This can simplify communication with certain external devices such as codecs or shift-register chains. However, synchronous mode is not the same as SPI: clock polarity/phase behavior, duplex handling, and chip-select management differ between the two, and peripheral libraries do not treat them as interchangeable.
A common pitfall is mismatched baud rates between two devices in asynchronous mode. Because there is no clock signal to lock onto, both ends must derive the same bit timing from their own oscillators. Errors in baud rate calculation, integer rounding in baud-rate-generator dividers, or an inaccurate system clock (especially when using an internal RC oscillator) can push the actual bit rate far enough off that framing errors accumulate. At high baud rates, even a small frequency error compounds across a multi-byte frame. The blog post "Bit-Banged Async Serial Output And Disciplined Engineering" explores related timing discipline for software-generated serial, and the same principles apply to hardware USART peripherals.
When building packet-based protocols on top of USART/UART links, remember that the peripheral only gives you a byte stream; framing, delimiting, and error detection are the application's responsibility. The blog post "Help, My Serial Data Has Been Framed: How To Handle Packets When All You Have Are Streams" covers practical approaches to this problem. Also note that USART typically transmits the least-significant bit first, which is the common default across most devices and modes, though some peripherals allow configurable bit order -- this can be a source of confusion when inspecting captures on a logic analyzer or oscilloscope. See "Endianness and Serial Communication" for a discussion of bit ordering in serial protocols.
Frequently asked
What is the practical difference between a UART and a USART?
A USART adds a synchronous mode, usually exposed as an extra clock pin (CK/CLK) on the package. In asynchronous mode a USART behaves identically to a
UART. If your design only uses asynchronous serial (the common case), the distinction has no effect on your code or wiring.
When would I actually use the synchronous mode of a USART?
Synchronous mode can be useful for clocked byte-stream links to peripherals that expect a master-driven clock but do not require a dedicated chip-select, such as certain audio codecs, LED drivers, or custom slave devices built around shift
registers. That said,
SPI peripherals are more widely supported and better documented for such tasks; synchronous USART mode tends to be a niche choice.
How do I calculate the correct baud rate divider for a USART?
The divider is typically derived from the peripheral bus clock: divider = f_PCLK / (oversampling_factor *
baud_rate). On STM32 parts, the USART BRR register holds a fixed-point divider and the oversampling factor is 16 by default (8 in oversampling-by-8 mode). Integer rounding always introduces a small error; verify the resulting actual baud rate is within roughly 2-3% of the target, and be especially careful when using an internal RC oscillator, which may have a larger frequency tolerance.
My USART is generating framing errors. What should I check?
Framing errors indicate the receiver did not see a valid stop bit. Common causes:
baud rate mismatch between the two sides (recheck divider calculations and clock source accuracy), incorrect word length or parity settings, a floating or unconnected RX line, or level incompatibility (e.g., a 5 V device driving a 3.3 V
MCU without a
level shifter). An oscilloscope or
logic analyzer can confirm the actual bit timing and voltage levels on the wire.
Is USART the same as RS-232?
No. USART describes the digital logic-level peripheral inside the
MCU.
RS-232 is a signaling standard that defines voltage thresholds using opposite-polarity positive and negative levels (valid driver outputs range from roughly +/-5 V to +/-15 V, with separate defined thresholds for drivers and receivers) and specifies connector types and handshaking signals. To connect a USART to an RS-232 port you need a level-shifting transceiver such as the MAX232 or a similar device. Many modern systems skip RS-232 entirely and connect USART TX/RX lines directly to a
USB-to-serial bridge chip instead.
Differentiators vs similar concepts
UART (Universal Asynchronous Receiver-Transmitter) is the asynchronous-only subset of what a USART provides. A peripheral labeled UART has no synchronous clock mode; a USART does. In practice, many datasheets and HAL libraries label their peripheral USART even when it is configured and used purely in asynchronous mode, which causes the two terms to be used interchangeably in most embedded code and forum discussions. USART should not be confused with
SPI: although USART synchronous mode and SPI both use a shared clock, SPI is a distinct standard with defined clock-polarity/phase modes (CPOL/CPHA), separate MISO/MOSI lines, and explicit chip-select signaling that USART synchronous mode does not replicate.