USART通信协议详解

目录

为什么需要通信协议呢?

USART简介

硬件电路

全双工

异步

单端电平

串口参数及时序

参数

时序图


IIC详解见我另外一篇文章,IIC通讯协议详解(电路和时序图)_iic的时序是固定的吗-CSDN博客,讲解的很详细。

为什么需要通信协议呢?

以STM32为例,有一些功能是32没有的,比如陀螺仪加速度计测量姿态的功能,只能依靠外挂的芯片来完成,那么外挂芯片得到的数据怎么发送给32呢?这就需要在两个设备之间连接一根或多根通信线,建立一个双方都认可的通信协议进行通信。

USART简介


UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种广泛应用于串行通信的硬件接口,它允许计算机和微控制器与其他设备进行数据交换。
特点:

  1. 异步通信:UART协议的数据传输是异步的,这意味着发送和接收数据不需要共享时钟信号。每个字符之间的时间间隔可以是任意的,只要接收方能够正确地识别出字符的起始位和停止位。
  2. 数据帧结构:UART数据传输的基本单位是字符。每个字符通常包含起始位、数据位、可选的校验位和停止位。起始位用于通知接收器一个新字符的开始,停止位用于标记字符的结束。
  3. 起始位和停止位:UART字符的起始位通常是1位,停止位是1或2位。起始位和停止位的设置取决于具体的通信协议和设备。
  4. 数据位和校验位数据位通常为8位,但也可以根据需要配置为其他位数。校验位用于检测数据传输过程中的错误,可以是奇校验或偶校验。
  5. 波特率:UART通信的速率称为波特率,它定义了每秒传输的码元数(波特率指的是通信中用于传输的符号速率,即每秒传输的码元数。波特率通常用 baud 作为单位,表示每秒传输的码元数。在串行通信中,每个波特(baud)可以携带多个比特(bits),因此波特率并不一定等于比特率)。波特率可以是标准的如9600、19200、115200等,也可以是用户自定义的。
  6. 硬件实现:UART协议的实现通常涉及到微控制器上的UART硬件模块,该模块负责数据的发送和接收。开发者通过编程配置UART模块的工作模式、波特率、数据位、校验位等参数。

硬件电路

在最开始的图中介绍了UART是全双工异步通信,并且是单端电平,进行点对点(一对一)通信。
现在通过这个图来介绍为什么?

全双工

如图,UART协议在串行通信中使用两根数据线:TX(Transmit)和RX(Receive),分别用于数据的发送和接收。以下是这两根数据线的详细介绍:

  1. TX(Transmit):发送线,用于发送数据。在UART通信中,数据从己方的TX线流出,流向对方的RX线。

  2. RX(Receive):接收线,用于接收数据。在UART通信中,数据从对方的TX线流向己方的RX线。

在全双工通信中,发送端和接收端可以独立地进行数据传输,彼此之间不会相互干扰。类似于我们进行电话对话时可以同时说话和听对方说话。
图中发送方(设备1)可以在TX发送数据给对方(设备2)的RX的同时,接受来自对方(设备2)的数据。

异步

异步通信是一种数据传输方式,其中数据的传输不需要发送方和接收方使用共同的时钟信号来同步操作。在异步通信中,数据的传输是根据数据本身的起始位和停止位之间的时间间隔来进行同步的。
可以看到图中并没有共同的时钟线,所以UART通信中会约定好双方发送接收数据的速率。比如约定波特率为1000,发送方每秒钟,发送1000位,每隔1毫秒发送一位,那么接收方就每隔一毫秒接收1位,如果接收方接收快了,就会重复接收某些位,慢了就会漏掉某些位。
双方没有共同的时钟线,所以异步。

单端电平

单端电平通常指的是信号在一个信号线上相对于参考电平(地)的电压水平。在单端通信中,数据通过一个信号引脚传输,这个信号引脚可以处于高电平(逻辑1)或低电平(逻辑0)状态。

串口参数及时序

参数

上面的时序图是串口发送一个字节的格式。
串口中,每一个字节都装在一个数据帧里面,数据帧由起始位、数据位和停止位组成。数据位通常占8位代表一个字节的8位。起始位固定位低电平,代表开始发送数据(因为停止位是高电平,所以当接收方接收到低电平时表示开始接收8位数据,然后再回到高电平),停止位固定为高电平(为下一个起始位做准备),代表终止发送数据
如果加入了校验位,那么数据帧就变成11尾,数据位占9位,其中最后一位是校验位,通常分为奇偶校验位。
数据校验位是在数据传输过程中用于验证数据准确性的一种技术。在串口通信等数据传输中,为了确保数据在传输过程中没有出现错误或损坏,通常会使用校验位进行数据完整性的检验。
奇校验和偶校验是数据传输中常用的两种校验方式,用于检测数据传输过程中是否出现了错误。它们的原理如下:

  1. 奇校验:在奇校验中,发送方会根据数据中的比特个数来确定奇偶性。具体来说,发送方会统计数据中所有“1”的个数,如果“1”的个数为偶数,就在数据中添加一个附加的校验位(奇偶位)使得整个数据中“1”的个数变为奇数;如果“1”的个数已经为奇数,则添加的奇偶位为0。接收方在接收到数据后也会统计“1”的个数,然后检查奇偶位,如果接收到的数据中“1”的个数和奇偶位不匹配,就表示数据在传输过程中出现了错误。

  2. 偶校验:与奇校验相反,在偶校验中,发送方会根据数据中的比特个数来确定奇偶性。如果数据中“1”的个数为偶数,发送方会添加一个奇偶位使得整个数据中“1”的个数变为偶数;如果“1”的个数已经为奇数,则添加的奇偶位为1。接收方在接收到数据后同样会统计“1”的个数,并检查奇偶位,如果接收到的数据中“1”的个数和奇偶位不匹配,则表明数据在传输过程中存在错误。

奇偶校验可以在一定程度上检测数据传输中单一位的错误,但不能完全纠正错误或检测多位错误

一般使用低位先行模式。这意味着数据从最低的有效位(最右边,位0)开始传输,一直到最高的有效位(最左边,位 n)。这样的传输模式通过串行方式一位一位地发送或接收数据。
以8位字节11110000为例,在低位优先的方式下,数据将被发送如下序列:
0 (位0,最低位) 0 (位1) 0 (位2) 0 (位3) 1 (位4) 1 (位5) 1 (位6) 1 (位7,最高位)。

时序图

发送一个字节0x55,二进制就是01010101。
波特率是9600,所以每一位的时间是1/9600s,大概是104us。
流程:

  • 数据帧开始,发送起始位,产生下降沿,表示开始发送数据。
  • 低位先行,所以图中展示的波形是10101010。
  • 由于没有校验位,所以数据位是8位。
  • 最后一位停止位上拉到高电平,表示一次发送的终止,等待下一次的下拉开始。

这个时序图带了偶校验位,所以数据位占9位,其它和上面一样。

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值