【知识分享】异步串行收发器Uart(串口)-通信协议详解

前言

什么是串口?

        串口意思是串行通信接口,与之对应的是并行通信接口。下面具体来看下什么是串行通信和并行通信。

串行通信

        串行通信,就是数据是按时间先后顺序一串串发出去的。比如现在要发一个13(对应二进制是1101)的数据,那第一个时钟周期先给一个1,第二个时钟周期给个0,第三个给1,第四个给1。然后当对方这四个时钟周期接收到这4个数据后,再把它还原成原本13的数据,这就完成了一次串行通信。

并行通信

        并行通信,就是数据是按空间角度并行发送的。比如现在一样要发一个13(对应二进制是1101)的数据,那如果要在同一时刻发出去,那最少需要有4根数据线,第一根发送数据1,第二根发数据0,第三根数据1,第四根数据1。然后当对方在这个时刻收到这4个数据后,再把它还原成原本13的数据,这就完成了一次并行通信。

串并两者对比

串行通信 并行通信
IO口资源 占用少 占用多
通信效率 效率低 效率高
适合场景 远距离传输 近距离传输

        串行通信包括同步串行通信和异步串行通信,同步串行通信有IIC、SPI等这种带同步时钟信号的通信方式,而异步串行通信则是像UART、CAN等这种不带同步时钟信号的。而玩单片机的应该都知道,一般说的串口,都是特指UART这种。

各种串行通信对比

UART CAN SPI IIC
通信方式 全双工 半双工 全双工 半双工
线制 2线制 2线制 3/5线制 2线制

        单工:通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。

        半双工:数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。

        全双工:通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。

通用异步收发传输器-UART

概述

        轮到我们的主角登场了,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。如上文所说,UART属于异步串行通信的,所以它并没有时钟线,总共就只有收(RX)跟发(TX)两根数据线,两根数据线可独立工作,互不冲突,所以它是可以进行全双工通信的。这时候问题就来了,因为串行通信是把数据分割到不同时间段时进行发送,而此时使用UART通信的双方并没有时钟线进行时钟同步,那怎么知道对方哪个时刻发的是什么数据呢?所以这里要引进一个概念,叫波特率。

波特率

        波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。由于没有用于同步双方通信信号的时钟信号,所以通信时需要双方按照同样的通信速度进行通信。波特率表示的是一秒钟传输的位数。比如波特率9600,就表示1秒钟可以传输9600个位(bit),波特率19200则表示1秒钟可以传输19200个位(bit)。因此波特率越高,表示速度越快。

通信时序

【知识分享】异步串行收发器Uart(串口)-通信协议详解_第1张图片

        这里分四个部分来讲,分别是起始位,数据位,校验位,停止位。

起始位

        总线数据从高拉到低,为一个信号的起始,起始的低电平信号需要持续1个位的时间。

数据位

        起始位过后,连续8个位的时间,都是数据位的内容,如果是使用单片机进行编程,这个位数一般是可设的。

校验位

        在数据位的最后一位,会带有一个校验位,如果是使用单片机进行编程,这个位可有可无,一般有三个选项:无校验、奇校验和偶校验。

注:在STM32里的UART,如果选用奇校验或偶校验时,会占用数据位的最后一位作为校验位。也就是说如果设置的是8个数据位,那实际数据位只有7个,最后一个位是校验位。但一些工具则是数据位跟校验位完全独立,比如串口调试工具,设置8个数据位,一个奇校验位,则实际数据收发就是8个数据位再加一个校验位。

停止位

        在数据传输完后,最后需要从低电平变为高电平来表示一个数据的结束,数据结束后,到下个数据的起始之前,需要有一个位时间的高电平,用来表示停止位数。如果是使用单片机进行编程,停止信号的高电平持续时间可根据设置而定。常用的有1个停止位和2个停止位的设置,当然还有0.5和1.5的停止位时间,根据实际使用来定。

从上面的时序来看,我们可以得到几个基本信息:

        1、Uart在空闲时候,一般是保持高电平,这对应STM32单片机里的Uart寄存器中空闲的标志。如果Uart通信总线上一直是保持低电平,则说明此时总线存在异常。

        2、当通信总线上出现高电平到低电平的一个下降沿信号后,低电平持续时间达不到一个位的时间,说明此时通信双方的波特率没有对应上,或者通信总线上存在干扰,对应STM32单片机里的Uart寄存器中噪声的标志。

        3、常见的可配置项,就是波特率、数据位、校验位、停止位,这在很多串口调试工具里都可以看得到。

工具推荐

        串口调试助手sscom,一直在持续更新,目前使用的是5.13.1的版本,比较稳定了。已经集成了很多功能,除串口调试外还可以调试Tcp。

        串口监视助手AccessPort,在进行正常的串口数据收发的同时,还可以监视抓取通信的数据,包括对一些串口的操作也可以抓取,对进行上层协议开发或上位机开发调试有很大的帮助。

相关知识

        STM32、单片机、Modbus

你可能感兴趣的:(知识分享,#,Modbus,单片机,stm32,c语言)