欢迎光临
我们一直在努力

【STM32】 初认识USART串口


   USART 串口详解  

1. 什么是 UART?

        UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器) 是一种把并行数据与串行数据互相转换的硬件外设,也是一套异步串行通信约定。

  • 串行:数据在一根线上一位一位地传,用时间换引脚数量。对比并行总线(8 根数据线同时传),串口只需 TX/RX 两根线,成本低、线缆少、抗干扰相对好。

  • 异步:收发双方没有共享时钟线,各自用自己的时钟,靠事先约定的波特率对齐每一位的时长。

  • 全双工:TX、RX 独立,可同时收发。

  • 点对点:一个发送端对一个接收端(多机需走地址模式或 RS-485 总线)。
  • 物理层 + 数据链路层的混合体:UART 既规定了"电平怎么表示 0/1"(物理层),又规定了"一帧怎么打包"(数据链路层),但没有规定上层协议(帧头、校验、重传要自己做)。

一句话:

        串口 = 把一个字节拆成一位一位,按约定的节奏(波特率)和格式(帧格式)在两根线上送出去、再拼回来。


2. 初步理解 UART 定义

2.1 内部结构

┌────────────── USART 外设 ──────────────┐
CPU 总线 ◄──► │ 发送数据寄存器 TDR(并行,1 字节) │
│ │ 自动搬运 │
│ ▼ │
│ 发送移位寄存器 ──逐位──► TX 引脚 │
│ │
│ RX 引脚 ──逐位──► 接收移位寄存器 │
│ │ 自动拼装 │
│ ▼ │
│ 接收数据寄存器 RDR(并行,1 字节)──► CPU│
│ │
│ 波特率发生器(BRR + 分频) │
│ 控制寄存器 CR1/CR2/CR3 │
│ 状态寄存器 ISR(TXE/TC/RXNE/ORE…) │
└────────────────────────────────────────┘

双缓冲:

        发送/接收各有"数据寄存器 + 移位寄存器"两层。

        数据寄存器对接 CPU(并行),移位寄存器对接引脚(串行)。

        这样在移位输出当前字节的同时,CPU 就能准备下一个字节,效率更高。


2.2 发送一个字节的完整过程(以 0x41 = 'A' 为例)

  • CPU 把 0x41 写入 TDR,硬件立即把它搬到发送移位寄存器,同时置 TXE(TDR 空,可以写下一个)。
  • TX 线上先输出起始位(低电平 1 位)。
  • 依次移出 D0~D7,低位在前(LSB first):1、0、0、0、0、0、1、0。
  • 输出校验位(若配置)、停止位(高电平)。
  • 整帧完全移出后置 TC(传输完成),线回到空闲高电平。

  • 2.3 接收端如何"对准"每一位——过采样

    没有时钟线,接收端靠**过采样(oversampling)**自己对表:

    • STM32 默认 16 倍过采样:一个数据位期间有 16 个采样时钟。
    • 检测到起始位下降沿后开始计时,在每位的第 8、9、10 个采样点(位中心附近)采 3 次,3 选 2 多数表决确定该位。
    • 作用:抗毛刺、抗抖动,并容忍一定波特率误差。

    2.4 通信成立的四个前提

    波特率、数据位数、校验方式、停止位数——收发两端必须完全一致,否则乱码或收不到。


    3. MCU 和串口

    3.1 串口属于 MCU 片上外设

            串口不是软件模拟出来的(虽然也能软件模拟),而是 MCU 芯片内部集成的一块独立硬件(片上外设/IP 核),和 GPIO、定时器、ADC 一样挂在总线上:

    • 独立硬件工作:一旦配置好,移位、采样、帧打包/解包、波特率计时全部由硬件自动完成,不需要 CPU 逐位参与。CPU 只需"写一个字节进去 / 读一个字节出来"。
    • 挂在 APB 总线上:以 STM32 为例,USART1 挂 APB2,USART2/3 等挂 APB1,波特率时钟就来自对应总线时钟(fCK)。
    • 有自己的寄存器组:数据寄存器(TDR/RDR)、波特率寄存器(BRR)、控制寄存器(CR1/CR2/CR3)、状态/中断寄存器(ISR)。
    • 三种工作方式:轮询、中断、DMA(3.4 节展开)。
    • 引脚是复用关系:USART 外设的 TX/RX 信号要通过 GPIO 复用功能(AF) 引到芯片外部引脚上,引脚不配置 AF,外设是"接不到线"的。

    理解这一点很关键:串口通信 = 片上 USART 硬件自动干活,CPU 只负责配置和搬运数据。


    3.2 UART 和 USART

    对比项UARTUSART
    全称 Universal Asynchronous Receiver/Transmitter Universal Synchronous/Asynchronous Receiver/Transmitter
    异步模式 支持 支持(就是 UART 模式)
    同步模式 不支持 支持(多一根 SCLK 时钟线,主机给时钟)
    扩展协议 部分型号支持 LIN、SmartCard、IrDA
    日常用途 异步串口 99% 场景用它的异步模式,即"串口"

            STM32 等芯片标注的都是 USART,因为它是 UART 的"超集";我们说的串口通信,实际用的是 USART 的异步模式。


    3.3 4 方关系

    一次串口通信涉及四个角色,数据必须依次穿过它们,这就是"4 方关系":

    ① CPU 内核 ② USART 外设 ③ GPIO 引脚 ④ 外部设备
    ┌────────┐ 读写寄存器 ┌──────────┐ 内部连线 ┌────────┐ 板级连线 ┌────────┐
    │ 程序 │ ───────────► │ TDR/移位 │ ──────────► │ TX(AF) │ ────────► │ 对方 RX │
    │ 内存 │ │ 寄存器 │ │ RX(AF) │ ◄──────── │ 对方 TX │
    │ │ ◄─────────── │ RDR/移位 │ ◄────────── │ │ │ │
    └────────┘ AHB/APB └──────────┘ 复用功能 └────────┘ TTL电平 └────────┘

    角色职责配置要点
    ① CPU 内核 数据源头/终点,执行收发代码 通过总线读写 TDR/RDR
    ② USART 外设 并串转换、波特率生成、帧打包解包、过采样 开外设时钟、配 BRR/CR 寄存器、使能 TE/RE
    ③ GPIO 引脚 把外设信号引到芯片外部 开 GPIO 时钟、配复用功能 AF、对应引脚号
    ④ 外部设备 通信对端(USB-TTL 模块、另一 MCU、蓝牙/GPS 模块) 接线 TX↔RX、共地、电平匹配

    发送数据流:

            CPU → 总线 → TDR → 发送移位寄存器 → TX 引脚(AF)→ 外部设备 RX。

    接收数据流:

            外部设备 TX → RX 引脚(AF)→ 接收移位寄存器 → RDR → 总线 → CPU。

    为什么要强调 4 方关系:

            初学者常以为"串口就是两根线",实际上数据要穿过 CPU → 外设 → 引脚 → 对端 四层,任何一层没配好都不通——没开外设时钟、没配 AF、没使能 TE/RE、接线错误,现象都是"串口没反应",排查时要逐层定位。


    3.4 MCU 和 USART 设备通信的宏观过程和问题

    宏观发送过程:

            CPU 写 TDR → 硬件自动按帧格式、波特率逐位移出 → 完成置标志。

    宏观接收过程:

            RX 引脚检测到起始位下降沿 → 16 倍过采样收齐一帧 → 数据进 RDR 并置 RXNE → CPU 必须及时读走。


    由此产生几个核心问题,也是工程设计的出发点:

           1. 速度严重不匹配:CPU 是 ns 级,串口是 µs 级(115200 下一字节 86.8µs)。CPU 不能傻等,于是有三种处理方式:

    方式

    做法

    优点缺点适用

    轮询

    while 死等 TXE/RXNE 标志

    简单 阻塞、占满 CPU、易丢数据 数据量极小

    中断

    RXNE/TXE 触发中断,在 ISR 里搬运

    实时、不阻塞主程序 高频中断有开销 常规收发

    DMA

    外设与内存间硬件直搬,CPU 不参与

    几乎零 CPU 占用、最适合连续流 配置稍复杂 高速/大批量

            2. 数据会丢(ORE):RDR 只有一字节缓冲,新字节到了旧字节还没读走 → 过载错误、数据被覆盖。解决:中断/DMA + 软件环形缓冲区(FIFO)。

            3. 不定长数据怎么收:UART 是字节流,没有"包"的概念。常用方案:DMA + IDLE 空闲中断(总线空闲即一包结束,用 DMA 剩余计数差值算包长)、帧头+长度字段、超时判断。

            错误处理:FE(帧错误)、PE(校验错误)、NE(噪声)、ORE(过载),需要在中断里读状态、清标志、丢弃坏帧。

            4. 双端一致性:波特率/帧格式必须一致;电平要匹配(TTL↔RS-232/USB/RS-485 需转换芯片)。

            5. 可靠性要在协议层补:UART 只保证"位"的传输,不保证内容正确,需自定帧头帧尾 + 长度 + CRC + 应答重传


    4. 比特率 vs 波特率

    概念全称定义单位
    比特率 Bit Rate 单位时间内传输的二进制比特总数 bit/s(bps)
    波特率 Baud Rate 单位时间内传输的码元(符号)总数 Baud

    4.1.1 比特率(Bit Rate)

    • 定义:每秒传输的二进制比特(bit)数量,衡量的是信息传输速度
    • 单位:bps(bit per second,比特/秒),也写作 bit/s、b/s。
    • 公式:比特率 = 每秒传输的比特总数。
    • 例子:1 秒传 115200 个 0/1,比特率就是 115200 bps。
    • 关注点:它描述"有效信息传多快",与编码方式无关,只数实际比特。

    4.1.2 波特率(Baud Rate)

    • 定义:每秒信号状态(符号 Symbol)变化的次数,衡量的是信号波形变化速度
    • 单位:Baud(波特)。
    • 符号:一个符号可以是一个电平、一个相位、一个载波状态。
    • 二者关系:

    比特率 = 波特率 × 每个符号携带的比特数
    = 波特率 × log₂(M),M = 符号状态数

    • 二进制 NRZ(普通串口):只有高/低两个状态,M=2,一个符号 = 1 比特,所以:

    115200 Baud = 115200 bps ← 串口场景数值相等

    • 多电平调制(说明二者不等的场景):
    编码状态数每符号比特10000 Baud 时的比特率
    NRZ(串口) 2 1 10 kbps
    QPSK 4 2 20 kbps
    16QAM 16 4 40 kbps
    • 常见误区:
      • "波特率就是比特率"——只在 1 比特/符号时数值相等,概念不同。
      • "115200 波特 = 每秒 115200 字节"——错,8N1 下一字节占 10 位(见第 7 节)。
      • 在通信/射频领域:波特率决定占用带宽,比特率决定实际吞吐。

    5. USART 速度与波特率

    5.1 波特率由时钟分频产生

    USART 没有独立振荡器,波特率来自外设总线时钟 fCK 分频:

    异步、16 倍过采样(OVER8=0):波特率 = fCK / (16 × USARTDIV)
    异步、8 倍过采样(OVER8=1):波特率 = fCK / (8 × USARTDIV)
    同步模式: 波特率 = fCK / (2 × USARTDIV)


    5.2 BRR 寄存器结构

    BRR:[15:4] = DIV_Mantissa(整数部分)
    [ 3:0] = DIV_Fraction(小数部分 × 16)

    USARTDIV = fCK / (16 × 目标波特率)
    Mantissa = USARTDIV 的整数部分
    Fraction = USARTDIV 小数部分 × 16(四舍五入)
    BRR = (Mantissa << 4) | Fraction


    5.3 算例

    例 1:fCK = 72 MHz,目标 115200(精确)

    USARTDIV = 72e6/(16×115200) = 39.0625
    Mantissa = 39,Fraction = 0.0625×16 = 1
    BRR = (39<<4)|1 = 0x271
    实际波特率 = 72e6/(16×39.0625) = 115200 ✅

    例 2:fCK = 8 MHz,目标 9600(有量化误差)

    USARTDIV = 8e6/(16×9600) = 52.0833
    Mantissa = 52,Fraction = 0.0833×16 ≈ 1.33 → 取 1
    实际波特率 = 8e6/(16×52.0625) ≈ 9603.8
    误差 ≈ +0.04% ✅


    5.4 误差分析与常见速率

    • 分频小数位只有 4 位(8 倍过采样时 3 位),必然有量化误差。工程上要求收发两端总误差控制在 ±2%~3% 内;帧越长、连续字节越多,对误差越敏感(详见第 7 节)。
    • 8 倍过采样可在相同时钟下支持更高波特率,但采样次数少、抗噪能力略降。
    波特率8N1 单字节耗时有效吞吐场景
    9600 ≈1.04 ms ≈960 B/s 老设备/长线
    38400 ≈260 µs ≈3.8 KB/s 一般模块
    115200 ≈86.8 µs ≈11.5 KB/s 调试黄金速率
    460800 ≈21.7 µs ≈46 KB/s 高速
    921600 ≈10.9 µs ≈92 KB/s 高速(需高精度时钟)

    5.5 自动波特率检测(ABR)

    部分 MCU 支持自动波特率:接收端根据主机发来的已知特征字节(如 0x7F、0x55)测量边沿间隔,自动算出波特率并写回 BRR,用于主机速率未知或可变的场景。


    6. USART 帧格式

    一帧的完整结构:

    字段长度电平作用
    空闲态 任意长度 高电平 总线无数据时保持,代表线路空闲
    起始位 固定 1 位 低电平 从高到低的跳变,通知接收方 “一帧数据开始”
    数据位 5/6/7/8/9 位 0/1 有效载荷,低位 (LSB) 在前,高位 (MSB) 在后;最常用 8 位(1 字节)
    校验位 0/1 位 0/1 可选,奇校验 / 偶校验,用于检测传输错误
    停止位 0.5/1/1.5/2 位 高电平 表示一帧结束,给接收方准备时间;最常用 1 位

    6.1.1 空闲状态(Idle State)

    • 定义:线上没有数据传输时,保持高电平(逻辑 1)。
    • 为什么是高而不是低:高电平作为"静止基准",起始位用低电平才能产生明确的下降沿;同时持续高电平可让接收端区分"总线空闲"和"一直被拉低(断线/异常)"。
    • IDLE 事件:当总线在收到数据后重新回到一帧以上的高电平,硬件置 IDLE 空闲标志。这是"DMA + IDLE 收不定长数据"的关键——一包数据发完、总线空闲,就触发中断,软件据此判定一包结束。
    • 空闲帧:一整帧时长的高电平,区别于后面的断开帧。

    6.1.2 起始位(Start Bit)

    • 长度:固定 1 位,低电平。
    • 作用:
    • 帧同步起点:从空闲高到起始低的下降沿,通知接收端"一帧开始了",接收端从这一刻开始按波特率计时。
    • 对表:异步通信没有时钟,全靠这个边沿重新对齐,消除累积误差。
    • 防误触发:接收端在下降沿后还要连续多次采样确认确实为低(防止一个毛刺被误判成起始位),确认后才在后续位中心采样。
    • 起始位不携带数据,是纯开销。

    6.1.3 数据位(Data Bits)

    • 长度可配 5~9 位,最常用 8 位(正好一个字节)。
    • 发送顺序:数据 LSB ( Least Significant Bit :最低有效位 ) 最先发送,然后是次低位,依此类推,最后发送 MSB ( Most Significant Bit :最⾼有效位 )。 

    • 每位由接收端在位中心用 16 倍过采样 + 3 次多数表决还原。
    • 字长配置细节(STM32):
      • 无校验 + 8 数据位 → 字长 M 位设 8。
      • 带校验时,校验位占字长中的一位:要发 8 数据 + 1 校验,字长要设成 9(M=1),这是常见配置坑。
      • 9 数据位用于多机地址模式(第 9 位标记地址帧/数据帧)。
    • 数据位是帧里唯一携带有效信息的部分,其余都是开销。

    6.1.4 校验位(Parity Bit)

    • 位置:紧跟数据位之后、停止位之前,1 位,可选。
    • 三种方式:
    方式规则举例(数据 0x41 = 0100 0001,两个 1)
    无校验 None 不发校验位 8N1
    偶校验 Even 数据位+校验位中 1 的个数为偶数 已有 2 个 1(偶),校验位=0
    奇校验 Odd 1 的个数为奇数 已有 2 个 1,校验位=1 凑成 3
    • 接收端重新计算并比对,不符则置 PE(Parity Error)。
    • 局限:
      • 只能检错,不能纠错(不知道哪一位错)。
      • 只能检出奇数个位翻转;偶数个位同时翻转会漏检。
      • 可靠传输仍需上层 CRC/校验和 + 重传。
    • 代价:多 1 位开销(约 10% 时间),所以多数场景用 8N1。

    6.1.5 停止位(Stop Bits)

    • 电平:高电平(回到空闲态)。
    • 长度可配:0.5、1、1.5、2 位,最常用 1 位(8N1);2 位用于部分老式设备。
    • 作用:
    • 标志一帧结束,给接收端整理、准备下一帧的时间。
    • 保证下一帧起始位之前线上一定是高电平,从而下一帧起始位的下降沿一定存在。
    • 帧错误检测:接收端预期停止位时刻采样,如果采到的是低电平(没有正常高电平停止位),判定 FE(Framing Error)——最常见原因是波特率不匹配或干扰。
    • 停止位也是开销:2 位停止比 1 位慢约 10%。

    7. USART 帧格式与波特率(综合)

    7.1 核心公式

    单帧时长 = (1 起始位 + 数据位数 + 校验位 + 停止位数) / 波特率
    有效数据率 = 波特率 × 数据位数 / 每帧总位数


    7.2 算例对照(115200)

    配置帧位数单字节耗时有效数据率
    8N1 10 86.8 µs 92.16 kbps ≈ 11.5 KB/s
    8E1/8O1 11 95.5 µs 83.8 kbps ≈ 10.2 KB/s
    8N2 11 95.5 µs 83.8 kbps ≈ 10.2 KB/s

    115200 波特 ≠ 115200 字节/秒:

            8N1 每字节实际占 10 位,真实上限 115200/10 ≈ 11520 B/s。


    7.3 波特率容差(为什么高速更易乱码)

            收发时钟偏差 δ 沿整帧累积,第 N 位采样点偏移约 N×δ 个位周期,超过约半个位周期就采错:

    单帧理论容忍 ≈ 0.5 / 帧位数
    8N1(10 位)≈ 5%;考虑过采样表决和噪声,工程上取 ±2%~3% 更稳

            帧越长、连续字节越多,误差累积越大;

            低速(9600)比高速(115200+)对晶振误差宽容。

            内部 RC 振荡器温漂大,高速串口建议用外部晶振。


    7.4 工程选型

    • 速率:稳定优先 9600~38400;均衡 115200;高速 460800+(短线、低干扰、高精度时钟)。
    • 帧格式:默认 8N1;需检错用 8E1/8O1;多机用 9 位地址模式或 RS-485。
    • 收发方式:小数据轮询,常规中断 + 环形缓冲,连续大数据 DMA + IDLE。
    • 可靠性:协议层做帧头帧尾 + 长度 + CRC + 应答重传。

    8. 常见错误与排查

    现象可能原因
    完全乱码,全是不可打印字符 ①波特率不匹配;②数据位 / 校验位 / 停止位不一致;③TX/RX 接反
    个别字符错误、丢包 ①波特率误差过大;②没有共地;③电磁干扰;④接收溢出 ORE
    只能发不能收 ①RE 接收使能没开;②RX 引脚配置错误;③波特率误差大
    只能收不能发 ①TE 发送使能没开;②TX 引脚配置错误;③TXE 没等待
    前几个字节正常,后面乱码 接收溢出错误 ORE,CPU 读太慢,新数据覆盖旧数据
    偶发错误,干扰时出错 ①线路太长;②没有屏蔽;③电平不匹配

    9. 面试题库(含解析)

    A. 基础概念

    1. UART 全称和作用?

            通用异步收发器。把并行数据转串行按位发送、把串行数据拼回并行,实现两设备异步串行通信。


    2. UART 和 USART 的区别?

             USART 是同步/异步收发器,比 UART 多同步模式(SCLK 时钟线)及LIN/SmartCard/IrDA 等扩展;日常串口用的是 USART 的异步模式。


    3. 为什么叫异步?没有时钟线怎么同步?

            双方不共享时钟,靠约定波特率 + 起始位下降沿对表,接收端用 16 倍过采样在每位中心采样还原数据。


    4. 串口最少几根线?为什么共地?

             TX、RX、GND 三根(单向可两根)。GND 是电平参考,不共地则双方高低电平基准不一致,会乱码甚至损坏接口。


    5. 串口属于 MCU 的什么?为什么说它是片上外设?

            是集成在芯片内部的独立硬件外设(IP 核),挂在 APB 总线上,配置好后移位、采样、帧打包全部硬件自动完成,CPU 只需读写数据寄存器,不必逐位参与。


    B. 结构与过程

    6. 串口通信的"4 方关系"是什么?

            CPU 内核(数据源/终点)、USART 外设(并串转换+波特率+帧处理)、GPIO 引脚(AF 复用把信号引出)、外部设备(对端)。数据依次穿过四层,任一层配置缺失都不通。


    7. 数据从程序到对方设备经过哪些环节?

            CPU 写 TDR → 发送移位寄存器逐位移出 → TX 引脚(AF)→ 板级连线 → 对方 RX;接收反向。


    8. 轮询、中断、DMA 三种收发方式怎么选?

            数据量极小用轮询(简单但阻塞);

            常规突发用中断(实时但高频中断有开销);

            高速连续流用 DMA(硬件直搬、CPU 零占用,常配 IDLE 中断收不定长)。


    9. 什么是 ORE?怎么避免丢数据?

            过载错误:RDR 里旧字节未读走、新字节又到,旧数据被覆盖。

            避免方法:及时开 RXNE 中断/DMA 取走数据,并用环形缓冲区缓存。


    10. 怎么用串口接收不定长数据包?

            DMA 把字节直搬到内存 + IDLE 空闲中断判定一包结束,用 DMA 剩余计数(CNDTR 前后差值)算出本次实际字节数;也可用帧头+长度字段或超时判断。


    C. 帧格式与原理

    11. 8N1 一帧多少位?由什么组成?

             10 位 = 1 起始位 + 8 数据位 + 无校验 + 1 停止位。


    12. 空闲状态为什么是高电平?

            作为静止基准,使起始位能产生明确下降沿;同时区分"空闲"与"线被持续拉低"的断线/异常状态


    13. 起始位为什么是低电平、几位?

            固定 1 位低电平,用高→低的下降沿标记帧起点并给接收端对表;

            接收端还会连续采样确认,防毛刺误触发


    14. 数据位先发高位还是低位?可配几位?

            低位在前(LSB first);可配 5~9 位,常用 8 位。


    15. 带校验时 STM32 字长怎么配?为什么?

            校验位占用字长一位,8 数据 + 1 校验要把字长设为 9 位(M=1),否则会出现数据错位。


    16. 奇偶校验怎么算?能纠错吗?

            偶校验保证数据+校验中 1 的个数为偶,奇校验为奇。

            只能检错不能纠错,且偶数位同时翻转会漏检;可靠传输靠上层 CRC。


    17. 停止位几位、什么电平、有什么用?

            高电平,可配 0.5/1/1.5/2 位,常用 1 位。

            标志帧结束、给接收端准备时间,并保证下一帧起始位下降沿存在。


    18. FE 帧错误是什么原因?

             预期停止位时刻采到低电平,常见于波特率不匹配或线路干扰。


    D. 波特率与计算

    19. 波特率和比特率的区别?何时相等?

            波特率是每秒符号变化次数(Baud),比特率是每秒比特数(bps),关系为 比特率=波特率×log₂(状态数)。二进制串口 1 符号=1 比特,数值相等;QPSK/QAM 等多电平调制下不等。


    20. BRR 寄存器怎么算?

            举例。 USARTDIV=fCK/(16×波特率),BRR=(整数部分<<4)|(小数部分×16)。72MHz 配 115200:USARTDIV=39.0625,BRR=0x271,实际恰好 115200。


    21. 115200 波特每秒最多传多少字节?

            8N1 每字节 10 位:115200/10≈11520 B/s≈11.5 KB/s,不是 115200 字节。


    22. 波特率误差多少能接受?为什么高速更容易乱码?

            工程上两端总误差控制在 ±2%~3%。

            误差沿帧逐位累积,帧越长、速率越高,采样点越容易偏移到位边界,所以高速更敏感。


    23. 什么是 16 倍过采样?作用?

            每位用 16 个采样时钟,在位中心采 3 次多数表决,抗毛刺抖动、容忍波特率误差;

            8 倍过采样可支持更高速率但抗噪略差。


    E. 综合与工程

    24. TXE 和 TC 的区别?RS-485 为什么用 TC 切方向?

            TXE 表示 TDR 已空(可写下一字节);TC 表示整帧(含停止位)已完全移出。

            RS-485 半双工,必须等数据真正发完才能把 DE 切回接收,所以用 TC。


    25. 3.3V MCU 和 5V MCU 串口能直连吗?

            3.3V 发 5V 收一般可识别但余量小;

            5V 发 3.3V 收可能损坏引脚,应加电平转换芯片、开漏上拉或分压。


    26. 为什么工业现场用 RS-485 而不是 TTL 串口?

            TTL 单端电平易受共模干扰、传不远;

            RS-485 差分传输抗干扰强、可传 1200m+、支持多节点总线。


    27. 串口乱码排查顺序?

             ① 波特率与帧格式两端一致;

            ② TX/RX 是否接反、是否共地;

            ③ 电平是否匹配;

            ④ 外设/GPIO 时钟和 AF 复用是否配置;

            ⑤ 晶振精度与干扰;

            ⑥ 错误标志(FE/PE/ORE)。


    28. UART 本身可靠吗?怎么做可靠传输?

             UART 只保证位传输,不保证内容正确。

            协议层需加帧头帧尾、长度、CRC/校验和、序号、应答与超时重传。


    赞(0)
    未经允许不得转载:171主机测评 » 【STM32】 初认识USART串口
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址