HAL库学习笔记- 8 串口通信之概念

16 篇文章 47 订阅
16 篇文章 18 订阅


一、串口通信概述

计算机通信是指将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。

通信传输方向

根据数据传输方向分为三类

  • 单工通信:数据传输仅能沿一个方向,不能实现反向传输,只有一条通信线路
  • 半双工通信:数据传输可以沿两个方向,但需要分时进行,也只有一条通信线路
  • 全双工通信:数据可以同时进行双向传输,具有两条通信线路。如接下来的UART。

数据传输方式

按照数据传输方式的不同,可以分为串行通信和并行通信两类。

并行通信

在这里插入图片描述
多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高。

串行通信

在这里插入图片描述
数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。串行通信按照实现数据同步的方式,可以分为同步串行和异步串行两种。

同步串行通信

在这里插入图片描述
数据传输以数据块(一组字符)为单位,在一个数据块内,字符与字符之间无间隔,收发双方依靠独立的时钟线进行信号的同步。适用于大批量的数据传输。

异步串行通信

在这里插入图片描述
数据传输以单个字符为单位,字符与字符之间的间隔任意,字符内部每一位持续的时间相同。收发双方没有专门的时钟信号,而是依靠事先约好的字符格式和通信速率来完成通信。

1.字符格式

在这里插入图片描述
常用字符格式为:1起始位,8数据位,无奇偶校验,1停止位,简称“1-8-n-1”

2.通信速率

波特率:每秒钟传送二进制数码的位数,以bit/s(bps)为单位。
常用的波特率有:9600、19200、38400、57600和115200;
如波特率为115200,表示每秒传输115200位,且每一位数据在数据线上持续时间为Tbit=1/115200≈8.68us。

3.示例

在这里插入图片描述
如图所示:传输时低位在前,高位在后,发送数据为0xE9

4.数据接收过程

在这里插入图片描述
接受过程的本质是数据采样,假设接收端的采样时钟是波特率的16倍。则接收过程如下:

  1. 接收过程由起始位的下降沿启动;
  2. 接收端等待8个时钟周期,以便建立一个接近比特周期中间的采样点;
  3. 接收端等待16个时钟周期,使其进入第一个数据位周期的中点;
  4. 第一个数据位被采样并存储在接收寄存器中;
  5. 串口模块在采样第二个数据位之前等待另外16个时钟周期;
  6. 重复此过程,直到所有数据位都被采样和存储;
  7. 由停止位的上升沿使数据线返回到空闲状态。

通信协议

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。且经常采用的为异步串行通信,则我们需要时事先约定好通信格式,即使用的通信协议。包括物理层的机械、电气特性;协议层的通讯逻辑。

物理层

串口通信的物理层有很多变种,常用的有RS-232和RS-485。RS-232标准主要规定了信号的用途,通讯接口以及信号的电平标准。
串口是一种接口标准,它规定了接口的电气标准,简单说只是物理层的一个标准。没有规定接口插件电缆以及使用的协议,所以只要我们使用的接口插件电缆符合串口标准就可以在实际中灵活使用,在串口接口标准上使用各种协议进行通讯及设备控制。
使用RS-232和485的串口设备间常见的通讯结构如下:
在这里插入图片描述
在这里插入图片描述
在上面的通讯方式中,两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232/485 标准”传输数据信号。由于RS-232 电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL 校准”的电平信号,才能实现通讯。
RS-485 通讯网络中,节点中的串口控制器使用RX 与TX信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成TTL 信号通过RX 引脚传输到串口控制器中。

1.电平标准
通讯标准电平标准(发送端)
5V TTL逻辑1:2.4V~5V ;逻辑0:0V~0.5V
RS-232逻辑1:-15V~-3V ;逻辑0:+3V~+15V
RS-485逻辑1:+2V~+6V ;逻辑0:-2V~-6V

常见的电子电路常使用TTL的电平标准,理想状态下,使用5V或3.3V作为二进制逻辑1,使用0V表示逻辑0;而为了增加串口通讯的远距离传输及抗干扰能力,RS-232扩大了电平范围,而为了保护接口电路芯片,RS-485在保证使用情况下降低了电平标准,从而降低了232的共模干扰,提高了传输速率和传输距离,并能够实现一对多,RS485接口在总线上是允许连接多达128个收发器。即具有多站通讯能力,这样用户可以利用单一的RS485接口方便地建立起设备网络。而232仅能连接一个收发器,进行单点一对一通信。

2.接口物理结构与信号线
接口

RS-232
在旧式的台式计算机中一般会有RS-232 标准的COM口(也称DB9 接口),
在这里插入图片描述
其中接线口以针式引出信号线的称为公头,以孔式引出信号线的称为母头。在计算机中一般引出公头接口,而在调制调解器设备中引出的一般为母头,使用上图中的串口线即可把它与计算机连接起来。通讯时,串口线中传输的信号就是使用前面讲解的RS-232 标准调制的。
在这里插入图片描述
由于两个通讯设备之间的收发信号(RXD与TXD)应交叉相连,所以DB9母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用“直通型”的串口线连接起来即可。
在这里插入图片描述
在目前的其它工业控制使用的串口通讯中,一般只使用RXD、TXD 以及GND 三条信号线,直接传输数据信号。而RTS、CTS、DSR、DTR 及DCD 信号都被裁剪掉了。

RS-485
无具体的物理形状,根据工程的实际情况采用接口。
在这里插入图片描述

接口电气特性
  • RS-232:传输电平信号。接口的信号电平值较高(信号“1”为“-3V至-15V”,信号“0”为“3至15V”),易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。另外抗干扰能力差。
  • RS-485:传输差分信号。逻辑“1”以两线间的电压差为+(2—6) V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。抗干扰能力强。
信号线
  • RS-232:RS232传输距离有限,最大传输距离标准值为15米,且只能点对点通讯,最大传输速率最大为20kB/s。可以采用三芯双绞线、三芯屏蔽线等。
  • RS-485:RS485最大无线传输距离为1200米。最大传输速率为10Mbps,在100Kb/S的传输速率下,才可以达到最大的通信距离。可以采用两芯双绞线、两芯屏蔽线等。在低速、短距离、无干扰的场合可以采用普通的双绞线,反之,在高速、长线传输时,则必须采用阻抗匹配(一般为120Ω)的RS485专用电缆(STP-120Ω(用于RS485 & CAN)一对18AWG),而在干扰恶劣的环境下还应采用铠装型双绞屏蔽电缆(ASTP-120Ω(用于RS485 & CAN)一对18AWG)。

协议层

多数情况下我们采用异步串行通信,串口通讯的数据包由发送设备通过自身的TXD 接口传输到接收设备的RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
在这里插入图片描述

1.码率(波特率)

波特率也可称为码率,即每个码元的长度,以便对信号进行编解码,图中虚线之间的每一格代表一个二进制位也就是码元。

2.通讯的起始与停止位

串口通信的一个数据包从起始信号开始,直到停止信号结束。数据包的起始位由一个逻辑0的数据位表示;停止位可由0.5、1、1.5或2个逻辑1的数据位表示。需要双方约定一致。

3.有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7 或8 位长。

4.校验位

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity),它们介绍如下:

  • 奇校验:要求有效数据和校验位中“1”的个数为奇数,比如一个8 位长的有效数据为:01101001,此时总共有4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是8 位的有效数据加上1 位的校验位总共9 位。
  • 偶校验:与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如
    数据帧:11001010,此时数据帧“1”的个数为4 个,所以偶校验位为“0”。
  • 0 校验:是不管有效数据中的内容是什么,校验位总为“0”;1 校验:是校验位总为
    “1”。
  • 在无校验的情况下,数据包中不包含校验位。

RS232应用非常广泛,可以连接各种设备,例如监控、其它的设备升级或调试等都可能需要用到它。功能与USB比较接近,随着USB端口的越来越普遍,将会出现更多的把USB转换成RS-232或其它接口的转换装置。
通过USB接口可连接更多的RS-232设备,不仅可获得更高的传输速度,实现真正的即插即用,同时解决了USB接口不能远距离传输的缺点(USB通讯距离在5米内)。
RS-485 通讯网络的最大传输距离可达1200 米,总线上可挂载128 个通讯节点,而由于RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑,当AB 两线间的电压差为-6V~-2V 时表示逻辑1,当电压差为+2V~+6V 表示逻辑0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的。
RS-485 与RS-232 的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。而由于RS-485 具有强大的组网功能,人们在基础协议之上还制定了MODBUS 协议,被广泛应用在工业控制网络中。
由于RS-485 与RS-232 的协议层没有区别,进行通讯时,我们同样是使用STM32 的USART 外设作为通讯节点中的串口控制器,再外接一个RS-485 收发器芯片把USART 外设的TTL 电平信号转化成RS-485 的差分信号即可。

二、STM32 的串口简介

STM32 芯片具有多个USART 外设用于串口通讯,它是 Universal Synchronous
Asynchronous Receiver and Transmitter 的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于USART,它还有具有UART 外设(Universal Asynchronous Receiver and Transmitter),它是在USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是UART。
USART 满足外部设备对工业标准NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。USART 支持同步单向通信和半双工单线通信;还支持局域互连网络LIN、智能卡(SmartCard)协议与lrDA(红外线数据协会) SIR ENDEC 规范。
USART 支持使用DMA,可实现高速数据通信。
USART 在STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。
STM32 的USART 输出的是TTL 电平信号,若需要RS-232 标准的信号可使用转换电路芯片进行转换。

USART 功能框图

在这里插入图片描述

1.功能引脚

  • TX:发送数据输出引脚。
  • RX:接收数据输入引脚。
  • SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
  • nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能RTS 流控制,当USART 接收器准备好接收新数据时就会将nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为高电平。该引脚只适用于硬件流控制。
  • nCTS:清除以发送(Clear To Send),n 表示低电平有效。如果使能CTS 流控制,发送器在发送下一帧数据之前会检测nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。
  • SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

各引脚分配的情况可查询对于芯片的数据手册。USART 的功能引脚有多个引脚可选,这非常方便硬件设计,只要在程序编程时软件绑定引脚即可。

2.数据收发单元

在这里插入图片描述
串口数据收发单元主要利用数据寄存器DR,发送引脚TX,接收引脚RX,以及三个通信状态位TXE、TC和RXNE来完成数据的接收和发送。

数据寄存器DR

USART 数据寄存器(USART_DR)只有低9位有效,并且第9位数据是否有效要取决于USART 控制寄存器1(USART_CR1)的M位设置,当M位为0时表示8位数据字长,当M位为1表示9 位数据字长,我们一般使用8 位数据字长。
数据寄存器DR在硬件上分为TDR和RDR两个寄存器,通过数据的流向进行区分,在结构设计上采用了双缓冲结构;
发送时,数据通过数据总线送入TDR寄存器,然后传送到发送移位寄存器完成数据转换,从并行数据转为串行数据,最后通过Tx引脚发送;
接收时,数据通过Rx引脚逐位送入接收移位寄存器,8位数据接收完成后,送入RDR寄存器,供用户读取。
数据收发过程中,RDR寄存器可同时写入新的数据或读取已接收的数据,提高数据的传输效率。

通信状态标志位
标志位名称含义
TXE发送数据寄存器空标志。当TDR寄存器的内容已经传送到发送移位寄存器时,该位由硬件置1。如果串口控制寄存器CR1中的TXEIE位为1,将会触发发送数据寄存器空中断。注意:当 TXE 置1时,数据有可能还在发送 。
TC发送完成标志。当发送移位寄存器的内容发送完成,同时TDR寄存器也为空时,该位由硬件置1,表示本次数据传输已经完成。如果串口控制寄存器CR1中的TCIE位为1,将会触发发送完成中断。注意:当TC置1时,数据才是真正地发送完成 。
RXNE接收数据寄存器不为空标志。当移位寄存器的内容已经传送到接收数据寄存器RDR时,该位由硬件置 1。如果串口控制寄存器CR1中的RXNEIE位为1,将会触发接收数据寄存器不为空中断 。

在轮询方式下可以直接检测标志位;在中断方式下,需要在中断服务程序中通过检测不同的中断标志位,来判断出中断类型,然后执行后续的任务处理。

3.控制器

USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。使用USART 之前需要向USART_CR1 寄存器的UE 位置1 使能USART。发送或者接收数据字长可选8 位或9 位,由USART_CR1 的M位控制。

发送器

当USART_CR1 寄存器的发送使能位TE置1时,启动数据发送,发送移位寄存器的数据会在TX引脚输出,如果是同步模式SCLK也输出时钟信号。
一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的8位或9位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。
停止位时间长短是可以通过USART 控制寄存器2(USART_CR2)的STOP[1:0]位控制,可选0.5 个、1 个、1.5 个和2 个停止位。默认使用1 个停止位。2 个停止位适用于正常USART 模式、单线模式和调制解调器模式。0.5 个和1.5 个停止位用于智能卡模式。
当发送使能位TE置1之后,发送器开始会先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往USART_DR 寄存器写入要发送的数据。在写入最后一个数据后,需要等待USART 状态寄存器(USART_SR)的TC 位为1,表示数据传输完成,如果USART_CR1 寄存器的TCIE 位置1,将产生中断。

接收器

如果将USART_CR1 寄存器的RE位置1,使能USART接收,使得接收器在RX 线开始搜索起始位。在确定到起始位后就根据RX线电平状态把数据存放在接收移位寄存器内。接收完后就把接收移位寄存器数据移到RDR 内,并把USART_SR 寄存器的RXNE位置1,同时如果USART_CR2 寄存器的RXNEIE置1的话可以产生中断。

起始位检测

为得到一个信号真实情况,需要用一个比这个信号频率高的采样信号去检测,称为过采样,这个采样信号的频率大小决定最后得到源信号准确度,一般频率越高得到的准确度越高,但为了得到越高频率采样信号越也困难,运算和功耗等等也会增加,所以一般选择合适就好。
接收器可配置不同的过采样技术,以实现从噪声中提取有效的数据。USART_CR1 寄存器的OVER8 位用来选择不同的采样采样方法,如果OVER8 位设置为1 采用8 倍过采样,即用8 个采样信号采样一位数据;如果OVER8 位设置为0 采用16 倍过采样,即用16 个采样信号采样一位数据。
16 倍或 8倍过采样时,起始位检测序列相同。
在 USART 中,识别出特定序列的采样时会检测起始位。该序列为:1110X0X0X0000。其中X表示该位不定。
8 倍过采样速度快,最高速度可达fPCLK/8,fPCLK 为USART 时钟;16 倍过采样速度虽然没有8 倍过采样那么快,但得到的数据更加精准,其最大速度为fPCLK/16。
在这里插入图片描述
如果序列不完整,起始位检测将中止,接收器将返回空闲状态(无标志位置 1)等待下降沿。
如果 3 个采样位均为0(针对第 3 位、第 5 位和第 7 位进行首次采样时检测到这 3 位均为 0; 针对第 8 位、第 9 位和第 10 位进行第二次采样时检测到这 3 位均为 0),可确认起始位 (RXNE 标志位置 1,RXNEIE=1 时生成中断)。
如果两次采样时(对第 3 位、第 5 位和第 7 位进行采样以及对第 8位、第 9 位和第 10 位进 行采样),3 个采样位中至少有 2 个为 0,则可验证起始位(RXNE 标志位置 1,RXNEIE=1 时生成中断)但 NE 噪声标志位置 1。如果不满足此条件,则启动检测中止,接收器返回空 闲状态(无标志位置 1)。
如果其中一次采样时(对第 3 位、第 5 位和第 7 位进行采样或对第 8 位、第 9 位和第 10 位 进行采样),3 个采样位中有 2 个为 0,则可验证起始位但 NE 噪声标志位置 1。
其他控制器与波特率发生器由于主攻方向不为硬件,等用到了再查阅用户手册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值