CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
UART基础知识
一.UART简介
二.UART通信工作原理
-2.1.UART数据包
-2.2.UART通信数据传输步骤
三.UART编程要点
-3.1.UART初始化函数
-3.2.UART数据发送函数
-3.3.UART数据接收函数
四.UART的优缺点
-4.1.UART的优点
-4.2.UART的缺点
五.UART的典型应用
回到顶部
UART基础知识
一.UART简介
二.UART通信工作原理
-2.1.UART数据包
-2.2.UART通信数据传输步骤
三.UART编程要点
-3.1.UART初始化函数
-3.2.UART数据发送函数
-3.3.UART数据接收函数
四.UART的优缺点
-4.1.UART的优点
-4.2.UART的缺点
五.UART的典型应用
回到顶部
# UART基础知识 ## 一.UART简介
UART:Universal Asynchronous Receiver/Transmitter,通用异步接收器/发送器,是一种常见的通用通信协议,UART是各种计算设备之间通信的常用通信手段,平时所说的串口一般就是指的UART。如下图所示,计算设备1经由UART1发送数据给计算设备2的UART2。 ![](images/2023-09-17-17-19-08-image.png) 在UART通信中,两个UART相互通信。发送UART将计算设备的并行数据转换为串行形式,以串行方式将其发送到接收UART。只需要两根线就可以在两个UART之间传输数据,数据从发送UART的Tx引脚流到接收UART的Rx引脚。 ![](images/2023-09-17-19-47-57-image.png) UART属于异步通信,没有时钟信号,取而代之的是在数据包中添加了起始位和停止位。这些位定义了数据包的开始和结束,因此接收UART知道何时读取这些数据。 当接收UART检测到起始位时,它将以预设波特率的频率读取数据。两个UART必须以相似的波特率工作,发送和接收UART之间的波特率相差最多不能超过10%。 ## 二.UART通信工作原理
### 2.1.UART数据包
发送UART从数据总线获取并行数据后,它会添加一个起始位,一个奇偶校验位(可选)和一个停止位(1位或2位)来组成数据包并从Tx引脚逐位串行输出,接收UART在其Rx引脚上逐位读取数据包。 ![](images/2023-09-17-17-19-08-image.png) UART数据包含有1个起始位,5至9个数据位(取决于UART设置),一个可选的奇偶校验位以及1个或2个停止位。 ![](images/2023-09-17-18-57-15-image.png) **1.起始位** UART数据传输线通常在不传输数据时保持在高电压电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压到低电压转换时,它开始以预设波特率的频率读取数据帧中的位。 **2.数据帧** 数据帧内包含正在传输的实际数据。如果使用奇偶校验位,则数据帧可以是5至8位。如果不使用奇偶校验位,则数据帧可以是5至9位。 **3.校验位** 奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的位数进行计数,并检查总数是偶数还是奇数,是否与数据相匹配。 **4.停止位** 为了向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少持续两位时间。 ### 2.2.UART通信数据传输步骤
UART通信数据传输步骤如下: 1.发送UART从数据总线并行接收数据。 ![](images/2023-09-17-19-47-27-image.png) 2.发送UART将起始位、奇偶校验位(可选)和停止位添加到数据帧。 ![](images/2023-09-17-19-47-01-image.png) 3.整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样: ![](images/2023-09-17-19-46-35-image.png) 4.接收UART丢失数据中的起始位、奇偶校验位和停止位。 ![](images/2023-09-17-19-51-30-image.png) 5.接收UART将串行数据转换为并行数据,并将其传输到接收端的数据总线。 ![](images/2023-09-17-19-53-31-image.png) ## 三.UART编程要点
对UART进行编程,即开发UART驱动。UART驱动通常需要至少三个函数:UART初始化函数、UART数据发送函数与UART数据接收函数。 ### 3.1.UART初始化函数
UART初始化函数用来初始化UART,通常在初始化任务中调用,UART初始化函数的编程要点: 1. UART波特率,常见的波特率有4800、9600、19200、115200等。 2. 数据帧位数,如果使用奇偶校验位,则数据帧可以是5至8位。如果不使用奇偶校验位,则数据帧可以是5至9位。 3. 奇偶校验,可以使用或者不使用奇偶校验。 4. 停止位,停止位可以是1个位或者2个位。 5. 中断使能位,通常UART包含两种中断,发送中断(数据发送完成时产生发送中断)与接收中断(接收到数据时产生接收中断),可以开启或者禁止中断使能位。 ### 3.2.UART数据发送函数
UART数据发送函数用来发送数据,通常在周期性任务中调用,UART数据发送函数的编程要点: 1. 作为发送函数,需要一个参数存放待发送的数据,数据类型可以是uint8(最多发8位数据)或者uint16(可以发9位数据)。 2. 在发送数据之前,首先需要检查上一次的数据是否已经发送完成。如果上一次的发送数据还未发送完成,则需要等待一段时间再检查。如果上一次的数据已经发送完成,则可以往数据寄存器中写入本次待发送的数据。 3. 因为UART的波特率较低,发送比较费时,为了防止函数锁死,通常数据发送函数需要一个超时参数,当等待的时间超过这个参数时,函数返回超时状态。如果在超时参数以内写完数据寄存器,则返回写入成功状态。 4. UART发送函数通常是非阻塞式的,即发送函数写完数据寄存器立刻返回,而不是等待到数据发送完成后再返回,因为UART的波特率较低,发送比较费时。如果需要获取发送状态的话,通常是利用发送中断(数据发送完成时产生发送中断)。 ### 3.3.UART数据接收函数
UART数据接收函数用来接收数据,通常在周期性任务中(或者在接收中断服务函数中)调用,UART数据接收函数的编程要点: 1. 作为接收函数,需要一个参数存放待接收的数据,数据类型可以是uint8(最多收8位数据)或者uint16(可以收9位数据)数组或者指针。 2. 在读取数据寄存器之前,首先需要检查是否接收到数据。如果未接收到数据,则返回未接收到状态。如果接收到数据,则读取数据到参数中并返回接收成功状态。 3. 通常接收函数除了读取数据之外还需要手工清除接收数据标识符。当UART接收新的数据时,会自动置位接收数据标识符。 ## 四.UART的优缺点
任何一种通信方式都有优缺点,UART通信也不例外。 ### 4.1.UART的优点
- UART仅使用两根线,无需时钟信号。 - 具有奇偶校验位以允许进行错误检查。 - UART使用广泛,参考资料丰富。 ### 4.2.UART的缺点
- UART数据帧的大小最大为9位,需要传输9位以上数据时比较繁琐。 - 不支持多个从属系统或多个主系统,有多个通信节点时组网比较麻烦。 ## 五.UART的典型应用
UART的典型应用有: - 传感器,比如一些UART接口的压力传感器、温度传感器、加速度传感器等。 - 执行器,比如一些UART接口的步进电机、直流电机等。 - 计算设备之间通信,计算机与单片机之间可以通过UART通信,计算机与计算机之间也可以通过UART通信,单片机与单片机也可以通过UART通信。