串口通信ESP32 S3和STM32F103C8T6-Arduino平臺(tái)
需要給esp32和stm32進(jìn)行通信,想著先用串口連接,調(diào)試一下功能,記錄如下:
物料
ESP32-S3-DevKitC-1(淘寶買的)
STM32F103C8T6(嘉立創(chuàng)的地闊星-新人送的)
接線
電腦-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里的宏定義
詳細(xì)引腳見espressif

HardwareSerial引腳定義
實(shí)物圖如下

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() {
// 發(fā)送數(shù)據(jù)到STM32
String message = String(counter);
Serial2.println(message);
USBSerial.println("esp32 send: " + message);
delay(1000);
// 檢查是否收到STM32的數(shù)據(jù)
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串口用于調(diào)試
Serial1.begin(115200);
Serial1.println("STM32 starting...");
pinMode(PA1, OUTPUT);
Serial1.println("STM32 ready to communicate with ESP32");
}
void loop() {
// 發(fā)送數(shù)據(jù)到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);
}
運(yùn)行結(jié)果
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通信,默認(rèn)io口為ESP32的
17/18對應(yīng)STM32的A10/A09 - ESP32需要
Serial2.begin(115200, SERIAL_8N1, 17, 18),否則會(huì)讀不到數(shù)據(jù),available結(jié)果是240 - STM32接一個(gè)LED燈表示STM32在運(yùn)行

浙公網(wǎng)安備 33010602011771號