在嵌入式系统和物联网应用中,串口通信是一种非常重要的通信方式。USART(Universal Synchronous Asynchronous Receiver Transmitter)作为其中的一种实现方式,支持同步和异步两种通信模式,具备灵活性和高效性。在这篇上篇文章中,我们将详细讲解USART的工作原理、基本框架、常见通信协议及其应用场景,为后续的深入理解和应用打下基础。

1. 串口通信的概念与基础

串口通信,即串行通信,是通过一位一位地传输数据的方式。与并行通信相比,串行通信只需要一条数据线,适合长距离低成本的数据传输。USART是实现串口通信的一种标准接口,能够处理同步和异步两种模式的数据传输。要理解USART,首先要理解串行通信的基本概念。

1.1 串行通信 vs 并行通信

在串行通信中,数据通过一条数据线逐位传输,这意味着同一时间只能传输一个比特。虽然传输速率较低,但串行通信的优势在于简单的线路设计和较强的抗干扰能力。串行通信通常用于微控制器与外设之间的短距离通信。

并行通信则是同时传输多个比特,需要多条数据线,因此能够在较短时间内传输更多数据。然而,由于并行通信需要精确同步多个数据位,传输线路也更加复杂,并且对于长距离传输,电磁干扰和信号衰减问题会显著增加。

1.2 USART简介

USART是通用同步异步收发器的缩写,它可以进行同步和异步两种方式的通信。异步通信通过波特率(Baud Rate)进行数据传输,同步通信则通过时钟信号来协调数据传输。在现代嵌入式设备中,USART被广泛用于与传感器、无线通信模块及其他外围设备的连接。

1.3 串行通信协议

USART是实现串行通信的物理层接口,基于此可以实现多种通信协议。以下是几种常见的串行通信协议:

  • UART(异步通信协议):UART是基于USART实现的一种异步通信协议,不需要外部时钟信号来同步发送和接收数据,适合简单的点对点通信。
  • SPI(同步串行通信协议):SPI是一种同步通信协议,使用独立的时钟线来同步数据传输,常用于高速数据传输的应用场景,如传感器数据采集和存储器通信。
  • I2C(串行数据通信协议):I2C是一种支持多个设备连接的同步通信协议,具有地址寻址功能,适合多设备通信场景。

2. USART串口通信的基本框架

在USART通信中,数据通过一系列的帧进行传输。每个数据帧都包含起始位、数据位、可选的校验位和停止位。正确理解这些数据帧的结构,是实现可靠数据传输的关键。

2.1 数据帧结构

USART数据帧的结构如下:

  1. 起始位(Start Bit):一个逻辑低电平(0),用于通知接收端数据的开始。
  2. 数据位(Data Bits):实际传输的数据,通常为5到9位,可以根据应用需求进行配置。
  3. 奇偶校验位(Parity Bit, 可选):用于错误检测,通过计算传输数据位的奇偶性来检测是否发生数据传输错误。
  4. 停止位(Stop Bit):标识数据帧的结束,通常为1到2位逻辑高电平(1)。

一个典型的USART异步通信帧结构如图所示:

| 起始位 | 数据位 | 校验位 | 停止位 | | 0 | D0-D7 | P | 1 |

2.2 波特率(Baud Rate)

波特率是指每秒钟传输的比特数,是串口通信中最重要的参数之一。USART通信双方必须使用相同的波特率,以确保数据正确接收和解码。波特率的选择取决于应用场景:较低的波特率适合长距离通信,而较高的波特率则用于高速数据传输。

常见的波特率有:

  • 9600:常用于低速通信设备。
  • 115200:常用于较高速的数据传输,如无线模块与微控制器之间的通信。

计算波特率时,通常使用如下公式(以STM32微控制器为例):

其中,f{PCLK}是外设时钟频率,USARTDIV是波特率分频系数。通过选择合适的分频系数,可以设置不同的波特率。

2.3 USART通信模式

USART可以工作在两种通信模式下:异步模式同步模式

2.3.1 异步模式

异步模式是USART的默认通信模式。在这种模式下,通信双方无需共享时钟信号,而是通过设定相同的波特率来进行同步。异步模式的优势在于线路简单,只需发送(TX)和接收(RX)两条线就可以完成数据通信。

异步模式的典型应用场景包括微控制器与PC之间的串口通信,特别是在调试和数据传输中广泛使用。使用异步模式时,数据帧的起始位和停止位会在接收端用来同步采样时序,从而确保数据的正确传输。

2.3.2 同步模式

在同步模式下,USART通信双方通过一个额外的时钟线(SCK)同步数据传输。这种模式下没有起始位和停止位,因为数据的发送和接收是通过时钟脉冲严格同步的。由于同步传输减少了用于同步的数据开销,因此同步模式传输速率更快,适合高速数据传输的场景。

同步模式的典型应用包括与高速传感器或其他要求高数据吞吐量的外设之间的通信。

3. USART模块的主要配置参数

要使用USART进行通信,必须对其进行一系列配置。这些配置包括波特率设置、数据帧长度、校验位、停止位以及是否使用中断或DMA等。正确的配置可以提高通信效率并避免数据传输错误。

3.1 波特率设置

波特率决定了通信的速率,是USART配置中最为关键的参数之一。不同的应用对波特率的要求不同,通常在低功耗场景下使用较低的波特率以减少电力消耗,而在高速数据传输场景下则使用更高的波特率。

3.1.1 波特率计算

以STM32微控制器为例,波特率的计算方法如下:

  • f{PCLK}是外设时钟频率,通常为微控制器的主时钟频率。
  • USARTDIV是波特率分频系数,决定了最终的波特率。

通过调整USARTDIV的值,可以获得多种波特率,如9600、115200等。波特率的选择通常取决于通信距离、数据量和外设需求。

3.2 数据帧配置

  • 数据位长度:USART支持配置数据位长度,常用的有8位和9位数据位。8位数据位是最常见的配置,适用于大多数通信场景。如果传输的数据量较大,或需要传输高精度的数据,可以使用9位数据位。
  • 校验位:校验位用于数据错误检测。常见的校验方式包括奇校验和偶校验。引入校验位可以有效检测传输过程中的数据错误,适合要求较高的数据传输场景。
  • 停止位:停止位标识数据帧的结束,通常为1位或2位。在数据传输速率较高且信道可靠性较差的情况下,使用2位停止位可以增加传输的稳定性。

3.3 中断与DMA模式

USART可以配置为使用中断或DMA(Direct Memory Access)模式来处理数据的接收和发送。

  • 中断模式:当数据接收或发送完成后,会触发中断。通过中断机制可以避免CPU忙等待,节省处理时间。
  • DMA模式:当需要传输大量数据时,DMA模式可以直接在内存和USART之间传输数据,极大提高了数据传输效率,适合高速数据传输的场景。

 你在使用USART进行嵌入式通信时,遇到过哪些挑战?你认为在同步与异步模式之间,哪一种更适合你的应用场景?

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐