UART知识

UART(/ , 通用异步收发器)作为一种串行通信设备 , 是一种双向、串行、异步的通信总线 , 用一根数据接收线(RX)、数据发送线(TX)和地线(GND)就能实现全双工通信 。如下图所示:
使用 UART 进行通信时 , 传输单位为数据帧 。一个完整的数据帧包括数据位 , 起始位、校验位和停止位 , 其中校验位可按需求选择添加或不添加 , 停止位个数可进行配置 。UART 帧格式如下图所示 。
注:UART在没有数据传输时处于空闲态 , 在空闲态TX、RX都处于高电平 , 当TX需要进行数据传输时先发一个起始位(低电平) , RX检测到起始位(低电平)时开始进行数据接收 。UART可以通过设置检验位判断数据传输是否正确 。UART通过停止位判断一个数据(1字节)是否传输完毕 。只有接收到停止位后才能开始下一个数据的传输 。
起始位:使用 UART 传输数据时 , 接收与发送方没有统一的时钟 , 如果发送方直接发送数据 , 接收方不知道什么时候有数据进行传输 , 则在进行数据的接收时有可能会造成数据错误 , 因此需要添加开始数据传输的标志位 。TX 与RX 在没有数据传输的时候处于空闲状态 , 总线均为高电平 。因此在空闲态时 RX线上出现一位低电平 , 说明开始进行数据传输 , RX线在停止位之后或者空闲态时检测到一个低电平  , 则表示进行数据传输 。
数据位:数据位就是需要进行传输的数据 , 数据位的位数是可以根据通信的需求进行编程设置 , 可以设置位5到8位 , 一般设置为8位 , 在进行数据传输之前 , 接收方与发送方需要对数据位数进行统一的定义 , 以免出现数据漏接或多接的情况 。
校验位: 在使用 UART 进行数据传输时可以在数据帧中添加校验位 , 用来判断数据传输是否正确 , UART 采用奇校验或偶校验的方式 , 一般放置在停止位之前 , 如果校验错误 , 则说明数据传输过程中发送错误 , 接收到的数据为无效数据;如果奇偶校验校正确 , 则可以将数据进行接收并且进行进一步的传输 。在接收、发送双方进行数据传输之前需要进行配置工作 , 选择是否在数据帧中添加校验位 。
停止位:停止位处于一个数据帧的最末尾 。在默认的情况下停止位是 1 位的高电平 , 也可以根据使用需求配置为 1.5 位或 2 位 。如果没有在预期的位置接收到停止位 , 则会产生帧错误 。
空闲:UART 总线上没有数据传输时 , 处于空闲状态 。空闲状态下 , UART 接收、发送的 RX、TX 端口的电平状态均为高电平 。

UART知识

文章插图
波特率:由于 UART 通信为异步通信 , 因此发送方与接收方之间不存在同步的时钟线 , 为了保证接收方、发送方能够正确的进行数据传输 , 就要求接收方与发送方定义相同的传输速率 。UART 串口的通信速率使用波特率来表示 ,  波特率越高 , 就表示传输的速率越快 。
UART 一般通过对系统时钟进行计数分频的方式产生相对应的波特率时钟 , 接收器、发送器则根据此时钟进行数据的发送与接收 。在接收数据时 , 为了避免信号毛刺带来的干扰 , 一般会在数据的中间位置进行采样 。
接收器会在 RX 线上检测到下降沿时开始接收数据 , 若仅依靠检测到下降沿就认为该起始位有效 , 在线路上出现毛刺、无效起始位时 , 会接收到无效的数据 , 从而导致传输错误 。在检测到下降沿后 , 在起始位的中间位置进行采样 , 确保该起始位为有效起始位 , 否则将抛弃该起始位 , 继续监测有效起始位 。