【小趴菜STM32开发笔记3】---- 串口通信

发布于:2022-11-09 ⋅ 阅读:(6) ⋅ 点赞:(0) ⋅ 评论:(0)

目录

1 常见通信方式

并行通信

串行通信

2 串行通信相关概念

2.1 同步通信和异步通信

2.1.1 同步串行

 2.1.2 异步串行

2.2 异步串行通信的特点

2.2.1 字符格式

2.2.2 波特率

2.3 异步串行通信的接受过程

2.4 串行通信的传输方向

2.4.1 单工

2.4.2 半双工 

2.4.3 全双工

2.5 串行通信的错误校验

2.5.1 奇偶校验

2.5.2 代码和校验

2.5.3 循环冗余校验

3 STM32串口通信

3.1 串口收发单元

3.1.1 数据寄存器

3.1.2 通信状态标志位


1 常见通信方式

        按照数据传输的方式,计算机通信可以分为并行通信和串行通信两大类

并行通信

        将数据字节的多位数据同时传输

        优点:控制简单、传输速度快

        缺点:传输线过多,远距离传输时硬件成本较高

串行通信

        将数据字节分成一位一位的逐个依次传输

        优点:传输线较少,远距离传输时硬件成本较低

        缺点:传输控制较复杂


2 串行通信相关概念

2.1 同步通信和异步通信

        在现代计算机通信中,常用的是串行通信,比如网络通信和USB通信。串行通信的数据是逐位传输的,这就需要考虑收发双方的数据同步问题,即数据什么时候开始传输,什么时候结束传输,传输一位需要多长时间。

        根据实现数据同步的方式不同,串行通信又可以分为同步串行(同步通信)异步串行(异步通信)两种

2.1.1 同步串行

        收发双方建立专门的时钟信号使双方达到同步。产生时钟信号的一方叫主机(master),接受时钟信号的一方叫从机(slave),比如SPI和IIC。

        优点:可以实现高速度、大容量的数据传输

        缺点:发送时钟和接收时钟必须完全同步,通信协议和硬件电路较为复杂

同步串行传输示意图:

 2.1.2 异步串行

        没有专门的时钟信号,依靠事先约定的字符格式通信速率来完成通信,比如USB,以太网和异步串口(UART)。

异步串行传输示意图:

2.2 异步串行通信的特点

        异步通信以字符为单位进行传输,字符与字符之间的时间间隔是任意的,在每个字符内部的各位是以固定的时间间隔传输的。

2.2.1 字符格式

        由于字符的传输是随机的,因此收发双方必须规定通信字符的格式来判断数据的开始和结束。

        异步通信的一个字符一般由四部分组成:起始位、数据位、奇偶校验位、停止位;一个字符由起始位开始,停止位结束。

字符格式如图:

起始位:低电平,占用一位,用来通知接收设备,字符开始传输

数据位:一个字节有8位,因此数据位位数一般为8位,数据传输先低位后高位

奇偶校验位:占用一位,用于检测数据是否出错

停止位:高电平,占用一位,表示一个字符的传输结束,同时为下一个字符的接收做好准备

2.2.2 波特率

        每秒钟传输二进制数码的位数,以bit/s为单位

        表示了串行通信速率的大小。当波特率为115200时,每秒传输115200位,每位数据在通信线路上持续时间为1/115200≈8.68us。如果字符格式采用1位起始位,8位数据位,无奇偶校验位,1位停止位,则每秒传输的有效数据为11520字节(起始位和停止位不算有效数据,由硬件自动添加)

2.3 异步串行通信的接受过程

        异步串行通信的数据接收过程本质上是数据的采样,以高于波特率的采样时钟对通信线路进行多次采样

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

2.4 串行通信的传输方向

2.4.1 单工

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

2.4.2 半双工 

        数据传输可以沿两个方向传输,但不能同时,需要分时进行,相当于也只有一条通信线路

2.4.3 全双工

        数据可以同时接收和发送,一般有两条通信线路

2.5 串行通信的错误校验

2.5.1 奇偶校验

奇校验:数据位中“1”的个数与校验位中“1”的个数之和应该为奇数

偶校验:数据位中“1”的个数与校验位中“1”的个数之和应该为偶数

        比如,数据位内容为01010101,共有4个1,如果用奇校验,则校验位内容需为1,4+1=5为奇数;如果用偶校验, 则校验位内容需为0,4+0=4为偶数;校验位的产生一般由硬件自动完成,用户只需要使能相应的控制位即可

2.5.2 代码和校验

        发送方将所有要发送的数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据的同时,对数据块求和(或各字节异或),将结果与发送方的校验和进行比较,相符表示传输正常

2.5.3 循环冗余校验

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


3 STM32串口通信

3.1 串口收发单元

        串口收发单元主要利用数据寄存器DR,发送引脚TX,接收引脚RX,和三个通信状态标志TXE,TC,RXNE来完成数据的接收和发送

3.1.1 数据寄存器

        包含两个寄存器,发送数据寄存器TDR接收数据寄存器RDR,具有双重功能(读/写),两个寄存器通过数据的读写操作来区分

        数据发送单元采用双缓冲结构,TDR发送移位寄存器两部分组成。数据由CPU通过数据总线写入TDR,再转移到发送移位寄存器。发送移位寄存器将并行数据转换为串行数据,按低位在前,高位在后的方式逐位从TX引脚输出

        数据接收单元采用双缓冲结构,RDR接收移位寄存器两部分组成。接收移位寄存器从接收引脚RX上将数据逐位移入寄存器中,当8位数据接收完后,再整体转移到RDR中,CPU通过数据总线读取RDR中的数据

        双缓冲结构的优点:数据收发过程中,可同时写入新的数据或读取已接收的数据,提高数据的传输效率

3.1.2 通信状态标志位

        在STM32串口中设计了一个状态寄存器SR,内部有三位用来指示通信状态

标志位名称 作用
RXNE(bit5)

接收数据寄存器不为空标志

当移位寄存器的内容转移到RDR时,该位硬件置1

TC(bit6) 发送完成标志
TXE(bit7)

发送数据寄存器空标志

当TDR的内容转移到发送移位寄存器时,该位硬件置1

【当TXE为1时,数据也可能正在发送】