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. UART通信分析实践
UART在波特率为9600bps、数据帧格式为默认8-N-1的情况下:
5.1. 发送"Hello, World!",请写出数据帧。
- "Hello, World!"一共有12个字节,所以一共需要发送12个UART数据帧。
- 根据ASCII码,将字节转成二进制表示:
字符 二进制 H 01001000 e 01100101 l 01101100 l 01101100 o 01101111 , 00101100 W 01010111 o 01101111 r 01110010 l 01101100 d 01100100 ! 00100001 - 数据格式默认8-N-1,所以开始位1位,结束位1位,无校验位。
0010010001 / 0011001011 /
0011011001 / 0011011001 /
0011011111 / 0001011001 /
0010101111 / 0010101111 /
0011100101 / 0011011001 /
0011001001 / 0001000011 / - 注意数据帧之间要有空闲位
5.2. 每秒传输多少个字节?每秒传输多少个比特?
- 1byte = 8bit,但是UART协议中包含开始位和结束位,所以每秒钟传输的字节数 = 9600/10 = 960
- 根据计算出的每秒钟传输的字节数,每秒钟传输的比特数是 960*8 = 7680(即一个byte的传输速率是7680bps)
6. 总结
- UART属于哪种类型的通信方式?
- 请绘制出UART通信的硬件接线图。
- 波特率和比特率之间的区别是什么?
- UART在波特率为9600bps、数据帧格式为默认8-N-1的情况下,发送"Hello, World!",请写出数据帧。
- UART在波特率为9600bps、数据帧格式为默认8-N-1的情况下,每秒传输多少个字节(Byte)?每秒传输多少个比特(bit)?
others
我之前总是UART、串口,两个概念傻傻分不清楚。
严格来说,串口是串行通信接口的简称,所有按位发送和接收的接口都可以被称作是串口。而UART是一种常见的串口协议,其余常见的串口协议包括RS232、RS485等等。
但其实也不用分的那么清楚,在谈论单片机的时候,大家提到串口,双方都会默认就是UART。