你是否曾经使用过UART这个术语,却被另一个嵌入式开发工程师纠正说它不是UART而是USART?在某些情况下,这些术语可以互换,但在许多情况下这是错误的。让我们看看什么是USART和UART,并讨论它们的主要区别。
大多数嵌入式工程师都熟悉 UART:通用异步接收器/发送器。它是一种微控制器外设,可将传入和传出的数据字节转换为串行比特流。一个起始位启动串行位流,一个停止位(或两个)完成数据字。UART 还可以选择向流中添加奇偶校验位,以帮助检测在传输过程中是否发生位错误。图 1 显示了工程师期望从通过 UART 传输的数据中看到的标准示例。
图1–UART串行数据
USART代表什么?通用同步/异步接收器/发送器—是一种微控制器外设,嵌入式开发人员可将输入和输出的数据字节转换为串行位流。USART的定义与UART的定义相同,只是在术语中增加了“同步”一词。肯定还有一些更有意义的差异吧?否则,USART只会被称为UART。
还是有区别的——很重要的区别。USART和UART的第一个区别是串行数据的计时方式。UART在微控制器内部产生数据时钟,并通过起始位转换使该时钟与数据流同步。没有与数据相关的输入时钟信号,因此为了正确接收数据流,接收器需要提前知道波特率应该是多少。
另一方面,USART可以设置为在同步模式下运行。在这种模式下,发送外设将产生一个时钟,嵌入式开发人员接收外设可以从数据流中恢复该时钟,而无需事先知道波特率。或者,链路将使用完全独立的线路来传输时钟信号。外部时钟的使用使得USART的数据速率远高于标准UART,最高可达4 Mbps。
USART和UART的第二个主要区别是外设可以支持的协议数量。UART很简单,只提供基本格式中的一些选项,如停止位数和奇偶校验。USART更复杂,可以生成与许多不同标准协议相对应的数据,例如IrDA、LIN、智能卡、RS-485接口的驱动程序使能和Modbus等。USART还具有与UART相同的异步能力,即USART可以产生相同类型的串行数据,如图1所示。
USART和UART外设具有完全不同的功能,在不同的情况下可能有用,因此嵌入式开发人员可能会发现两种外设都集成在一个标准微控制器上。例如,以STM32系列等面向低功耗设计的微控制器为例。STM32器件片内同时具有一个USART和一个UART外设。USART旨在“高”能耗期间完成所有“繁重”的串行通信。当微控制器处于休眠和低功耗模式时,UART外设可以处理低速通信,同时降低功耗。
USART和UART一样吗?从技术上讲,答案是否定的。UART和USART哪个更好?USART通常具有比标准UART更多的功能,并且产生时钟数据的能力允许USART以远超过UART能力的波特率工作。不过,USART确实包含UART的功能,在许多应用中,尽管拥有USART的强大功能,但嵌入式开发人员仍将其作为简单的UART使用,忽略或回避这些强大外设的同步时钟产生功能。难怪这么多人使用这些术语,就好像它们是同义词一样。