当前位置:首页 > 技术学院 > 技术前线

UART,即通用异步接收器/发送器,是最常用的设备间通信协议之一,正确配置后,UART可以配合许多不同类型的涉及发送和接收串行数据的串行协议工作。在串行通信中,数据通过单条线路或导线逐位传输。在双向通信中,我们使用两根导线来进行连续的串行数据传输。根据应用和系统要求,串行通信需要的电路和导线较少,可降低实现成本。

本文将UART用作硬件通信协议应遵循的标准步骤进行说明,讨论使用UART的基本原则,重点是数据包传输、标准帧协议和定制帧协议;定制帧协议将是安全合规性方面的增值特性,尤其是在代码开发期间。在产品开发过程中,本文还将分享一些基本步骤,以检查数据表的实际使用,目标是帮助更好地理解和遵循UART标准,以便最大程度地发挥其能力和应用优势,特别是在开发新产品时。

通信协议

通信协议在组织设备之间的通信时扮演着重要角色。它基于系统要求而以不同方式进行设计。此类协议具有特定的规则,为实现成功通信,不同设备都遵循该规则。

根据定义,UART是一种硬件通信协议,以可配置的速度使用异步串行通信。异步意味着没有时钟信号来同步从发送设备进入接收端的输出位。

嵌入式系统、微控制器和计算机大多将UART作为设备间硬件通信协议的一种形式。在可用通信协议中,UART的发送和接收端仅使用两条线。尽管它是一种广泛使用的硬件通信方法,但它并非在所有时候都是完全优化的。在微控制器内部使用UART模块时,通常会忽略帧协议的适当实现。

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种常用的串行通信协议,广泛应用于单片机或各种嵌入式设备之间的通信。本文将详细介绍UART通信的基本原理、工作模式、波特率计算以及常见使用方式,帮助有一定单片机开发能力的人群更好地理解和应用UART通信。

一、UART通信的异步通信机制

UART通信是一种异步串行通信方式,其基本原理是通过数据线上传输二进制数据位。UART通信系统主要由发送端和接收端两部分组成,它们之间通过数据线进行数据传输。发送端将待发送的数据转换为并行信号,然后通过驱动电路将并行信号转换为串行信号,并通过发送电路将串行信号发送到数据线上。接收端则通过接收电路将数据线上的信号还原为并行信号,再通过解码电路将并行信号转换为原始数据位。

UART通信采用异步通信方式,即发送端和接收端之间通过数据线进行数据传输。在异步通信中,发送端和接收端不需要同时处于激活状态,而是通过起始位和停止位来标识数据帧的开始和结束。具体来说,当发送端产生起始位后,发送一个数据位;然后等待接收端的起始位,如果接收到起始位,则继续发送下一个数据位;如果没有接收到起始位,则认为数据帧传输失败。同样,当接收端产生停止位后,发送一个校验位;然后等待发送端的停止位,如果接收到停止位,则认为数据帧传输成功。

二、UART的波特率

波特率表示单位时间内通过线路传输的二进制数据的位数,通常用bps(bits per second)表示。例如,如果波特率为9600bps,则每秒钟可以传输9600个比特位的数据。

串口传输数据的波特率是单片机的时钟系统来产生的,因此它和单片机的系统时钟存在算式关系。

波特率= (16 * 时钟频率) / (32 * 采样时间) + (1 * 时钟频率) / (32 * 采样时间) - (1 * 时钟频率) / (64 * 采样时间)

其中,采样时间指从上一次起始位到本次起始位之间的时间间隔。例如,如果采样时间为10ns,则波特率为9600bps。

常见的波特率有2400、4800、9600、19200、38400、57600、115200……它们都可是2400的整数倍,因此不同的波特率可以通过分频器来产生。现在的单片机虽然都有着不同的频率,常见的有32MHz、48MHz和144MHz,通常它们都会有一个外部系统时钟为单片机的外围设备提供基础时钟频率(如1MHz),UART产生波特率也是从该时钟产生时钟信号。

需要注意的是,在实际使用中,时钟频率可能会受到一些因素的影响,如晶振漂移、电源噪声等。因此,为了保证数据传输的正确性和可靠性,建议在设计UART通信系统时使用外部晶振或时钟发生器,并对其进行校准和补偿。

三、停止位和奇偶校验

在UART异步通信中,停止位用于表示数据帧的结束。停止位可以是1个或2个比特位。当停止位为1个比特位时,每个数据字节的后面都添加一个额外的时间间隔,以补偿时钟抖动和其他因素引起的误差。例如,如果波特率为9600bps,则每个字节的时间间隔为4ms,因此每个停止位的时间间隔为4ms / 8 = 0.5ms。

当停止位为2个比特位时,每个数据字节的后面都添加两个额外的时间间隔,即每个字节的时间间隔为4ms / (8 + 4) = 0.3125ms。这种模式适用于需要更高精度的数据传输场景。

奇偶校验是一种常用的错误检测方法,可以检测数据传输过程中的错误和丢失。在UART通信中,可以通过设置奇偶校验位来提高数据传输的正确性和可靠性。

需要注意的是,奇偶校验位只能检测数据传输过程中的错误和丢失,而不能保证数据的完整性和正确性。因此,在使用UART通信时,还需要采取其他措施来确保数据传输的正确性和可靠性。

四、UART的轮询收发和中断收发

前面我们讲过,UART通信就是把一个字节的数据拆分成若干bit位,然后一个bit一个bit的发送。当一个字节的数据被送进UART发送器后,这个字节被转换成bit位,UART发送这个字节后还要产生停止位,此时UART发送器已经空闲,可以继续发送下一个字节。通常UART发送器发送完一个字节后会产生一个空闲状态,轮询式发送就是等待这个空闲状态并发送下一个字节。UART接收也是如此,UART接收器收完一个字节并收到停止位信号时,就会向单片机的UART数据寄存器保存刚收到的数据,并产生一个收到标志位,轮询该标志位就可以接收到该字节数据。

但是在单片机系统中经常不止UART收发应用,这时就要用到中断收发。通常单片机的UART收发都有RX收到中断和TX完毕中断。中断发送时,UART发送器是空闲状态,此时往发送器里面写入第一个字节,该字节传输完毕后产生TX完毕中断,在TX完毕中断的服务函数中再填入后续字节并产生下一个中断,最后直到把需要传输的字节都传完为止。中断接收时,UART接收器收到字节后会产生RX收到中断,在RX收到中断服务函数中读取收到的字节,每次中断时都读取收到的字节。

五、带数据缓存的UART收发

在很多单片机系统中,都会提供UART Read和UART Write这样的接口函数。一些高级的单片机甚至还有UART Read Callback和UART Write Callback这样的回调函数来收发数据。通常很多单片机的数据处理能力相对UART通信来说要快得多,因此像采用上述接口函数的单片机系统都使用了数据缓存来辅助UART收发。常见的UART收发方式有这几种:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

机器人的寻路系统基于A*算法,该算法能有效地计算出有障碍物环境中的最优路径。该系统实现为分布式架构,其中计算密集型寻路运行在机器人的树莓派4上,而机器人的TI板执行计算路径。

关键字: 机器人 树莓派4 串行通信

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)通信协议是嵌入式系统中广泛应用的通信协议之一。它以其简单、可靠和灵活的特性,成为连接微控制器、传感器、...

关键字: 嵌入式系统 UART 通信协议

在嵌入式开发领域,UART、I2C、SPI等接口技术被广泛使用,它们为微控制器与外部设备之间的通信提供了高效、可靠的途径。本文将详细介绍这三种常用的外设接口。

关键字: UART I2C

在现代嵌入式系统开发中,串行通信协议扮演着至关重要的角色。其中,UART(通用异步收发传输器)、I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)...

关键字: UART I2C SPI 串行总线

串口全称是串行接口(Serial Interface),串口通讯指仅用一对传输线就能将数据以比特位进行传输的一种通讯方式。尽管串口通讯必按字节传输的并行通信慢,但是串口可以在仅用两根线的情况下完成数据传输,大大降低了成本...

关键字: 串口 UART

在高速串行通信中,集成误码率测试仪(Integrated Bit Error Ratio Tester,简称IBERT)是Xilinx提供的一款用于测试transceiver的免费IP。IBERT的example des...

关键字: IBERT 串行通信

在嵌入式系统的开发过程中,调试是至关重要的一环。调试工具的选择直接影响到开发效率、系统稳定性以及后期的维护成本。在众多通信协议中,UART(通用异步收发传输器)因其简单性、灵活性以及广泛的工具支持,成为嵌入式调试中的首选...

关键字: 嵌入式 UART SPI I2C

在现代工业控制系统和汽车电子领域,CAN(Controller Area Network)总线作为一种高效、可靠的串行通信协议,得到了广泛的应用。CAN总线通过广播的方式发送报文,每个节点都可以接收到总线上的所有信息,但...

关键字: CAN总线 串行通信 节点

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种常用的串行通信协议,广泛应用于单片机或各种嵌入式设备之间的通信。

关键字: UART DMA

随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能愈来愈显得重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换。

关键字: 单片机系统 UART
关闭