
UART is not a voltage standard
UART describes the frame and the timing, not the voltage. The same frame can travel on a 3.3 V pin, a 5 V pin, an RS-232 port or an RS-485 pair, and joining one to another without checking is how a part ends up outside its ratings.
Ten lessons went by without saying how many volts a 1 is, because UART does not say. It describes a frame, a start bit, data bits and a stop bit, and a beat both ends agreed beforehand. What the pins are made of is a separate question, and "UART" on a port name does not answer it.
Logic-level UART
An ESP32 pin is 3.3 V logic. The line idles high, near 3.3 V, and a low is near 0 V. The ESP32 datasheet allows at most the supply plus 0.3 V on an input, about 3.6 V. A 5 V signal is outside that, and no ESP32 input is rated for it.
That makes the rule short: match the voltage first. A 5 V board's TX must not go straight to an ESP32 RX. The other way round is less clear. A 3.3 V output into a 5 V input usually reads as a 1, but the 5 V part's datasheet gives the lowest voltage it accepts as a 1, and that is the number to check, not a guess.
This course says "logic-level" where older pages say TTL. TTL once meant 5 V; on today's boards the word only tells you that 0 V is low. The thermal printer kits show the problem: their base board has two headers, one for 3V3 boards and one for 5V boards, and you use the one that matches yours (see the printers' baud page).
RS-232
RS-232 carries the same frames, with different electricals. Its signals swing several volts either side of zero, and it is inverted: the idle 1 is the negative side. A chip such as the MAX232 sits between a logic-level UART and the port and makes those voltages from a single 5 V supply. Wired straight to an ESP32 pin, an RS-232 output is far past the limit above. The frame is the same; the interface is not.
USB
A USB-to-serial adapter is a bridge. USB is on one side, a logic-level UART on the other, and the adapter's logic voltage has to match the target's. Several of them have a jumper or a pin to choose 3.3 V or 5 V.
USB itself is not a UART. It has its own signals, speeds and packets, and a USB serial port has no start bits or parity on the wire. The ESP32-S3 has a USB port built into the chip, on GPIO19 and GPIO20, and it is not UART0, which is on GPIO43 and GPIO44. Most other dev boards carry UART0 to their socket through a bridge chip, as the serial-ports page describes.
RS-485
RS-485 is another electrical interface. Each bit is the difference in voltage between two wires, which lets it run farther than a single-ended line. It carries UART frames, and it needs its own driver chip; the shop's MAX485 board has a TX that swings to 5 V, so it is not for an ESP32 pin either. The rest of RS-485 belongs to another course.
Common mistakes
- Reading "serial" or "UART" as a voltage. It names the frame. Read the pin's datasheet or the board's label for the volts.
- Joining a 5 V TX to an ESP32 RX. The datasheet limit is about 3.6 V, and it promises nothing beyond it. Use a level shifter, or a 3.3 V part.
- Wiring an RS-232 port straight to a logic pin. It swings negative and positive, and it is inverted: far outside the limit, with nothing in the datasheet promising what happens next.
Edit this page — content/fundamentals/uart/not-a-voltage-standard.mdx
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.