UART(通用异步收发传输器)

UART 是一种用于串行通信的协议,它允许数据通过一条线路(或两条线路:一条用于发送,另一条用于接收)在计算机或其他设备之间传输。它广泛应用于设备之间的通信,如嵌入式系统、传感器、计算机串口、调试端口等。

在 UART 协议中,数据是 串行 传输的,意味着数据不是同时传输的,而是一个比特一个比特地传输。我们通常会设置每个数据帧的格式来确保正确的传输和接收,这就涉及到 开始位、数据位、校验位和结束位

UART 数据帧结构

一个典型的 UART 数据帧的组成如下:

| 开始位 | 数据位 | 校验位 | 结束位 |
1. 开始位(Start Bit)
  • 功能:开始位用来通知接收设备,数据帧即将开始传输。

  • 原理:在串行通信中,数据传输是按比特(bit)顺序发送的。为了确保接收设备知道数据从哪里开始,发送方会在数据帧的最前面发送一个特殊的信号,称为 开始位

  • 特点

    • 开始位通常为 低电平(0),表示数据传输的开始。

    • 数据帧的开始位的作用就是从 高电平(无数据)切换到 低电平,表示数据传输的开始。

    • 由于 UART 是 异步通信,开始位帮助接收方对齐数据帧。

2. 数据位(Data Bits)
  • 功能:数据位是传输的实际数据。它包含了我们想要传送的信息。

  • 原理:数据位是传输的核心内容,每个数据位表示一个二进制数字(0 或 1)。通常,数据位的长度为 5 位、6 位、7 位或 8 位(8 位是最常见的)。

  • 特点

    • 数据位的数量由通信协议或设置决定,常见的是 8 位数据位(即一个字节)。

    • 每个数据位在传输时会按照顺序一个一个地传送给接收方。发送方会逐个发送数据位,从低位到高位。

    例如:假设你要发送的数据是 字母 "A"(ASCII值为 65),它的二进制表示为 01000001。如果使用 8 位数据位来传输,它就分成 8 个数据位来发送。

3. 校验位(Parity Bit)
  • 功能:校验位是为了保证数据在传输过程中的 完整性。它的作用是检测传输中是否发生了错误。

  • 原理

    • 校验位的设置有几种不同的模式,通常是 偶校验奇校验无校验

    • 校验位是通过对数据位的“奇偶性”进行设置来完成的。它帮助接收方检查是否有位被错误地传输。

    几种常见的校验位设置

    • 无校验(None):不使用校验位,纯粹传输数据。

    • 偶校验(Even Parity):使数据中 1 的数量变为 偶数,如果原数据中 1 的数量是奇数,就设置校验位为 1;如果是偶数,则校验位为 0。

    • 奇校验(Odd Parity):使数据中 1 的数量变为 奇数,如果原数据中 1 的数量是偶数,就设置校验位为 1;如果是奇数,则校验位为 0。

    例如:如果发送的数据是 01010100,在偶校验模式下,校验位会检查该数据中 1 的数量(4个),是偶数,因此校验位为 0。如果 1 的数量是奇数,校验位会设为 1。

4. 结束位(Stop Bit)
  • 功能:结束位用来标识数据传输的结束,告知接收设备数据帧已经完成,可以开始处理数据。

  • 原理:结束位帮助接收方识别每一帧数据的结束,并准备接收下一帧数据。它通常是一个 高电平(1) 信号,表示传输完成。

  • 特点

    • 结束位的数量可以是 1 位1.5 位2 位,其中 1 位结束位 是最常见的。

    • 结束位通常设为 高电平(1),如果在数据传输后没有正确的结束位,接收方可能会误认为数据还在传输中。

总结:UART 数据帧组成

一个完整的 UART 数据帧通常是这样的:

| Start Bit | Data Bits | Parity Bit (optional) | Stop Bit(s) |
  • 开始位:标志着数据的开始,通常为 0(低电平)。

  • 数据位:实际的数据内容,通常为 8 位(即 1 字节)。

  • 校验位:用于检测数据传输是否发生错误,可以选择有或没有。

  • 结束位:标志着数据的结束,通常为 1(高电平)。

波特率

计算步骤

  1. 确定每个数据包的位数(Bit per Character)

    • 开始位:1 位

    • 数据位:通常是 8 位

    • 停止位:通常是 1 位

    • 校验位:如果使用校验位,通常是 1 位(如果没有校验位,则为 0 位)

    因此,每个数据包(字符)所需的总位数可以用以下公式表示:

    每字符位数=开始位+数据位+停止位+校验位\text{每字符位数} = \text{开始位} + \text{数据位} + \text{停止位} + \text{校验位}每字符位数=开始位+数据位+停止位+校验位
  2. 计算每秒钟能传输的字节数

    每秒字节数=波特率每字符位数\text{每秒字节数} = \frac{\text{波特率}}{\text{每字符位数}}每秒字节数=每字符位数波特率​

    其中,波特率是每秒钟传输的比特数(bps),每字符位数是每个字符所需要的总位数。

举个例子

假设你使用 115200 波特率8N1 配置(8 数据位,1 开始位,1 停止位,无校验位):

  1. 每字符位数:

    • 开始位:1 位

    • 数据位:8 位

    • 停止位:1 位

    • 校验位:0 位(无校验位)

    每字符位数 = 1 + 8 + 1 + 0 = 10 位

  2. 每秒钟传输的字节数:

    每秒字节数=11520010=11520 字节/秒\text{每秒字节数} = \frac{115200}{10} = 11520 \, \text{字节/秒}每秒字节数=10115200​=11520字节/秒

所以,在 115200 波特率 的情况下,每秒钟能够传输 11520 字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值