UART, or Universal Asynchronous Receiver/Transmitter, is a communication protocol used to send data between two devices over just a few wires. It’s one of the oldest and most common ways that microcontrollers, sensors, GPS modules, and computers exchange information. If you’ve ever plugged an Arduino into your computer, connected a Bluetooth module to a project, or used a serial terminal to debug firmware, you’ve used UART.
How UART Communication Works
UART sends data one bit at a time along a single wire. Two devices connect using three lines: a transmit pin (TX) on one device, a receive pin (RX) on the other, and a shared ground wire. The TX of one device crosses over to the RX of the other, so both devices can send and receive simultaneously. This makes UART “full-duplex,” meaning data flows in both directions at once.
The “asynchronous” part means there’s no shared clock signal keeping the two devices in sync. Instead, both devices agree ahead of time on a speed, called the baud rate, measured in bits per second. Common baud rates include 9,600, 115,200, and 1,000,000. As long as both sides are set to the same rate, the data arrives correctly.
Each chunk of data is wrapped in a small packet. The sending device pulls its TX line low for one bit period to signal a start bit, then shifts out the data bits (least significant bit first), optionally adds a parity bit for basic error checking, and finishes with a stop bit by pulling the line high again. If the receiving device doesn’t detect a proper start and stop bit, it flags a framing error, which is the simplest way UART catches corrupted transmissions.
Where UART Is Used
UART is everywhere in electronics because it’s simple, cheap, and requires minimal hardware. Its most common role is connecting a microcontroller to a peripheral device in a one-to-one configuration. GPS modules, Bluetooth transceivers, Wi-Fi chips, RFID readers, and fingerprint scanners all commonly communicate over UART. When you wire a GPS breakout board to a Raspberry Pi, the GPS streams location sentences over its TX pin to the Pi’s RX pin using UART at 9,600 baud.
Debugging and development is another major use. Engineers use UART to open a serial console on embedded systems, print diagnostic messages, and send commands during testing. This is why nearly every development board exposes UART pins, and why USB-to-UART bridge chips like the CP2102 from Silicon Labs exist. These bridges let a modern laptop (which only has USB ports) talk to a UART device through a simple adapter cable, with plug-and-play drivers handling the translation.
Industrial equipment, scientific instruments, and legacy computing hardware also rely on UART-based serial communication. The RS-232 standard, which powered serial ports on PCs for decades, is built on top of UART with different voltage levels and connector standards. While RS-232 ports have mostly vanished from consumer laptops, they’re still found on networking equipment, medical devices, and factory automation controllers.
Voltage Levels and Physical Signals
UART itself doesn’t define specific voltages. The actual signal levels depend on the hardware standard being used. Most modern microcontrollers use TTL-level UART, where a logical 1 sits at 3.3V or 5V and a logical 0 is at 0V. This works well for short connections between chips on the same circuit board or between nearby modules.
RS-232 uses a much wider voltage swing: roughly +12V for a logical 0 and -12V for a logical 1 (the specification allows anywhere from ±5V to ±15V). That 24-volt total difference between states makes RS-232 more resistant to electrical noise over longer cables, which is why it was the go-to for connecting PCs to printers and modems. The typical maximum cable length for RS-232 is about 100 feet (30 meters) at lower speeds. Directly connecting a TTL-level UART device to an RS-232 port without a level-shifting chip will either fail to communicate or damage the lower-voltage device.
Speed and Distance Limits
UART is not built for high-speed data transfer. The most widely used baud rate, 9,600, moves just 960 bytes per second. Even the faster standard rates like 115,200 baud only reach about 11.5 kilobytes per second. Specialized hardware can push into the millions of bits per second, but at that point, other protocols generally become more practical.
Distance is also limited. At TTL voltage levels, UART signals degrade quickly, so connections longer than a few inches to a few feet on a breadboard or PCB are typical. RS-232 extends that to roughly 30 meters. For anything longer, engineers switch to standards like RS-485, which can reach over a kilometer. UART’s sweet spot is short, simple, point-to-point links where raw speed isn’t the priority.
How UART Compares to SPI and I2C
UART, SPI, and I2C are the three serial protocols you’ll encounter most often in electronics projects, and each fits a different situation.
- UART uses two data wires (plus ground), supports full-duplex communication, and connects exactly two devices. It’s the simplest option when you only need one peripheral talking to one controller, and it works well over longer distances than the other two. The drawback is that it can’t handle multiple devices on the same bus.
- I2C also uses two wires (a data line and a clock line) but can connect dozens of devices on those same two wires using unique addresses. It’s ideal when board space is tight and you have several sensors or chips to manage. The trade-off is moderate speed and increasing complexity as you add more devices.
- SPI is the fastest of the three, reaching tens of megabits per second, and runs in full-duplex. But it requires four wires plus an additional chip-select line for every extra device, so pin count grows quickly. It’s best for high-speed transfers like reading from flash memory or driving a display, where performance matters more than wiring simplicity.
If you’re connecting a single GPS module or Bluetooth radio to a microcontroller and don’t need blazing speed, UART is the natural choice. If you need to talk to five temperature sensors on one bus, I2C makes more sense. If you’re streaming audio data to a codec chip, SPI is likely the right tool.
Setting Up a UART Connection
For two devices to communicate over UART, four settings need to match on both sides: baud rate, the number of data bits (usually 8), parity mode (none, even, or odd), and the number of stop bits (1 or 2). You’ll often see this written in shorthand like “9600 8N1,” meaning 9,600 baud, 8 data bits, no parity, and 1 stop bit. This particular configuration is the most common default across consumer electronics and hobbyist modules.
If the settings don’t match, you’ll see garbled text or no communication at all. This is one of the most frequent troubleshooting issues when wiring up a new UART device. Double-checking the baud rate and making sure TX connects to RX (not TX to TX) solves the majority of problems. A USB-to-UART adapter and a serial terminal program on your computer can help you monitor the raw data flowing between devices, making it much easier to verify that everything is configured correctly.

