电子说
- 前言 -
开发中经常用到串口通讯,串即串行,顾名思义,是指数据在一根数据线上按照二进制的数位,从低到高位一位一位的传输。单片机中的串口有UART,USART。
UART/USART 在许多 DIY 电子项目中用于将 GPS 模块、蓝牙模块、 RFID 读卡器模块等连接到Raspberry Pi、Arduino 或其他微控制器。
- UART -
UART介绍:
我们今天要介绍的UART,全称Universal Asynchronous
Receiver/Transmitter,通用异步收发传输器。使用TTL电平信号,和电脑的COM口(遵循RS-232)不同。它们之间不能直接通讯,需要在之间加入转换器(如MAX232)。
Tips:
采用二进制来表示数据时:
TTL(晶体管-晶体管逻辑电平)电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。
RS-232规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V
UART工作原理:
和其它串口一样,数据按照二进制从低位到高位一位一位的传输,能将要传输的数据在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。例如要传输一个字节的数据10001110,它是从低位0开始,一位一位的传输过去。
在 UART 通信中,两个 UART 直接相互通信。发送端将来自控制设备(如 CPU)的并行数据转换为串行形式,接着将其串行传输到接收端,然后接收端将串行数据转换回并行数据以供接收设备使用。
数据从一个UART的发送引脚(Tx) 流向另一个UART的接收(Rx) 引脚:
UART通讯分类:
单工:UART只用Tx或Rx其中一根线进行通讯,也就是只作接收或发送;
半双工:UART在同一时间,只用作发送或接收;
全双工:UART在发送的同时,也可以接收;
UART波特率:
UART的波特率是指每秒传输的二进制位数(单位bps),比如9600bps,意思就是每秒钟可以传输9600个位(bit)。
例如:设字符传输的速率为120字符/秒,而每1个字符为10位(bit),那么传送的波特率为:10位/字符 * 120 字符/秒 = 1200 /秒 = 1200bps。那么每1位二进制位(bit)的传送时间:
T = 1/1200 = 0.833ms
UART要求发送与接收两个UART的波特率配置相同。如果发送与接收波特率不同,相差很大,接收端采样点跨过多个电平,造成接收丢失,或者造成波特率不匹配,接收失败,如下图:
常见的波特率有9600、115200、128000、256000等。
- 通讯 -
通讯过程:
UART属于异步传输数据,这意味着没有时钟信号将发送的位输出与接收的位采样同步,也就是发送与接收使用各自的时钟。发送端将开始和停止位添加到传输的数据帧中,通过数据帧中定义的开始位和结束位,接收端知道何时开始读取这些位。
每个数据帧包含 1 个起始位、5 到 9 个数据位(取决于 UART的设置,如果有奇偶校验位是5到8,没有则是5到9)、一个可选的奇偶校验位和 1 个或 2 个停止位:
起始位:UART 数据传输线在不传输数据时通常保持在高电平。要开始发送数据时,发送端UART先在一个时钟周期内将传输线从高电平拉到低电平。当接收端UART 检测到从高到低的电压转换时,它开始以设置好的波特率的频率读取数据帧中的位。
数据:数据帧包含正在传输的实际数据。如果使用奇偶校验位,它可以是 5 位到 8 位。如果不使用奇偶校验位,则数据帧可以是 9 位。在大多数情况下,首先发送的数据是最低有效位。
校验:奇偶校验位是接收端UART 判断数据在传输过程中是否发生变化的一种方式。位会因电磁辐射、不匹配的波特率或长距离数据传输而发生改变。接收端 UART 读取数据帧后,检查数据部分值为1的个数是奇数还是偶数。当奇偶校验位与数据匹配时,UART 知道传输没有错误。
停止:发送端UART 将数据传输线从低电平拉到高电平持续至少两个位的时间来表示整个数据包的传输已经结束。
发送接收过程:
1.UART 从数据总线并行接收数据:
2.发送 UART 将起始位、奇偶校验位和停止位添加到数据帧:
3.整个数据包从发送 UART 串行发送到接收 UART。接收 UART 以预配置的波特率对数据线进行采样:
4.接收 UART 丢弃数据帧中的起始位、奇偶校验位和停止位:
5.接收端 UART 将串行数据转换回并行,并将其传输到接收端的数据总线:
全部0条评论
快来发表一下你的评论吧 !