迷乱的通信协议之UART相关知识

2020-06-29 10:30:57 浏览数 (2)

郁闷的昨天,跑代码跑出蓝屏,后面搞了个服务器用,再也不怕自己电脑跑蓝屏啦,哈哈哈哈哈哈哈哈哈哈,开始今天的分析。

之前发的IIC相关分析,你会发现有一个SCL时钟线存在,因此它的通信方式被归类于同步通信,这次要讲述的是串口通信,而串口与IIC不同,通信方式属于异步通信,因此UART全称叫做:通用异步收发器。

以前电脑接口有个RS232的接口,不清楚的人会把它和VGA的接口弄混,从百度找了个RS232接口的图,如下所示:

而VGA如下图所示的样子:

认真看会发现,管脚数量并不相同,不过现在大部分电脑也不存在RS232的接口了,用的更多还是USB转串口或者其他方式实现串口通信。

串口通信是一种很常用的串行通信的方式,无论是C51,STM32,MSP430等单片机,还是DSP、FPGA等可编程器件都会在学习的时候遇到串口的编程与使用,因为串口对于调试、人机交互、数据传输等方面都有一定的便利之处。

  • 信号线组成

串口的通信主要由两根信号线组成,一条名为RXD的接收信号线,另一条则是TXD,进行信号的发送;

  • 通信前提

通信有两方,在一方向另一方通信前,需要设定好串口的波特率,也叫码元速率,就是每秒钟传送的码元符号的个数,因此当波特率较高时,误码率也因此而提高,所以需要根据实际情况进行波特率的设定,具体的计算方法可自行了解,因为不同的应用平台会有不同的波特率设定方式,所以为避免产生误导,还是不做具体讲解的好;除了波特率还有奇偶校验位与停止位,以下会有相关描述。

  • 时序分析

从百度上找了一张比较清晰的串口时序的图片,在这对它进行分析。

串口的信号线在空闲时都是保持高电平,与停止位相同,只有如此,才会检测到起始位的下降沿变化,从高电平到低电平,保持一个比特的时间,T=1/BAUD;

然后开始数据的传输,若在调试串口相关的电路时,若存在错误,可以尝试先测试信号线的电平是否为高,数据位具有5~8位和1个校验位,在上图标注的是7位的数据位 1位的校验位,数据先发送LSB,也就是数据的最低位,然后每隔一个比特的时间,发送一次数据,直到8个数据传完,最后发送停止位,完成一帧数据的传输。

其中停止位的保持时间与预先设定有关,该设定便是停止位保持的时间,若为1就是1个比特的时间,以此类推,在串口助手中就可以看到相关设置,如下图所示

  • 奇偶校验位

奇偶校验是一种保证数据有效性的一种校验方法,是最简单的错误检测码;根据传输的数据中的“1”的个数是奇数还是偶数来进行校验,若采用奇数就是奇校验,反之,才有偶数就是偶校验,因此在传输的时候,校验位就需要根据“1”的个数进行确定自己是为0还是1,这样才可以在接收端进行奇偶校验。

若给定的数据位中1的个数是奇数,分别采用两种校验方式,校验位的变化举个例子如下:

数据为:1010111,5个“1”;

偶校验:将校验位置为1,从而使得1的总个数变为偶数,即10101111;

奇校验:将校验位置为0,保持1的个数为奇数,即10101110;

呼~~~~~~

串口分析结束了~

虽然串口通信是比较简单的一种,通信的时序也没很几个,但是包含的知识并不少,好好领悟吧!下次将进行SPI的分析,干货正在来袭,敬请期待~

0 人点赞