目录
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 异步串行通信的接受过程
异步串行通信的数据接收过程本质上是数据的采样,以高于波特率的采样时钟对通信线路进行多次采样
- 接收过程由起始位的下降沿启动
- 接收端等待8个时钟周期,建立一个接近起始位周期中点的采样点
- 接收端再等待16个时钟周期,进入第一个数据位周期的中点
- 第一个数据位被采样并存储在接收寄存器中
- 串口模块在采样第二个数据位之前,等待另外16个时钟周期
- 重复此过程,直至所有数据位都被采样和储存
- 由停止位的上升沿触发,返回空闲状态
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时,数据也可能正在发送】 |