跳至主要內容

UART

约 1550 字大约 5 分钟

UART

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛使用的串行通信协议,用于设备之间的异步串行通信。它是计算机硬件的一部分,负责在串行通信中实现数据的异步传输。

UART的工作原理

UART通信依赖于两个独立的硬件设备:发送器(Transmitter)和接收器(Receiver)。数据在发送器和接收器之间以串行方式传输,即一次发送一个位。UART通信不需要时钟信号来同步发送和接收双方,因此被称为异步通信。每一端的UART将其内部时钟分频以匹配预定的波特率(数据传输速率),确保数据正确同步。

主要特点

  • 异步通信:不需要发送和接收设备之间的时钟同步信号。
  • 可配置的波特率:用户可以设置特定的波特率,以匹配通信设备的速率要求。
  • 数据帧结构:每个数据包含起始位、数据位、可选的奇偶校验位和停止位。
  • 简单且成本低:由于硬件实现简单,UART是许多微控制器和通信设备的首选通信协议。

UART数据帧结构

一个标准的UART数据帧可能包括以下部分:

  1. 起始位:一般为一个逻辑0,用于标示一帧数据的开始。
  2. 数据位:通常是5到9位,承载实际的数据信息。
  3. 奇偶校验位(可选):用于错误检测。
  4. 停止位:一到两位逻辑1,标示一帧数据的结束。

应用场景

UART广泛应用于微控制器、传感器、计算机、通信设备等电子设备之间的低速串行数据传输。例如:

  • 微控制器和GPS模块通信
  • 传感器数据读取
  • 电脑与各种外设(如打印机、摄像头)的数据传输
  • 两个微控制器之间的简单通信

两个设备如何连接UART接口

连接两个设备的UART接口进行通信是一种常见的低成本、高效率的方法,尤其适用于微控制器、传感器和其他嵌入式设备之间的数据交换。以下是实现两个设备之间UART连接的基本步骤和要点。

硬件连接

要通过UART连接两个设备,你需要确保它们的TX(发送)和RX(接收)引脚正确相连,并且共享同一个地(GND)引脚。连接方式如下:

  1. 设备A的TX(发送)引脚连接到设备B的RX(接收)引脚。
  2. 设备B的TX(发送)引脚连接到设备A的RX(接收)引脚。
  3. 两个设备的GND(地)引脚相连。

这样的连接确保了一个设备发送的数据可以被另一个设备接收,反之亦然。

配置UART参数

在软件上,两个设备的UART接口需要被配置为相同的通信参数,这包括:

  • 波特率:两个设备通信的速率,必须匹配。常见的波特率有9600、19200、38400、57600和115200等。
  • 数据位:一般为8位,是每次传输的数据的位数。
  • 停止位:通常是1位或2位,标示每次传输结束。
  • 奇偶校验:用于错误检测,可以是奇校验、偶校验或无校验(最常用)。

实现数据通信

一旦硬件连接正确且UART参数配置一致,两个设备就可以开始通信了。数据的发送和接收可以通过各自设备的UART库函数或直接操作寄存器来实现。大多数微控制器和计算平台都提供了UART通信的高级API,简化了编程过程。

  • 发送数据:设备A通过其UART接口发送数据,数据通过TX引脚传出。
  • 接收数据:设备B通过其RX引脚接收来自设备A的数据,并通过自己的UART接口处理接收到的数据。

示例代码

假设你正在使用两个Arduino微控制器进行UART通信,以下是一个简单的示例代码:

设备A(发送方)代码:

void setup() {
  // 初始化串口通信,设置波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 发送一条消息到设备B
  Serial.println("Hello from Device A");
  delay(1000); // 等待1秒
}

设备B(接收方)代码:

void setup() {
  // 初始化串口通信,设置波特率为9600
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    // 读取并显示从设备A接收到的消息
    String receivedMessage = Serial.readString();
    Serial.print("Received: ");
    Serial.println(receivedMessage);
  }
}

注意事项

  • 确保共地:两个设备的地(GND)必须相连,这是成功通信的关键。
  • 匹配通信参数:波特率、数据位、停止位和奇偶校验位必须完全匹配。
  • 考虑电平差异:如果两个设备工作在不同的电压水平上,可能需要使用电平转换器以避免硬件损坏。

通过遵循以上步骤和注意事项,你可以成功地在两个设备之间建立UART通信连接,实现数据的双向传输。这种方式对于简单的设备对设备通信场景来说既经济又有效。

使用UART的优点

  • 简单性:UART的硬件和协议简单,容易实现和集成。
  • 低成本:不需要复杂的硬件支持,降低了系统总成本。
  • 广泛支持:大多数微控制器和许多其他类型的通信硬件都内置了UART支持。
  • 灵活性:波特率和数据格式的可配置性使得UART可以用于多种不同的应用场景。

总结

UART是一个简单、成本低廉且广泛使用的串行通信协议,适用于各种低速数据传输需求。它的异步通信方式、简单的数据帧结构和广泛的设备支持使其成为电子项目和产品中不可或缺的通信方式之一。在设计和实现串行通信系统时,理解UART的工作原理和特性是非常重要的。