STM32与ESP32的UART通信故障求助:串口检测及数据接收问题
ESP32与STM32 Nucleo UART通信问题排查与解决
硬件型号
- ESP32: FREENOVE ESP32 Wrover
- STM32: STM32 Nucleo F446RE
问题1:Arduino IDE无法识别可用串口
- 确认USB连接:STM32 Nucleo通过USB连接电脑后,会生成两个虚拟串口(ST-Link调试串口、用户UART串口),在Arduino IDE的「工具→端口」中选择正确的端口。
- 检查驱动:确保STM32 ST-Link驱动、ESP32 USB串口驱动已正常安装,可在设备管理器的「端口(COM和LPT)」中查看设备状态,无黄色感叹号即为正常。
- ESP32引脚验证:你使用的ESP32 UART1引脚(32=RX、33=TX)需确保未被板载外设占用,避免冲突。
问题2:ESP32无法接收STM32数据(代码修正与调试)
核心问题分析
当前代码存在引脚定义错误、数据读取缺失两大问题,同时需确保接线规范。
STM32代码修正
原代码中HardwareSerial的引脚顺序错误(RX/TX搞反),导致数据发送引脚不匹配:
#include <HardwareSerial.h> // 正确定义:第一个参数为RX引脚,第二个为TX引脚 HardwareSerial Serial1(PB6, PA10); void setup() { Serial.begin(9600); Serial1.begin(115200); } void loop() { Serial1.println("Sending.... "); // 用println添加换行符,方便ESP32完整接收 Serial.println("Sent"); delay(1000); }
ESP32代码修正
原代码仅判断了串口可用,但未实现数据读取逻辑,修正后添加数据读取与打印:
#include <HardwareSerial.h> HardwareSerial SerialPort(1); // 启用UART1 void setup() { Serial.begin(9600); // 波特率115200,8位数据位、无校验、1位停止位,RX=32,TX=33 SerialPort.begin(115200, SERIAL_8N1, 32, 33); } void loop() { if (SerialPort.available() > 0) { // 读取到换行符为止,确保获取完整数据段 String receivedData = SerialPort.readStringUntil('\n'); Serial.println("Received: " + receivedData); } }
关键硬件接线规范
必须严格按照以下方式接线(共地是串口通信的核心前提):
- STM32 TX引脚(PA10) → ESP32 RX引脚(32)
- STM32 RX引脚(PB6) → ESP32 TX引脚(33)
- STM32 GND → ESP32 GND
内容的提问来源于stack exchange,提问作者Heath R
相关产品推荐
相关产品推荐

