串口通信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
image
HardwareSerial引脚定义

实物图如下
652f714f685206b6e2b03b53c476f2f5

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

说明

  1. ESP32的Serial2和STM32的Serial1通信,默认io口为ESP32的17/18对应STM32的A10/A09
  2. ESP32需要Serial2.begin(115200, SERIAL_8N1, 17, 18),否则会读不到数据,available结果是240
  3. STM32接一个LED灯表示STM32在运行
posted @ 2025-08-16 14:03  AlpacaGo  阅读(208)  评论(0)    收藏  举报