问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

最常见的嵌入式通信协议—— UART | 深入数据帧格式

创作时间:
作者:
@小白创作中心

最常见的嵌入式通信协议—— UART | 深入数据帧格式

引用
CSDN
1.
https://blog.csdn.net/joker520522/article/details/142465151

UART(通用异步收发传输器)是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。本文将深入探讨UART的基本概念、硬件接线、数据帧格式、波特率等核心知识点,并通过具体的实践案例进行讲解。

1. 什么是UART?

通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。如果对于通信方式的分类不甚明了的话,可以参考一下我的另一篇博文:嵌入式通信协议的前言——通信方式的分类

2. 硬件接线

  • 通信双方TX、RX交叉连接
  • 通信双方共地

3. 数据帧格式

  • 启动位

  • 占1个位长

  • 保持逻辑0电平

  • 有效数据位

  • 可选5、6、7、8、9个位长(通常是8bit)

  • LSB在前,MSB在后,即最低有效位在前

  • 校验位

  • 1位,可选是否有

  • 常见的是奇偶校验位

  • 停止位

  • 可选1、1.5、2个位长

  • 保持逻辑1电平

  • 停止位不仅仅表示传输的结束,也是在提供计算机校正时钟同步的机会,适用于停止位的位数越多,不同时钟的容忍程度越大

  • 空闲位

  • 总线空闲时默认逻辑1电平

4. 波特率

4.1. 波特率和比特率的定义

波特率有一个很重要的相关概念,称为比特率。

  • 比特率:每秒钟传输的比特数,单位 bit/s,bps
  • 波特率:每秒钟传输的码元数,单位 symbol/s,Baud

4.2. 波特率和比特率之间的关系

举一个生活化的例子,如果把通信系统类比到公共交通运输系统,那么比特的概念就是运输的最小单位——人,而码元可以类比为出租车、公交车、火车等等不同的交通运输车辆。波特率可以理解为单位时间内的发车数量,比特率可以理解为单位时间内运输的出行人数

比特率 = 波特率 * log2M,M 表示每个码元承载的信息量( M 也可以认为是进制数)。

二进制系统中,每个码元都存在2种状态,所以波特率数值上等于比特率。

4.3. 波特率的作用

在串口通信中,发送端和接收端需要规定好一个相同的波特率,才能保证通信正常。在描述波特率的作用时,我比较喜欢用打羽毛球来进行比喻。发送端是发球的人,接收端是接球的人,而波特率就是两个打球的人挥拍的频率,如果这两个人的节奏一致,羽毛球就可以很长时间不落地。而如果有快有慢,甲的球刚刚发出去,乙的球拍已经挥完放下了,就很容易出现丢球的情况。

5. 8N1 表示的是什么意思?

  • 8N1:8 表示的是数据位8位,N 表示的是无校验位,1 表示的是1位停止位

除了最常见的 8N1 之外,还有:

  • 7E1:7个数据位,偶校验位,1个停止位
  • 8O2:8个数据位,奇校验位,2个停止位

6. UART 通信分析实践

UART在波特率为9600、数据帧格式为默认 8-N-1 的情况下:

6.1. 发送"Hello, World!",请写出数据帧。

  1. "Hello,World!"一共有12个字节,所以一共需要发送12个UART数据帧。

  2. 根据ASCII码,将字节转成二进制表示:

字符
ASCII码
二进制
H
72
01001000
e
101
01100101
l
108
01101100
l
108
01101100
o
111
01101111
,
44
00101100
W
87
01010111
o
111
01101111
r
114
01110010
l
108
01101100
d
100
01100100
!
33
00100001
  1. 串口通信的数据位通常是 LSB 先发送,这意味着在传输字符的时候,二进制表示的 ASCII 码是从右向左发送的。
字符
二进制
LSB 开始发送
H
01001000
00010010
e
01100101
10100110
l
01101100
00110110
l
01101100
00110110
o
01101111
11110110
,
00101100
00110101
W
01010111
11101010
o
01101111
11110110
r
01110010
01000111
l
01101100
00110110
d
01100100
00100110
!
00100001
10000010
  1. 数据格式默认8-N-1,所以开始位1位,结束位1位,无校验位。S 代表起始位,E 代表停止位:
字符
发送的数据帧格式
H
S 00010010 E
e
S 10100110 E
l
S 00110110 E
l
S 00110110 E
o
S 11110110 E
,
S 00110101 E
W
S 11101010 E
o
S 11110110 E
r
S 01000111 E
l
S 00110110 E
d
S 00100110 E
!
S 10000010 E

6.2. 每秒传输多少个有效字节?每秒传输多少个有效比特?

  1. 1 byte = 8 bit,但是 UART 协议中包含开始位和结束位,所以每秒钟传输的字节数 = 9600/10 = 960
  2. 根据计算出的每秒钟传输的字节数,每秒钟传输的比特数是 960*8 = 7680

7. Review

  1. UART属于哪种类型的通信方式?
  2. 请绘制出UART通信的硬件接线图。
  3. 波特率和比特率之间的区别是什么?
  4. UART在波特率为9600、数据帧格式为默认8-N-1的情况下,发送"Hi",请写出数据帧。(“H” 的 ASCII 值为72, “i” 的 ASCII 值 为105)
  5. UART在波特率为9600、数据帧格式为 7-E-1 的情况下,每秒传输多少个有效字节?每秒传输多少个有效比特?

参考

  1. 超简单的一种通信,2分钟搞懂,串口通讯的工作原理!- B站 - 爱上半导体
  2. 一文搞懂比特率和波特率 - 知乎 - 奔跑的
  3. 串口通信8N1 - CSDN - modi000
  4. UART串口协议详解 - 知乎 - 曾小庆
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号