能否同时使用ESP32-S板上兼具内置闪存功能的UART1引脚?
ESP32-S 三路UART与内置闪存引脚复用问题解答
核心结论
可以同时使用全部3路UART且不影响内置闪存的正常使用,但需要通过引脚重映射或合理配置规避冲突。
具体分析与解决方案
冲突根源:ESP32-S的UART1默认引脚(GPIO9=RX、GPIO10=TX)确实与内置SPI Flash的D2、D3引脚复用。Flash默认工作在SPI模式下,仅在启动阶段或执行Flash读写操作时会占用这两个引脚,常规运行时UART1理论上可使用,但这种方式存在稳定性风险(比如Flash读写时UART通信会中断或出错),不推荐。
推荐方案:UART1引脚重映射
ESP32的UART支持灵活的引脚重映射,可将UART1的TX/RX映射到其他空闲引脚,完全规避与Flash的冲突。以ESP-IDF为例,配置代码示例如下:uart_config_t uart1_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_APB, }; // 初始化UART1,将TX映射到GPIO21,RX映射到GPIO22(可根据实际空闲引脚调整) uart_param_config(UART_NUM_1, &uart1_config); uart_set_pin(UART_NUM_1, GPIO_NUM_21, GPIO_NUM_22, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_driver_install(UART_NUM_1, 1024*2, 0, 0, NULL, 0);选择重映射引脚时,要避开其他外设的默认引脚,优先选择未被标注为Flash/PSRAM专用的空闲引脚。
特殊情况:必须使用默认UART1引脚
如果因硬件限制只能用GPIO9/10,需确保应用中Flash读写操作极少(比如仅启动时读取固件,运行时不进行Flash擦写/读写),此时可临时使用,但不建议在工业级或稳定性要求高的场景中采用。
额外提示
- UART0默认引脚(GPIO1=TX、GPIO3=RX)通常用于下载调试,若需将其作为普通UART使用,需注意禁用下载模式或调整调试接口;
- UART2默认引脚(GPIO16=RX、GPIO17=TX)无Flash复用冲突,可直接使用。
内容的提问来源于stack exchange,提问作者Vishesh Varma
相关产品推荐
相关产品推荐

