☰
STM32 USART串口超全详解(原理+接线+帧结构+中断+DMA+全套排错)
2026/10/13 8:33:50 网站建设 项目流程

前言

串口 USART 是嵌入式第一个、最重要、用得最多的通信外设,属于串行、异步、一对一、全双工通信。
不管是代码调试打印、蓝牙通信、GPS 采集、上位机通信、串口屏显示,全部依赖串口。

很多同学学串口只会复制 printf 模板,只会调用函数,不懂底层原理。
遇到乱码、丢包、收不到数据、接收卡死完全不会排查。

本篇文章纯零基础、学生向、练项目向,从零彻底吃透 USART,包含:硬件接线、基础通信概念、帧结构、波特率原理、奇偶校验讲解、三种收发模式、常见报错、全套排错思路。
看懂这一篇,串口再也不用死记代码。

一、基础通信概念梳理

  1. 串行通信

数据不一次性并行传输,按照先后顺序,一位一位逐根导线依次发送,串口仅依靠TX、RX两根信号线传输数据,属于典型串行通信。优点布线简单,远距离传输稳定;缺点传输速度弱于并行通信。

  1. 异步通信

通信双方没有共用时钟信号线,不靠时钟同步时序,提前约定统一波特率、帧格式,设备自行采样识别数据,USART日常使用模式就是异步通信。

  1. 一对一通信

一个发送端只对应一个接收端,点对点传输,串口基础用法为一对一,不适合一主多从大规模挂载。

  1. 全双工通信

TX、RX两条线路相互独立,同一时刻可以一边发数据、一边接收数据,收发互不干扰,串口天生支持全双工。

二、UART / USART 到底有什么区别?

1、UART(异步串口)

只有两根线:TX、RX
没有时钟线,双方靠约定波特率通信。
我们平时所有的调试串口、USB转串口、模块通信,全部都是 UART。

2、USART(同步/异步串口)

USART = UART异步通信 + 同步时钟通信

  • 异步模式:就是我们日常用的串口,串行、异步、一对一、全双工

  • 同步模式:多出一根 SCLK 时钟线,不需要波特率

重点:99% 的学习和项目只用到异步模式,等同于 UART。

三、串口硬件接线原理(90%新手踩坑点)

1、终极接线规则(死记)

TX 接 RX,RX 接 TX,GND 必须相连

  • 单片机 TX → 外设 RX

  • 单片机 RX → 外设 TX

  • 单片机 GND ↔ 外设 GND

2、为什么必须交叉?

TX 是发送,RX 是接收
你发的数据必须对方收,对方发的数据必须你来收,全双工通信依靠交叉接线实现双向收发。

3、为什么必须共地?

两个设备电压基准不一样!
不共地 = 电平识别错乱 = 百分百乱码 / 不收数据
可以分开供电,但地线必须连在一起。

4、电平注意(防烧芯片)

STM32 是 3.3V TTL
很多模块是 5V TTL
5V TX 绝对不能直连 3.3V 单片机 RX
会击穿 IO,解决方法:串1k电阻或电平转换。

补充:初始化为何同时开启USART与GPIO时钟

GPIO引脚与USART是两个独立硬件:

1.GPIO时钟:TX、RX引脚要配置复用功能,引脚电平检测、电路驱动需要时钟,不开时钟引脚失效;
2.USART时钟:串口内部分频、移位、校验、中断硬件需要时钟,不开时钟串口休眠无法工作。

USART1挂载APB2总线,其余串口挂载APB1总线,开启时钟时需要对应总线。

四、串口帧结构(所有乱码的根源)

串口不是发字节,是发一帧一帧的数据
标准帧格式:起始位 + 数据位 + 校验位 + 停止位

1、各分段介绍

  • 起始位:固定1位低电平,用来唤醒接收端,告知即将传输数据;

  • 数据位:常用8位,承载要传输的有效数据;

  • 校验位:可选,用来简单校验传输数据是否出错,分为无校验、奇校验、偶校验;

  • 停止位:常用1位高电平,标记单帧数据传输结束。

2、三种校验方式详解

  1. N 无校验
    日常调试默认8N1,不额外计算校验位,传输速度最快,绝大多数普通场景使用。

  2. E 偶校验
    统计8位数据里1的总个数,保证总数为偶数;传输结束后接收端重新统计,数量不符代表数据传输出错。

  3. O 奇校验
    统计8位数据里1的总个数,保证总数为奇数;接收端核对数量,不一致判定数据异常。

通信硬性条件

两端设备配置必须一模一样
波特率、数据位、校验方式、停止位,任意一项不匹配,直接乱码。

传输过程

  1. 空闲状态:总线一直高电平

  2. 拉低电平:起始位,通知对方准备接收

  3. 依次发送8位数据

  4. 按需发送校验位

  5. 拉高电平:停止位,结束一帧

五、波特率到底是什么?为什么会乱码?

1、波特率定义

每秒传输多少个二进制位
常用:9600、115200

2、为什么 115200 容易乱码?

  • 波特率由时钟分频计算而来

  • 高速波特率对晶振精度要求极高

  • 晶振微小误差会累积错位 → 乱码

新手、调试、项目稳定优先用 9600

六、USART 三种收发模式(从入门到进阶)

1、轮询模式(新手入门)

CPU 一直死等收发完成

  • 优点:代码简单、好理解

  • 缺点:阻塞程序、极易丢包

  • 适用:仅简单打印调试

2、中断模式(学生项目主流)

有数据再来处理,没事CPU正常跑代码
常用中断:

  • RXNE:收到一个字节

  • IDLE:总线空闲,一整包数据发完

  • ORE:接收溢出报错

标准写法:
中断只搬数据,主循环解析数据
中断里不写延时、不写打印、不写判断。

3、DMA模式(进阶必备)

硬件自动搬运数据,全程不用CPU参与

  • 不卡顿、不丢包、速度最快

  • 适合大批量数据传输、屏幕、高速串口收发

七、串口核心寄存器通俗理解

  • TDR:发送寄存器,写数据进去就自动发

  • RDR:接收寄存器,外部数据存在这里

  • SR状态寄存器:标记各类收发状态与报错,重点三个常用标志位:

  1. TXE:发送寄存器为空。CPU写入1字节数据到TDR后,硬件移出数据时TXE自动置1,代表可以填入下一个待发送字节;轮询发送最常用判断位。

  2. TC:发送完成标志。当前一整帧数据全部移位输出、TX线路回到空闲电平后,TC置1,代表单次字节发送彻底结束。

  3. RXNE:接收寄存器非空。硬件成功接收1帧数据并存入RDR,RXNE立刻置1,是接收中断的触发源头。

  • BRR:波特率寄存器,决定通信速度

  • CR1:配置寄存器,用来开启/关闭奇偶校验、数据位长度等功能

补充简单区分

TXE只管寄存器空不空,TC只管一帧有没有彻底发完;RXNE是收到数据最直观的信号,检测到该标志就要立刻读取RDR,防止数据覆盖溢出。

八、串口所有常见问题 + 完整排错教程

1、能发不能收

  • TX/RX接反

  • RX引脚没开复用

  • 没开接收使能

  • 没开中断

2、全部乱码

  • 波特率不匹配

  • 校验方式、停止位、数据位配置不一致

  • 没共地

  • 3.3V/5V电平混用

  • 115200波特率误差大

3、单字节正常、多字节丢包

  • 用了轮询模式

  • 没有缓冲区

  • 接收速度跟不上

4、一直报 ORE 溢出错误

数据接收太快,CPU读取不及时
解决:加缓冲区、空闲中断、DMA

5、串口助手显示问号、方框

上位机校验、波特率等参数和单片机参数不一致

九、标准学习架构(学生练项目通用)

  1. 开启 RCC 时钟(USART + GPIO)

  2. 配置 GPIO 复用模式

  3. 配置波特率、数据位、校验模式、停止位、收发使能

  4. 配置中断优先级

  5. 中断缓存接收数据

  6. 主循环处理数据逻辑

十、串口使用场景

  • 代码调试打印(无校验8N1)

  • HC05蓝牙、GPS模块(大多无校验)

  • 工业简单通信(会用到奇偶校验)

  • 串口屏、上位机数据交互

十一、面试高频考点总结

  1. 串口异步通信依靠什么同步时序?
    依靠双方提前约定一致的波特率、帧格式,无共用时钟线,依靠起始位校准采样。

  2. TXE 和 TC 的区别?
    TXE代表发送数据寄存器空置,可以写入新字节;TC代表当前整段数据完全移位发送完毕。

  3. 为什么RXNE不及时读取会产生ORE溢出错误?
    新接收的数据会覆盖RDR寄存器内未读取的旧数据,硬件判定接收溢出。

  4. 串口接线为什么TX与RX交叉、GND必须共地?
    TX负责发送、RX负责接收,交叉才能互相收发;共地统一电平参考基准,避免乱码。

  5. 中断接收为什么禁止在中断内部做数据解析、延时、打印?
    中断运行优先级高,耗时操作会拉长中断占用时间,极易造成数据丢包、系统卡顿。

  6. 115200高速波特率更容易乱码的原因?
    对晶振精度敏感,长时间采样误差累积,导致数据采样错位。

  7. 奇偶校验的作用?
    简单校验单字节传输正误,仅能排查少量错误,无法修复数据,工业通信常用。

  8. 轮询、中断、DMA三种模式优缺点与适用场景?
    轮询简单但阻塞CPU;中断平衡性能,日常项目最常用;DMA解放内核,适合高速大批量传输。

结束语

本文完整详细讲解了 STM32 USART 的全部核心知识点,包含通信基础概念、硬件接线、通信原理、帧结构、奇偶校验、波特率、三种收发模式和全套报错排查,非常适合新手系统学习、项目开发和期末复习。

觉得内容对你有帮助的话,点赞 + 收藏,方便以后随时翻看复习!
后续会持续更新 STM32 定时器、ADC、DMA、外设实战教程,欢迎关注!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询