STM32 —— 串口通讯

STM32 —— 串口通讯

什么是串口通讯

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性,从而确保原始数据在物理媒体的传播;协议层主要规定通讯逻辑,统一双方的数据打包、解包标准。通俗的讲物理层规定我们用嘴巴还是肢体交流,协议层规定我们用中文还是英文交流。下面分析一下串口通讯协议的物理层和协议层。

USART(Universal Synchronous/Asynchronous Receiver/Transmitter):通用同步/异步串行接收/发送器

UART(Universal Asynchronous Receiver/Transmitter):通用异步收发传输器

终端与其他设备(例如其他终端、计算机和外部设备)通过数据传输进行通信。数据传输可以通过两种方式进行:并行通信和串行通信。

传输效果如图:

image

背景

设备之间的通讯方式

并行通信 串行通信
传输原理 数据各个位同时传输 数据按位顺序传输
优点 速度快 占用引脚资源少占用引脚资源少
缺点 占用引脚资源多 速度相对较慢

并行通信

并行通讯是指数据的每一位同时在多根数据线上发送或者接收

并行通信时数据的各个位同时传送,可以字或字节为单位并行进行。

对于并行通信来说其成本较高,速度快,抗干扰能力差,传输距离短。计算机或plc各种内部总线就是以并行方式传送数据的。另外,在 PLC 底板上,各种模块之间通过底板总线交换数据也以并行方式进行,常见的有 SDIO ,FSMC ,W500 等

特点: 多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高

传输效果如图:

image

串行通信

串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息,这种方式传输速率较慢,抗干扰能力较强,通信距离较远。对于串行通信,常见的通信协议有:USART、I2C、SPI

特点: 数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种

传输效果如图:

image

常见的串行通信接口

通信标准 引脚说明 通信方式 通信方向
UART(通用异步收发器) TXD :发送端
RXT :接收端
GND :共地
异步通信 全双工
1-wire(单总线) DQ :发送/接收端 异步通信 半双工
SPI SCK :同步时钟
MISO :主机输入,从机输出
MOSI :主机输出,从机输入
同步通信 全双工
I2C SCK :同步时钟
SDA :数据输入/输出端
同步通信 半双工

按照数据传送方向进行分类:

· 单工:数据传输只支持数据在一个方向上传输

· 半双工:允许在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上进行传输。半双工实际上是一种课以切换方向的单工通信,不需要使用独立的接收端何发送端,两者可以合并,一起使用同一个端口

· 全双工:允许数据同时在两个方向上进行传输。全双工是两个单工通信方式的结合,需要独立的接收端和发送端。

image

按通信方式进行分类:

· 同步串行通信:带时钟同步信号传输,比如:SPI 、IIC 通信接口

· 异步串行通信:不带时钟同步信号,比如:UART(通用异步收发器),单总线

同步通讯中,数据信号所传输的内容的绝大部分是有效数据,而异步通讯中则会包含数据帧的各种标识符,所以同步通讯效率较高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大

同步串行通信

同步通信中,收发设备上会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据

例如:通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样

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

时钟信号如图:

image

异步串行通信

异步通信中,不使用时钟信号进行数据同步,它们直接在数据数据中穿插一些用于同步的信号位,或者讲主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方约定好传输的速率(也就是波特率)等,以便更好的同步

三根通信线

任何通信都要有信息传输载体,或者是有线的或者是无线的,串口通信是有线通信,是通过串口线来通信的。串口通信线最少需要 2 根(GND 和信号线),可以实现单工通信,也可以使用 3 根通信线(Tx、Rx、GND)来实现全双工

RXD:数据输入引脚,数据接受

TXD:数据发送引脚,数据发送

image

image

异步串行通信

特点: 数据传输以单个字符为单位,字符和字符之间的间隙任意,字符内部每一位持续的时间相同。收发双方没有专门的时钟信号,而是依靠事先约定的字符格式和通信速率来完成通信

image

image

通信字符格式

image

字符格式决定了字符中数据的传输形式

常用字符格式: 1位起始位 8位数据位 无奇偶校验 1位停止位,如图:

image

传输时地位在前,高位在后,发送您数据为0xE9

通信速率

波特率:每秒钟传送二进制数码的位数,以 bit/s(bps) 为单位

常用的波特率有:9600 、19200 、38400 、57600 、115200

波特率决定了字符中每一位数据的持续时间
波特率为 115200 ,表示每秒传输 115200 位,且每一位数据在数据线上持续时间为 \(T_{bit} = \frac{1}{115200} \approx 8.68 us\)

数据接收过程

接收过程的本质是数据采集,假设接收端的采样时钟是波特率的16倍

具体接收过程如下:

  1. 接受过程由起始位的下降沿启动

  2. 接受等待 8 个时钟周期,以便建立一个接近比特周期中间的采样点

  3. 接收端等待 16 个时钟周期,使其进入第一个数据为周期的中点

  4. 第一个数据位被采样并存储在接收寄存器中

  5. 串口模块在采样第二个数据位之前等待另外 16 个时钟周期

  6. 重复此过程,直至所有数据都被采样和存储

  7. 由停止位的上升沿使数据线返回到空闲状态

数据传输方向

前面已经介绍了不同数据传输方向,这里仅介绍对应特点

单工:数据传输仅能沿一个方向,不能实现反向传输,只有一条通信线路

半双工:数据传输可以言两个方向,但需要分时进行,也只有一条通信线路

全双工:数据可以同时进行双向传输,具有两条通信线路,典型实例:UART

常用的错误校验方式

常用的错误校验方式有三种:奇偶校验、代码校验、循环冗余校验,下面将依次介绍

奇偶校验

奇校验表示数据中的 "1" 的个数与校验位 "1" 的个数之和为奇数;偶校验表示数据中的 "1" 的个数与校验位 "1" 的个数之和为偶数

没有奇偶校验的内存,每个字节只有 8 位,而奇偶校验就是在每一字节( 8 位)之外又增加了以为错误检测位

奇偶校验只能检测出错误,而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误

代码校验

发送方讲所发数据块求和,产生一个字节的校验字符附加到数据块末尾。接收方采用同样方式进行检测

循环冗余校验

通过某种数学运算实现有效信息与校验位之间的循环校验,常用于磁盘信息的传输、存储区的完整性校验等

参口文献

  1. 带你认识RS232通讯

  2. STM32第五章-串口通讯详解

posted @ 2022-10-18 10:40  ppqppl  阅读(168)  评论(0编辑  收藏  举报