1. STM32与ESP32-S3R8无线通信系统概述
在物联网和嵌入式系统开发中,STM32与ESP32-S3R8的组合是一种常见且强大的解决方案。STM32L系列微控制器以其出色的低功耗特性著称,而ESP32-S3R8则提供了可靠的Wi-Fi和蓝牙连接能力。这种组合特别适合需要长时间电池供电且具备无线通信功能的设备。
UART(通用异步收发器)是两者之间最常用的通信接口,因为它简单可靠且资源占用低。在STM32与ESP32-S3R8的通信系统中,UART通常用于:
- 传输传感器数据
- 发送控制命令
- 固件升级
- 调试信息输出
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ESP32-S3R8 UART驱动配置详解
2.1 基础参数配置
ESP32-S3的UART驱动配置主要通过uart_config_t结构体实现,以下是一个典型的配置示例:
c复制uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.rx_flow_ctrl_thresh = 122,
.source_clk = UART_SCLK_DEFAULT,
};
关键参数说明:
- baud_rate:通信波特率,常见值有9600、115200等
- data_bits:数据位长度,通常使用8位
- parity:奇偶校验位,在可靠环境中可禁用
- flow_ctrl:硬件流控,根据实际需求启用
2.2 引脚映射配置
ESP32-S3的UART引脚可以灵活映射,使用uart_set_pin()函数配置:
c复制ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2,
GPIO_NUM_4, // TXD
GPIO_NUM_5, // RXD
GPIO_NUM_18, // RTS
GPIO_NUM_19 // CTS
));
注意:如果不需要使用某个信号线(如RTS/CTS),应设置为UART_PIN_NO_CHANGE
2.3 驱动安装与缓冲区设置
安装UART驱动时需要配置环形缓冲区:
c复制const int uart_buffer_size = 1024 * 2; // 双1024字节缓冲区
QueueHandle_t uart_queue;
ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2,
uart_buffer_size,
uart_buffer_size,
10, // 事件队列大小
&uart_queue, // 事件队列句柄
0 // 中断分配标志
));
缓冲区大小选择建议:
- 高速通信(>1Mbps):至少2048字节
- 低速通信:512-1024字节足够
- 如果只发送不接收,可将rx_buffer_size设为0
3. STM32端UART配置要点
3.1 CubeMX配置步骤
- 在Pinout & Configuration界面启用USART
- 配置参数与ESP32-S3端匹配:
- 相同波特率
- 相同数据位长度
- 相同停止位
- 相同流控设置
- 生成代码前确保中断已启用(NVIC Settings)
3.2 HAL库初始化代码
典型的STM32 UART初始化代码:
