前言:博主在实际的串口通信使用中发现,使用STM32CubeMX进行USART的配置时,发现软件生产代码所使用的相关配置句柄是UART开头(如下图所示),这不禁让我产生疑惑,USART和UART是否有严格的区别和界限呢,亦或是在相同的联系中带有差异呢,因此带着问题去学习了相关理论知识。
从功能特性上看区别:
通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议
通用同步异步收发器(Universal Synchronous/Asynchronous),通常称作USART,是一种串行,可同步可异步,全双工的通信协议
UART(通用异步收发传输器):
-
异步通信: UART通常用于异步串口通信,其中数据通过固定的波特率进行传输,而无需外部时钟信号。
-
简单性: UART通常比USART更简单,因为它不支持同步模式和其他高级特性。
-
通信模式: UART通常只能工作在异步模式下,不支持同步模式。
USART(通用同步/异步收发传输器):
-
同步和异步通信: USART具有UART的所有功能,同时还支持同步通信模式,这意味着数据可以通过外部时钟信号进行同步传输。
-
高级特性: USART相对于UART来说更加灵活,支持更多的功能,例如硬件流控制、多主机通信等。
-
通信模式: USART可以工作在同步或异步模式下,提供了更多的通信选项。
联系:
-
共同点: USART和UART都是用于串口通信的模块,可以实现设备之间的数据传输。
-
使用方式: 在STM32中,USART和UART都可以通过配置寄存器来实现串口通信,而且通常会使用相似的接口和函数来进行初始化和数据传输。
-
硬件资源: 通常情况下,USART和UART会共享相同的硬件资源,例如引脚和时钟资源,因此在使用时需要注意资源的共享情况。
总的来说,UART是USART的一种简化版本,通常用于异步串口通信,而USART除了支持UART的所有功能外,还额外支持同步通信模式和其他高级特性,也就是说USART是UART的加强版。
从硬件方面初步认识UART和USART之后,再从HAL的角度去看这两者的区别:首先解答前言的问题,为什么USART的配置能使用UART的相关句柄呢?在STM32的HAL库中,通常使用UART_InitTypeDef
结构体来配置USART模块的初始化参数。虽然结构体的名为UART_InitTypeDef
,但实际上它用于配置USART模块,因为STM32的HAL库将UART和USART功能整合到了同一个模块中。UART_InitTypeDef
结构体中包含了USART模块的各种配置参数,例如波特率、数据位、停止位、校验位等。通过填充这个结构体并传递给HAL库中的初始化函数,可以对USART模块进行配置。也就是当我们想要把