Home / Peripherals / UART

ESP32 UART Guide: UART0/1/2 Default Pins and Download Conflicts

Which pins each of the three UARTs defaults to, why UART1 appears broken, and what to check when flashing fails.

The three UARTs

UARTDefault TXDefault RXTypical use
UART0GPIO1GPIO3Flashing and default log output — leave it alone
UART1GPIO10GPIO9Defaults collide with flash; must be remapped
UART2GPIO17GPIO16GPS modules, serial displays, RS485

Why UART1 seems broken

UART1's default pins are GPIO9 and GPIO10 — the very pins most ESP32 modules use for internal SPI flash. Initialise UART1 as-is and flash access breaks, taking the chip down with it.

Fix: call uart_set_pin() and move UART1 to any free pair, e.g. TX=GPIO18, RX=GPIO19. It is the only reliable option.

Check these pins when flashing fails

Practical notes

This page defaults to the original ESP32. Other chips differ in UART count and defaults (the C3 has only two UARTs) — check the documentation for your target.
Data verified:2026-10-20 · Cross-checked against Espressif documentation. Anything that varies between chips or ESP-IDF releases is marked rather than guessed. Official peripheral docs →

Related