1. STM32 USART串口通信基础解析
USART(Universal Synchronous Asynchronous Receiver Transmitter)是STM32微控制器中非常重要的通信外设,它支持全双工的异步和同步串行通信。在实际项目中,USART常用于设备调试、模块通信、数据传输等场景。
1.1 USART与UART的区别
USART和UART经常被混淆,但它们有本质区别:
- USART:通用同步异步收发器,支持同步和异步两种模式
- UART:通用异步收发器,仅支持异步模式
同步模式下,USART需要额外的时钟线(SCLK)来同步数据传输;而异步模式下,仅需TX(发送)和RX(接收)两根数据线即可完成通信。
1.2 USART的主要特性
STM32的USART外设具有以下关键特性:
- 全双工异步通信
- 单线半双工通信
- 可配置的波特率(最高可达10.5Mbps)
- 可编程的数据字长(8或9位)
- 可配置的停止位(1、1.5或2位)
- 硬件流控制(RTS/CTS)
- 多种中断源
- 支持DMA传输
- 多处理器通信
- LIN主/从功能
- 智能卡协议支持
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. USART硬件设计与配置
2.1 硬件连接方案
典型的USART硬件连接需要考虑以下要素:
2.1.1 电平转换电路
STM32的USART输出的是TTL电平(0-3.3V),当需要与RS-232设备通信时,需要使用电平转换芯片如MAX3232:
code复制STM32_TX ----> MAX3232_TXIN ----> MAX3232_TXOUT ----> DB9_RX
STM32_RX <---- MAX3232_RXOUT <---- MAX3232_RXIN <---- DB9_TX
2.1.2 三线制基本连接
对于大多数应用,最简单的三线制连接就足够了:
- STM32_TX 连接对方_RX
- STM32_RX 连接对方_TX
- 共地连接(GND)
注意:一定要确保通信双方的GND连接在一起,否则可能导致通信不稳定或完全无法通信。
2.2 STM32 USART引脚配置
以STM32F103系列为例,USART1的默认引脚为:
- PA9 - USART1_TX
- PA10 - USART1_RX
配置步骤:
- 使能GPIO时钟和USART时钟
- 配置GPIO为复用推挽输出(TX)和浮空输入(RX)
- 将GPIO复用到USART功能
c复制// 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
// 配置TX引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置RX引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
3. USART软件配置与初始化
3.1 USART初始化结构体
STM32标准库提供了USART_InitTypeDef结构体来配置USART参数:
c复制typedef struct {
uint32_t USART_BaudRate; // 波特率
uint16_
