串口通信ESP32 S3和STM32F103C8T6-Arduino平台
需要给esp32和stm32进行通信,想着先用串口连接,调试一下功能,记录如下:
物料
ESP32-S3-DevKitC-1(淘宝买的)
STM32F103C8T6(嘉立创的地阔星-新人送的)
接线
电脑-esp32-stm32-led
| ESP32 | STM32 | LED |
|---|---|---|
| 3V3 | 3V3 | |
| GND | GND | |
| GPIO17 (Serial2 TX) | A10 (Serial1 RX) | |
| GPIO18( Serial2 RX) | A09 (Serial1 TX) | |
| A01 | + | |
| GND | - |
特别注意自己的引脚!!!
ESP32-S3-DEVKITC-1的引脚是17和18,不是16和17
Serial1.begin需要传入指定引脚,不能用HardwareSerial里的宏定义
详细引脚见espressif

HardwareSerial引脚定义
实物图如下

ESP32代码
#include <Arduino.h>
#include <USB.h>
#include <USBCDC.h>
USBCDC USBSerial;
int counter = 0;
void setup() {
USB.begin();
USBSerial.begin(115200);
// 等待USB CDC连接
while (!USBSerial) {
delay(10);
}
USBSerial.println("ESP32 starting...");
// 初始化Serial1 (GPIO17/GPIO18) 用于与STM32通信
Serial1.begin(115200, SERIAL_8N1, 17, 18);
USBSerial.println("ESP32 ready to communicate with STM32");
}
void loop() {
// 发送数据到STM32
String message = String(counter);
Serial2.println(message);
USBSerial.println("esp32 send: " + message);
delay(1000);
// 检查是否收到STM32的数据
if (Serial2.available()) {
USBSerial.print("Received from STM32 (");
USBSerial.print(Serial2.available());
USBSerial.print(" bytes): ");
USBSerial.println(Serial2.readStringUntil('\n'));
} else {
USBSerial.println("No data received from STM32");
}
counter++;
// delay(1000);
}
STM32代码
/*
* Test program for the STM32F103C8T6
* 通过USART1 (PA9/PA10) 与ESP32通信
*/
#include "Arduino.h"
void setup() {
// 初始化USB串口用于调试
Serial1.begin(115200);
Serial1.println("STM32 starting...");
pinMode(PA1, OUTPUT);
Serial1.println("STM32 ready to communicate with ESP32");
}
void loop() {
// 发送数据到ESP32
if (Serial1.available()) {
String message = "STM32 " + Serial1.readStringUntil('\n');
Serial1.println(message);
}else{
Serial1.println("stm32 nothing");
}
// LED指示
digitalWrite(PA1, HIGH);
delay(500);
digitalWrite(PA1, LOW);
delay(500);
}
运行结果
13:42:08.316 -> Received from STM32 (12 bytes): STM32 462
13:42:08.316 -> esp32 send: 465
13:42:09.317 -> Received from STM32 (12 bytes): STM32 463
13:42:09.317 -> esp32 send: 466
13:42:10.331 -> Received from STM32 (12 bytes): STM32 464
13:42:10.331 -> esp32 send: 467
13:42:11.315 -> Received from STM32 (12 bytes): STM32 465
13:42:11.315 -> esp32 send: 468
13:42:12.314 -> Received from STM32 (12 bytes): STM32 466
13:42:12.314 -> esp32 send: 469
13:42:13.324 -> Received from STM32 (12 bytes): STM32 467
13:42:13.324 -> esp32 send: 470
13:42:14.300 -> Received from STM32 (12 bytes): STM32 468
13:42:14.300 -> esp32 send: 471
13:42:15.300 -> Received from STM32 (12 bytes): STM32 469
13:42:15.300 -> esp32 send: 472
13:42:16.327 -> Received from STM32 (12 bytes): STM32 470
13:42:16.327 -> esp32 send: 473
说明
- ESP32的Serial2和STM32的Serial1通信,默认io口为ESP32的
17/18对应STM32的A10/A09 - ESP32需要
Serial2.begin(115200, SERIAL_8N1, 17, 18),否则会读不到数据,available结果是240 - STM32接一个LED灯表示STM32在运行

浙公网安备 33010602011771号