1.1、串行通信与并行通信
1.串行通信
指主机与IO设备之间数据传输是按照顺序一位接一位地传输。通常数据在一根数据线或一对差分线上传输。串行通信数据慢,但占用的传输线条数少,适用于长距离、低速率的通信的数据传送。
2.并行通信
指主机与IO设备之间通过多条传输线交换数据,数据各位同时发送。并行通信的传输速度相对较快。由于并行通信需要使用多条数据线,通常用于短距离、高速率的数据传送。
1.2、串行通信方式
1.单工通信
是一种简单的传输方式,数据只能在一个方向上进行传输。在这种模式下,通信设备只能在发送或接收数据时工作,不能同时进行发送和接收。
2.半双工通信
允许数据在两个方向上交替传输,但不是同时进行,即通信设备在发送数据时不能接收数据,在接收数据时不能发送数据。
3.全双工通信
全双工模式允许数据在两个方向上同时进行传输,即通信设备可以同时发送和接收数据。
1.3、串行异步通信和串行同步通信
1.串行异步通信
是一种基于时间间隔的数据传输方式,不需要外部的传输时钟,而是通过起始位、数据位、校验位和停止位等组成的帧结构来确保数据的可靠性。
2.串行同步通信
是指数据传送是以数据块为单位,字符与字符之间、字符内部的位与位之间都同步的通信方式。需要外部的传输时钟来同步发送端和接收端的数据传输。
1.4、STM32的USART结构
①功能引脚
TX: 发送数据输出引脚。
RX: 接收数据输入引脚。
SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
nRTS: 请求以发送,n 表示低电平有效。如果使能 RTS 流控制,当USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为高电平。该引脚只适用于硬件流控制。
nCTS: 清除以发送,n 表示低电平有效。如果使能 CTS 流控制,发送器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。
SCLK: 发送器时钟输出引脚。
②数据寄存器
USART 数据寄存器只有低 9 位有效,并且第 9 位数据是否有效要取决于USART 控制寄存器 1(USART_CR1)的 M 位设置,当 M 位为 0 时表示 8 位数据字长,当 M位为 1 表示 9 位数据字长,我们一般使用 8 位数据字长。USART_DR 包含了已发送的数据或者接收到的数据。USART_DR 实际是包含了两个寄存器,一个专门用于发送的可写 TDR,一个专门用于接收的可读 RDR。当进行发送操作时,往 USART_DR 写入数据会自动存储在 TDR 内;当进行读取操作时,向 USART_DR读取数据会自动提取 RDR 数据。TDR 和 RDR 都是介于系统总线和移位寄存器之间。串行通信是一个位一个位传输的,发送时把 TDR 内容转移到发送移位寄存器,然后把移位寄存器数据每一位发送出去,接收时把接收到的每一位顺序保存在接收移位寄存器内然后才转移到 RDR。USART 支持 DMA 传输,可以实现高速数据传输。
③控制器
USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。使用 USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART,UE 位用来开启供给给串口的时钟。发送或者接收数据字长可选 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 个停止位用于智能卡模式。
④分数波特率的生成
波特率指数据信号对载波的调制速率,用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与比特率相等,波特率越大,传输速率越快。
fck为 给外设的时钟, USARTDIV 是一个无符号的定位数,这12的值在波特率寄存(USART_BRR)中进行配置。
1.5、USART的使用
1.USART基本配置流程
(1)声明GPIO和USART初始化结构体
(2)开启GPIO及串口时钟
(3)设置IO引脚功能为复用推挽输出和浮空输入
(4)设置波特率
(5)设置数据格式:数据位、停止位、校验位
(6)设置串口模式
(7)完成串口设置
(8)使能串口
2.USART常用库函数
3.USART应用实例
1.6串行通信接口抗干扰设计
STM32串行口的输入、输出均为TTL电平。但是抗干扰性差、传输距离短。为了提高串行通信的可靠性,增大串行通信的距离,一般都采用标准串行接口。如用RS-232、RS-485等来实现串行通信。
经典电路
注:TX、RX引脚均需上拉电阻
接收:默认没有数据时,TX为高电平,三极管导通,RE低电平使能,RO收数据有效,芯片max485为接收状态。
发送:TX先下拉一个电平,表示开始发送数据,三极管截止,DE高电平发送使能。当发送数据“0”时,由于DI引脚接地,数据“0”发送到A、B口,又由于A-B<0,传输数据“0”,以此完成低电平数据传输。当发送数据“1”时,三极管导通,max485处于高阻态(芯片处于发送阶段,芯片不会接收,处于高阻态),此时状态通过A、B的上下拉电阻决定,此时A-B>0传输数据“1”,完成高电平传输。