You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:44:58