【嵌入式原理系列-第八篇】USART从原理到配置全解析
目录
一.通信领域基础知识介绍
1.1 串行和并行通信
1.2 同步和异步传输
1.3 串口和COM口
1.4 通信协议标准以及物理层定义
1.5 物理层协议之TTL / RS-232 / RS-485
二.USART介绍
2.1 USART特点介绍
2.2 UART和TTL / RS-232 / RS-485
2.3 USART硬线流控介绍
2.4 USART帧格式介绍
2.5 USART对比其他总线
三.USART工程配置及使用
3.1 USART数据传输方式配置说明
3.2 USART中断配置配置说明
3.2.1 USART常用中断
3.2.2 USART中断配置实战说明
3.2.3 DMA常用中断
3.2.4 DMA中断配置实战说明
四.USART异步模式同步机制介绍
一.通信领域基础知识介绍
介绍USART之前,我们需要先了解一些通信协议领域的通用知识。
1.1 串行和并行通信
- 串行:串行接口的基本传输单位是1位,即每次只能传输一个bit,通过协议组合成帧进行传输
- 并行:一次性可以传输多个位,理论上每个位需要一条独立线束
1.2 同步和异步传输
Synchronous / Asynchronous 同步/异步,通信层面的异步/同步概念与软件层面不同:
- 软件层面:
- 同步处理:同步调用意味着调用方主动等待并立即获得结果。
- 异步处理:异步调用意味着调用方发起请求后立即返回,结果通过事件、回调或轮询等方式在后续通知。
- 通信层面:
- 同步通信:通信双方使用同一根时钟线来控制通信,理论上有时钟线的情况下双方的节奏是一致的,因此称为同步。
- 异步通信:双方互相不知道对方时钟频率,通过一些设计来规避双方的时钟不一致问题。
1.3 串口和COM口
- 串口(Serial Port):通用称呼,是一个广义概念,严格来说所以串行通道都可以称之为串口,包括USB。但是在嵌入式MCU领域,一般说起串口都是默认指的USART的异步模式。
- COM:COM代表计算机中的逻辑串口设备名称(如COM1, COM2),是电脑对串口的抽象。电脑上的COM口一般就是通过USART实现的。
1.4 通信协议标准以及物理层定义
按照目前国际标准,一般将通信协议划分为5层(实际上广泛使用的标准)或者7层(ISO推荐)协议。按照从底层到上层分为:
- 物理层
- 数据链路层
- 传输层
- 网络层
- 会话层
- 表示层
- 应用层
其中物理层定义了以下内容:
特性类别 | 定义说明 |
---|---|
过程特性 | 比特在时间轴上的传输方式,如同步/异步、采样点、位时序 |
硬件特性 | 接口芯片、收发器、电路驱动能力、端口数量 |
机械特性 | 物理连接器、针脚排列、接口规格 |
电气特性 | 电压电平范围、电流驱动、抗干扰能力、差分/单端方式 |
功能特性 | 通道容量、点对点/多点拓扑、误码率、最大距离 |
1.5 物理层协议之TTL / RS-232 / RS-485
这三者都是物理层定义,规定了通信物理层定义
概念 | 简要说明 | 电气特性 |
---|---|---|
TTL(Transistor-Transistor Logic) | 原生电平 | 逻辑1:3.3V 或 5V,逻辑0为:0V。 |
RS232 | 电压转换 | 逻辑1:-3V 到 -15V,逻辑0:+3V 到 +15V。 |
RS485 | 电压转换+差分电平 | 逻辑 1:B线电压比A线电压高,典型差值 >+200mV。 逻辑 0:A线电压比B线电压高,典型差值 >+200mV。 其共模电压范围通常为 -7V 到 +12V |
二.USART介绍
2.1 USART特点介绍
USART(即Universal Synchronous / Asynchronous Receiver/Transmitter,通用同步/异步收发器),其特性如下:
- 串行通信
- 同步/异步传输:支持同步传输(USART同步模式),以及异步传输(USART异步模式)
- 物理层以及数据链路层协议:只负责数据的转发,不涉及应用逻辑。其物理层定义不完整,因此需要搭配其他物理层协议使用,如TTL、RS-232、RS-485
- 线束数量不固定,可选搭配如下:
- Tx/Rx:数据传输线
- GND:当通信双方不直接公地,一般需要增加GND线作为参考电平以保持通信稳定性
- CTS/RTS:流控线,可选非标准协议定义内容,用于控制通信双方的传输,防止数据溢出或丢失
- CLK:USART可使用同步模式进行通信,此时需要额外的时钟线
注意!!
USART的硬线流控CTS/RTC以及USART的同步传输模式,在实际项目中很少使用,因为这两者都会增加线束的数量、传输协议的复杂度。而USART最大的优点就是协议的简单以及线束数量少(最少只需要两根)。
2.2 UART和TTL / RS-232 / RS-485
USART的物理层定义并不完全,如下:
特性类别 | USART 覆盖情况 | 缺失说明 |
---|---|---|
过程特性 | 完整 | 无缺失,USART 定义了起始位、数据位、校验位、停止位,但功能简单 |
硬件特性 | 缺失 | USART 本身不定义具体硬件,需依赖 TTL/RS232/RS485 芯片 |
机械特性 | 缺失 | USART 不定义连接器规格,实际由外部标准决定 |
电气特性 | 缺失 | USART 不规定电平和驱动能力,需要 TTL/RS232/RS485 补充 |
功能特性 | 部分缺失 | USART 默认点对点,最大速率/距离未标准化,误码检测只有奇偶校 |
因此实际使用过中必须搭配一个物理层协议使用,常用搭配如下:
概念 | 简要说明 | 电气特性 | 与USART的关系 |
---|---|---|---|
TTL(Transistor-Transistor Logic) | 原生电平 | 逻辑1:3.3V 或 5V,逻辑0为:0V。 | MCU内部USART外设输出的就是TTL电平。 优点:无需电平转换芯片,硬件成本低 缺点:抗干扰能力和传输距离比RS 232和RS 485差。 |
RS232 | 电压转换 | 逻辑1:-3V 到 -15V,逻辑0:+3V 到 +15V。 | 用于USART通信时,将原生TTL电平进行了电压转换。 优点:RS 232的电压范围更广,抗干扰更强。 缺点:需要额外的电平转换芯片,增加了硬件成本。 |
RS485 | 电压转换+差分电平 | 逻辑1:-3V 到 -15V,逻辑0:+3V 到 +15V。 | 用于USART通信时,将原生TTL电平进行了电压转换,并变成了差分电平。 优点:因为使用差分电平,抗干扰能力极强,且传输距离得到大大提升。支持多点通信。 缺点:需要额外的电平转换芯片以及线束,且在车载电子领域和CAN定位重合且竞争 |
注意:
在汽车电子领域,RS-485的生态位主要被CAN占据,其出场率较低。
2.3 USART硬线流控介绍
由于USART协议
CTS(Clear To Send)和RTS(Require To Send),不属于标准USART规定内容。本质上是通过硬线指示来完成流控效果,示意如下:
设备1 | 设备2 | 说明 |
---|---|---|
RTS(发) | CTS(收) | 当设备2收到设备1的RTS通知(一般是高电平到低电平跳变)时,代表设备1准备好接收数据了,设备2此时可以发送数据 |
CTS(收) | RTS(发) | 当设备1收到设备2的RTS通知(一般是高电平到低电平跳变)时,代表设备2准备好接收数据了,设备1此时可以发送数据 |
2.4 USART帧格式介绍
参数 | 说明 |
---|---|
开始位 | 1 bit,当USART数据传输线不传输数据时,它通常保持在高电压电平。为了开始数据传输,发送方将传输线从高电平拉至低电平一个时钟周期。当接收USART检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。 |
数据位 (Data Bits) | 8bit 或 9bit,定义一帧有效数据,数据位包含要传输的实际数据。在通常情况下,数据首先以最低有效位发送,并且长度使用8位。 |
停止位 (Stop Bits) | 1至2bit,为了通知传输数据包的结束,USART发送端会将数据传输线驱动至高电压至少1到2位持续时间。 |
校验位 (Parity) | 1bit,可选,保证数据完整性。奇偶校验位是接收USART在传输过程中判断是否有任何数据发生变化的一种方法。电磁辐射、不匹配的波特率或长距离传输时,数据都有可能发生变化。接收USART读取数据帧后,它会计算值为1的位数,并检查总数是偶数还是奇数。如果奇偶校验位为0(偶校验),则数据帧中的1位应总计为偶数。如果奇偶校验位是1(奇校验),则数据帧中的1位应总计为奇数。当奇偶校验位与数据匹配时,USART知道传输没有错误。 |
2.5 USART对比其他总线
总线 | 使用场景 | 通信距离 | 线束数量 | 通信方向 | 通信单 元数量 | 同步& 异步 |
---|---|---|---|---|---|---|
USART | 微控制和外部设备、模块之间、调试接口 | 建议小于1.5m | Tx+Rx+GND(可选) | 全双工 | 1 对 1 | 异步 |
SPI(Serial Peripheral Interface) | 主要用于嵌入式系统内主芯片与外围芯片之间的短距离、高速通信 | 建议小于3m | CS:片选线,选择和那个从模块通信; MOSI:主模块给从模块发送数据 MISO:从模块给主模块发送数据 CLK:时钟线 | 全双工 | 1(主)对N(从) | 同步 |
IIC(Inter-Integrated Circuit) | 适用于连接微控制器和各种外部设备,如温度传感器、EEPROM、实时时钟等,使用两根线进行双向通信。 | 建议小于3m | 数据传输线+CLK | 半双工 | N(多主)对N(多从) | 同步 |
LIN(Local Interconnect Network) | 主要用于汽车电子系统中的低速通信,如车门控制、座椅控制等。 | 理论可达40m | Tx/Rx(共用一根) + GND(可选) | 半双工 | 1(主)对N(从) | 异步 |
CAN(Controller Area Network) | 广泛用于汽车、工业控制和其他分布式系统中,具备高可靠性和抗干扰能力,支持多个设备在同一总线上通信。 | 理论可达40m | CAN_H+CAN_L | 半双工 | N对N (不分主从) | 异步 |
注意:
- 传输速率一般来讲:SPI>IIC>USART>CAN>LIN。
- SPI/IIC一般多用于片上通信,USART多用于片上通信及调试接口,CAN/LIN用于车辆间ECU远距离通信。
- USART 更偏向点对点、调试和简单设备通信,其通信距离(短)和稳定性(稍显不足)使得它的竞争对手主要是SPI和IIC。
三.USART工程配置及使用
3.1 USART数据传输方式配置说明
属性 | 说明 |
---|---|
波特率 | 波特率配置一般由多个寄存器来对时钟进行分频,已达到更精准的频率控制。比如如下形式: 波特率 = 所选定外设时钟频率 / (波特率整数部分 + (波特率小数分子部分) / 波特率小数分母部分) 具体配置形式不固定,只需要记住可能存在多个参数配置来控制精度就行,本质上都是外设时钟 / 预分频值。 |
停止位 | 需要指定停止位的长度,可选范围是1bit / 1.5bit / 2bit,部分芯片可能不支持1.5bit模式 |
数据位定义 | 需要定义数据位是8位还是9位,如果是9位还需要指定第9位的含义。不同芯片对于第9位的支持情况不一样,这里按照最大组合情况介绍
|
传输次序(接收/发送) | 选择大小端模式,即接收/发送时是高Bit位(MSB)还是低Bit位(LSB) |
传输模式 | 选择同步还是异步传输。
|
时钟极性 | 选择数据在时钟上升沿还是下降沿同步(全双工异步模式不需要此配置)。 |
传输方向 | 选择传输方向,可以配置仅收或者仅发 |
USART通道 | 一般外设提供不止一组USART硬件通道,需要选择使用哪一个硬件通道 |
时钟源选择 | 选择USART的时钟源,为USART通信提供时钟参考基准,以满足波特率要求 |
传输类型 |
|
硬件流控 | 是否支持硬件流控,可以配置只支持CTS或者RTS,即单向流控 |
硬件FIFO模式 | 是否启用硬件FIFO,并配置深度 |
3.2 USART中断配置配置说明
3.2.1 USART常用中断
信号 | 意义 | 触发条件 | 说明 |
---|---|---|---|
RXNE/RDR | 接收到新数据 | RX 寄存器中有未读取字节 | CPU读取数据寄存器,防止覆盖。DMA场景不需要。 |
TXE | 发送数据寄存器空 | TX 寄存器空,可以写入新的待发送数据(前面数据不一定发送完成) | CPU 写入下一个字节,DMA场景不需要 |
TC/TFE | 发送完成 | 前面一帧数据发送完成 | 标记发送结束,释放缓冲区 |
IDLE | 总线空闲 | 接收线空闲一段时间(通常是一帧位时间) | 标记帧结束或数据终止 |
ORE | 接收溢出 | RX 寄存器未及时读取 | 错误处理 |
NE | 噪声错误 | 总线噪声导致接收错误 | 错误处理 |
FE | 帧错误 | 停止位或字节长度错误 | 错误处理 |
PE | 奇偶校验错误 | 奇偶位不匹配 | 错误处理 |
3.2.2 USART中断配置实战说明
传输类型 | TXE | TC | IDLE | RXNE |
---|---|---|---|---|
RS-485半双工 + DMA | 不使用,DMA直接判断数据 | 必须使用,用于通知CPU判断是否要切换传输方向 | 必须使用 | 一般不需要,方向切换一般靠TC进行。 |
RS-485半双工 + 非DMA | 推荐使用,通知CPU填充发送数据(理论上TXE会比TC触发早,会更快一些)。 | 必须使用,用于通知CPU判断是否要切换传输方向 | 必须使用 | 推荐使用,用于判断是否需要切换方向 |
普通传输 + DMA | 不使用,DMA直接判断数据 | 必须使用,TC在此模式下不再是字节级别通知,而是传输单位的通知。这个"传输单元"取决于字长、传输计数、循环/块模式、DMA FIFO配置。 | 必须使用 | 一般不需要,数据搬运由DMA进行 |
普通传输+ 非DMA | 推荐使用,通知CPU填充发送数据(理论上TXE会比TC触发早,会更快一些)。 | 不使用,使用TXE发送数据更快 | 必须使用 | 必须使用,因为没有DMA,需要CPU自行处理数据 |
3.2.3 DMA常用中断
中断名称 | 触发条件 | 典型用途 |
---|---|---|
Transfer Complete | DMA 完成搬运 | CPU 处理已搬运完成数据或继续下一块搬运 |
Half Transfer | DMA 完成缓冲区一半 | CPU 提前处理一半数据,保持 RX 连续或平滑 TX 输出 |
Transfer Error | DMA 地址错误、FIFO 溢出、配置错误 | 错误处理 |
3.2.4 DMA中断配置实战说明
- USART错误类型中断依实际项目情况选择是否使能:ORE、NE、FE、PE
- 推荐基于DMA传输:对于高速或大数据量传输,强烈推荐使用DMA以减轻CPU负担(当不使用DMA时,MCU只有1~2个停止位的反应时间)并降低数据丢失风险。对于低速简单应用,可根据情况选择中断或轮询方式。
- USART中断配置建议:
- USART发送端:
- DMA传输完成中断
- 半传输中断(可选,用于连续大数据流平滑发送)
- USART接收端:
- 理论最优(实现复杂,设计不过关容易出问题,比如中断嵌套):
- 半传输中断(防止数据溢出,给CPU预留处理时间)
- 传输完成中断(通知CPU全部处理完成)
- USART IDLE中断(用于检测帧结束或总线空闲,防止数据量不够触发半传输中断)。
- 项目中常用(实现简单,绝大部分场景够用):
- 仅仅使用IDLE中断,不使用DMA全传输和半传输中断。
- 理论最优(实现复杂,设计不过关容易出问题,比如中断嵌套):
- USART发送端:
DMA详细介绍点此:【嵌入式原理系列-第七篇】DMA:从原理到配置全解析
四.USART异步模式同步机制介绍
在异步模式下,USART总线空闲时默认高电平。
发送方准备发送数据时(假设数据位为8位,不无奇偶校验位),会将总线电平拉低一个位时间,称为起始位,起始位之后开始进行数据位的传输,传输位传输完成后,最后再将总线拉高一个位时间称之为结束位。
每次起始位接收方会进行一次位同步,保证双方时序一致。通常USART异步模式下,采样点位于位中间,即0.5个bit处。
结合以上逻辑,可知异步模式下双发双方的速率可以有差距,但是必须保证速率差距在一定范围内。范围计算如下:
- 如果发送方速率大于接收方速率:1 <= (发送方速率÷接收方速率)<= (11÷10.5)。即发送方速率不能比接收方快4.76%以上
- 如果发送方速率大于接收方速率:(10÷10.5) <= (发送方速率÷接收方速率)<= 1。即发送方速率不能比接收方慢4.76%以上
总结,8位数据位+1位停止位+无校验位情况下,双方速率差应该小于4.76%。其他帧格式组合算法类似。
想了解更多嵌入式技术知识,请点击阅读我的其他文章
烟花的文章链接集合-CSDN博客
如果你觉得内容对您有帮助,别忘了点赞、收藏和分享支持下哦