【Embedded Development】【USART】USART通信协议的时序学习过程记录

一、USART/UART 串口协议(嵌入式开发视角)简介

串口协议是嵌入式系统中最常用的异步串行通信协议,核心用于设备间低成本、近距离数据传输,以下是精准且贴合开发实际的核心知识点:

1.1 核心定义与区别(嵌入式场景重点)

1. 缩写含义

  • UART :Universal Asynchronous Receiver/Transmitter(通用异步收发器)
    • 无时钟线,依赖双方约定的波特率同步,嵌入式中最常用(如 STM32 的 USART 外设可配置为 UART 模式)。
  • USART :Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步 / 异步收发器)
    • 兼容异步(UART)和同步(需时钟线 SCLK)模式,同步模式可提高传输稳定性(如与 SPI 设备搭配时),但嵌入式中极少用同步模式,通常直接当作 UART 使用。

2. 关键区别(开发中无需纠结,重点记 "UART 足够用")

特性 UART USART
时钟依赖 无(异步) 可选(同步 / 异步)
硬件线数 最少 2 根(TX 发送、RX 接收,GND 共地) 异步模式同 UART,同步模式需加 SCLK
嵌入式应用 99% 场景(调试、模块通信) 本质用其 UART 模式,同步模式极少用

2.1 核心工作原理(嵌入式开发必须掌握)

1. 通信本质

  • 串行传输:数据按位(bit) 顺序发送(而非并行),节省 GPIO 资源。
  • 异步同步:无需时钟线,发送方和接收方必须提前约定波特率、数据位、校验位、停止位(即 "串口参数"),否则数据传输错误。

2. 帧结构(核心!配置串口的关键依据)

串口数据以 "帧" 为单位传输,标准帧结构(嵌入式最常用:8N1)如下:

复制代码
起始位(1bit,低电平) → 数据位(8bit,LSB先传) → 校验位(0/1bit,可选) → 停止位(1bit,高电平)
  • 起始位:低电平触发接收(默认空闲状态为高电平);
  • 数据位:5~9bit 可选,嵌入式中 99% 用 8bit(字节传输);
  • 校验位:无(N)、奇(O)、偶(E)可选,用于简单错误检测(嵌入式中常用 "无校验",靠上层协议容错);
  • 停止位:1/1.5/2bit 可选,高电平结束一帧,保证帧间隔。

3. 关键参数(STM32 配置时必须匹配,否则乱码)

异步时必须提前规定波特率

  • 波特率 :每秒传输的比特数(bit/s),嵌入式常用:9600、19200、115200(调试首选)、460800(高速传输);
    • 注意:双方波特率误差需≤3%(由晶振精度决定,STM32 用 HSE 晶振比 HSI 更稳定)。
  • 数据位 + 校验位 + 停止位:嵌入式标准配置为 8N1(8 位数据、无校验、1 位停止位),部分模块可能用 7E1(7 位数据 + 偶校验),需看模块手册。

1.3 硬件连接(嵌入式实战重点)

1. 最小系统连接(必须共地!)

  • 主机 TX → 从机 RX(交叉连接,如 STM32 的 PA9 (TX) → 蓝牙模块的 RX);
  • 主机 RX → 从机 TX;
  • 主机 GND → 从机 GND(共地是通信成功的关键,否则信号干扰导致乱码)。

2. 电平匹配(嵌入式常见坑!)

  • 嵌入式 MCU(如 STM32)的串口电平:TTL 电平(0V = 低电平,3.3V = 高电平);
  • PC 机串口电平:RS232 电平(-15V~-3V = 高电平,3V~15V = 低电平);
  • 若 STM32 直接连 PC,需用 USB-TTL 模块(如 CH340)做电平转换,否则会烧毁 GPIO。

1.4 嵌入式开发核心应用场景

  1. 调试打印 :重定向printf到串口,输出调试信息(如变量值、函数执行状态),是嵌入式开发最基础的调试手段;
  2. 模块通信:与低速率传感器 / 模块通信(如 GPS 模块、蓝牙模块 HC-05、温湿度传感器 SHT30(UART 版本)、RFID 模块);
  3. 设备间通信:两个 MCU(如 STM32 与 Arduino)之间的简单数据交互(无需复杂协议,直接传字节)。

1.5 STM32 开发关键要点(贴合实战)

  1. 外设选择:STM32 的 USART1~USART3、UART4~UART5(不同型号不同),均可配置为 UART 模式;
  2. 配置步骤
    • GPIO 复用:将 TX 配置为复用推挽输出,RX 配置为浮空输入;
    • 波特率配置:通过 USART 的 BRR 寄存器设置(由 APB 时钟和目标波特率计算得出,STM32CubeMX 可自动生成);
    • 帧格式配置:CR1 寄存器设置数据位、校验位,CR2 设置停止位;
    • 中断 / DMA:接收数据常用中断(避免阻塞),大量数据传输用 DMA(降低 CPU 占用);
  3. 常见问题
    • 乱码:波特率不匹配、电平不匹配、共地不良;
    • 丢包:接收缓冲区溢出(未及时读取)、中断优先级设置过低、波特率误差过大。

1.6 总结(嵌入式开发视角)

  • UART 是串口协议的核心,USART 在嵌入式中本质当作 UART 用,无需关注同步模式;
  • 核心记住 "8N1+115200 波特率" 这一标准配置,90% 场景适用;
  • 开发重点:GPIO 复用配置、波特率计算、中断 / DMA 接收、电平匹配与共地,这些直接决定通信成败。

1.7 逻辑电平与电气电平的对应关系(补充)

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电

压与数据的对应关系,串口常用的电平标准有如下三种:

ITL电平:+3.3V或+5V表示1,0V表示0

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

二、通信讲解

2.1 串口参数及时序

注:低位先行

波特率:串口通信的速率

起始位:标志一个数据帧的开始,固定为低电平

数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

校验位:用于数据验证,根据数据位计算得来

停止位:用于数据帧间隔,固定为高电平

8 位数据位的帧格式:帧结构为「1 位起始位 + 8 位数据位(D0~D7) + 1 位停止位」,总长度 10 位,对应常见的 "8N1" 配置(8 位数据、无校验、1 位停止位)。

9 位数据位的帧格式:帧结构为「1 位起始位 + 9 位数据位(D0~D7 + RB8/TB8) + 1 位停止位」,总长度 11 位。这里的 "RB8/TBS" 是第 9 位数据位(在 USART 外设中,第 9 位常被标记为 RB8(接收)/TB8(发送))。

2.2 串口时序实际采样图

做个简短分析,一般的MCU都已经集成了UART

注:可以学习一下逻辑分析仪采样方法,可以使用便宜的学习研究波形,到工作中就可以使用更精密的仪器调试工业设备或者量产产品了。

或者

相关推荐
时光の尘13 天前
【STM32】DMA超详细解析·入门级教程
stm32·单片机·嵌入式硬件·mcu·串口·dma·usart
李boyang18 天前
单片机通信协议--USART(串口通信)
单片机·嵌入式硬件·usart
大河qu2 个月前
嵌入式/STM32串口printf打印字符串,多出来的数据是哪里来的?
stm32·usart·printf·串口打印·打印异常
Meraki.Zhang4 个月前
【STM32实践篇】:串口通信
stm32·嵌入式硬件·串口·uart·usart
c7_ln6 个月前
USART 串口通信全解析:原理、结构与代码实战
stm32·单片机·usart
憧憬一下7 个月前
stm32之USART
stm32·单片机·嵌入式硬件·串口·嵌入式·usart
Hungry_118 个月前
STM32 串口
stm32·单片机·嵌入式硬件·串口·usart
随便@_@1 年前
STM32 USART串口通信 综合练习
stm32·单片机·嵌入式硬件·usart
随便@_@1 年前
STM32 USART串口通信
stm32·单片机·嵌入式硬件·usart