当前位置:首页 > 技术学院 > 技术前线
[导读]UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种常用的串行通信协议,广泛应用于单片机或各种嵌入式设备之间的通信。

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛使用的异步串行通信协议。它允许数据在发送端和接收端之间通过单根或多根线进行传输,是许多嵌入式系统和计算机与外部设备通信的基础。

UART通信的基本原理相对简单。在UART通信中,数据以位(bit)为单位进行传输,每个位都有一个固定的时间长度,这个时间长度由波特率决定。UART通信通常包括三个主要部分:数据位、起始位和停止位。起始位用于通知接收端数据即将开始传输,数据位是实际要传输的信息,而停止位则用于表示数据已经传输完毕。

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

一、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。


一文讲透UART通信工作原理

当停止位为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收发

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

数据队列(Queue)收发:

这种方式适合大多数单片机,只要有中断就行。使用UART Write发送数据时,数据并不是直接写入到UART发送器,而是放进了一个环形缓冲区中。然后在UART TX发送完毕中断服务函数中读取环形缓冲区并把读到的字节送入UART发送器,然后等待TX发送完毕中断服务函数再次执行时送入下一个字节,直到把环形缓冲区的数据送完为止。环形缓冲区通常有一个标记头和尾的变量,只要头和尾的变量值不相等就说明缓冲区有数据。使用UART Read接收数据时,也不是直接从UART接收器中获取数据,而是从环形缓冲区中获取数据。UART RX收到中断服务函数中把UART接收器收到的字节送进环形缓冲区,单片机执行UART Read时获取到的数据是环形缓冲区的数据,这样可以保证单片机程序不用一直等待UART接收器。这种设计的优点是可以有效地处理实时数据,避免了数据的丢失。但是,如果Queue的大小设置不当,可能会导致数据的溢出。因此,我们需要根据实际的应用场景来合理地设置Queue的大小。

带硬件FIFO的UART收发

很多先进的单片机的UART收发用上了硬件FIFO。没有硬件FIFO的单片机在收发数据时每收发一个字节就要执行一次中断函数,在高波特率通信时单片机会频繁进入中断,从而影响单片机主任务的处理。而硬件FIFO则可以缓解这种矛盾。例如单片机的UART FIFO是16字节,单片机在发送数据时一次最多可以传输16字节数据,等16字节数据发送完毕后才产生UART TX发送完毕中断。接收数据时通常是“半满”中断和“超时”中断,即接收FIFO中的字节数超过8字节,或者接收FIFO不为空但是超过1字节的时间内没有收到新的字节数据,产生一次UART RX接收中断。通常带硬件FIFO的UART会和数据队列的方式相结合使用,在高波特率通信下传输效率更高。

DMA的UART收发

DMA(Direct Memory Access)是一种可以将计算机的某个存储区域直接映射到内存地址空间的技术,从而实现对内存和其他外设的统一访问。当UART接收到数据时,数据会被直接写入到DMA控制的内存区域中,然后触发中断。在中断服务程序中,我们可以从DMA控制的内存区域中取出数据,进行必要的处理,然后再通过UART发送出去。


一文讲透UART通信工作原理

DMA传输

使用DMA进行UART传输对连续多条数据的传输帮助特别大,例如前面提到的UART Read Callback和UART Write Callback回调函数的方式。连续发送多条数据流时,可以把数据流放在单片机的多个不同的缓冲区,然后DMA直接指向缓冲区地址,待DMA传输完毕后产生UART Write Callback,然后在UART Write Callback中把DMA指向下一个缓冲区地址。接收数据时也可以预约一个接收缓冲区,DMA传输的数据传输到该缓冲区,传输满了后产生UART Read Callback再指向下一个接收缓冲区,同时可以让单片机主程序处理已收满数据的缓冲区的内容。

UART协议的应用场景:

UART协议广泛应用于各种设备之间的通信,如计算机与外设(鼠标、键盘、打印机等)、嵌入式系统与传感器、微控制器之间的通信等。由于其简单性和普遍性,UART协议在串行通信中占有重要地位。

总结:

UART协议以其简单、灵活和易于实现的特点,在串行通信领域得到了广泛的应用。尽管在高速数据传输方面可能不如一些同步通信协议,但UART协议在许多低速通信场景中仍然是首选方案。随着技术的发展,UART协议也在不断地进行改进和扩展,以满足现代电子系统的需求。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭