UART通信
我们的电脑怎么跟单片机通信呢?
up的视频讲解:
1 UART通信 原理
1.1 单片机常见通信协议
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器
-
USART 是芯片内部的一个外设硬件
-
UART 是USART外设配置的异步模式
-
UART通信时串口通信的一种经典的方式, 所以有时候也直接叫它串口通信

1.2 UART通信模式

-
TX相当于人的嘴巴 用于发出信号
-
RX相当于人的耳朵 用于接收信号
-
TX与RX要交叉连接, 就像对方说话的声音应该是传到对方的耳朵而不是嘴巴
-
当电平标准不一致时,需要加电平转换芯片
Uart是半双工通信: 同一时刻, 双方只有一半的收发功能(即只能发送或接收)
1.2 TTL电平标准
不同单片机设备在通信的时候, 需要提前规定多少伏电压为逻辑1, 多少伏电压为逻辑0, 这就形成了通用的电平标准
-
串口通信最常见电平标准有:TTL、RS‑232、RS‑485
-
TTL 电平全称:Transistor‑Transistor Logic 晶体管->晶体管 逻辑
-
TTL 电平特点: 成本最低,所有 MCU 串口默认都是 TTL
-
3.3V TTL(STM32 等主流)
逻辑 1:≈3.3V逻辑 0:≈0V -
5V TTL(51等)
逻辑 1:+2.4V ~ +5V逻辑 0:0V ~ +0.8V
1.3 波特率
串口通信的速率,串口一般是异步通信,没有时钟线控制,所以需要双方确定一个通信速率(波特率)
-
单位:波特(Baud)意思:每秒传输多少个 码元
-
在 UART / 串口 里,1 个码元 = 1 位(bit)
-
所以, 波特率 = 每秒传输多少位(bit/s)
-
常用波特率:9600 bit/s 115200 bit/s
1.4 数据帧
串口一个数据帧 = 1 起始位 + 8 数据位 + + (1 奇偶校验位) + 1 停止位

-
起始位:标志一个数据帧的开始,固定为低电平。(空闲状态为高电平)
-
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行(数据从低位到高位发送)
-
(校验位):用于数据验证,根据数据位计算得来,串口用的是奇偶校验法(无校验,奇校验,偶校验)
- 奇校验:如果传输的数据是0000 1111 共4个1,是偶数个,那么校验位就需要在补一个1,变成
0000 11111保证1的个数为奇数 - 偶校验:如果传输的数据是0000 1111 共4个1,是奇数个,那么校验位就需要在补一个0,变成
0000 11110保证1的个数为偶数
- 奇校验:如果传输的数据是0000 1111 共4个1,是偶数个,那么校验位就需要在补一个1,变成
-
停止位:用于数据帧间隔,固定为高电平
1.5 USART外设结构

看起来很复杂, 我们把它分成3个部分去看就简单多了
第 1 部分:数据通路
这部分是 USART 的数据收发主干道,负责「CPU ↔ USART ↔ 外部引脚」的数据传输。
-
发送
-
TDRTransmit Data Register(发送数据寄存器):CPU/DMA 将要发送的数据并行写入这里。 -
TSRTransmit Shift register(发送移位寄存器): 把并行数据转成串行比特流,然后一位一位按波特率从 TX 引脚发出去
-
-
接收
-
RSRReceive Shift register(接收移位寄存器): 把串行比特流数据,按波特率采样,拼成完整的字节,再送到RDR -
RDRReceive Data Register(接收数据寄存器):接收移位寄存器拼好的字节,先存在这里,再由CPU/DMA 读取
-
第 2 部分:控制与状态
-
控制
-
CR1Control Register 1 (控制寄存器1): USART 模块使能, 发送 / 接收使能, 数据位宽(8/9 位),奇偶校验使能, 中断使能 -
CR2Control Register 2 (控制寄存器2):帧格式与同步模式控制, STOP:停止位配置(1/2 位) -
CR3Control Register 3 (控制寄存器3):发送 / 接收 DMA 使能, RTS/CTS 硬件流控使能, 红外模式配置, 半双工模式使能
-
-
状态
SRStatus Register(状态寄存器):- 数据写入 TDR →
TXE标志置 1 → 数据自动进入发送移位寄存器 → 按波特率从 TX 引脚发出 - 数据写入 RDR →
RXNE标志置 1 → CPU 读取数据
- 数据写入 TDR →
第 3 部分:波特率
BRRBaud Rate Register(波特率配置寄存器):用来配置波特率的分频系数, 最终生成发送和接收的采样时钟