1、通信的基本概念
(1)串行通讯和并行通讯
按数据传输的方式,通讯可以分为串行通讯和并行通讯。
并行通信:数据各个位同时传输
优点:速度快
缺点:占用引脚资源多,通讯距离较近,抗干扰能力较弱
串行通信:数据按位顺序传输
优点:占用引脚资源少,通讯距离较远,抗干扰能力较强
缺点:速度相对较慢
由于并行传输对于同步要求你较高,且随着通讯速率的提升,信号干扰的问题会显著影响通讯性能。现在随着计数的发展,越来越多的应用场合采用高速率的串行差分传输。
(2)全双工、半双工及单工通讯
依据数据的传输方向,可以将通讯分为全双工、半双工以及单工,主要以信道的方向区分。
全双工:在同一时刻,两个设备之间可以同时收发数据。
半双工:两个设备之间可是收发数据,但是不能再同一时刻进行。
单工:在任何时刻都只能进行一个方向的通讯,即一个固定为发送设备,另一个固定为接受设备。
(3)同步通讯和异步通讯
依据数据的同步方式,分为同步和异步两种,可以根据通信过程中是否使用到时钟信号进行简单的区分。
同步通讯:收发设备双方使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。通讯中双方通常会统一规定在时钟信号的上升沿或下降沿对数据进行采样。
异步通讯:在通讯中不使用时钟信号进行数据同步,他们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据。某些通讯中还要双方约定数据的传输速率,以便更好的同步。
同步通讯中,数据传输内容绝大部分是有效数据,而异步通讯中会包含帧的各种标识符,所以同步通讯效率更高。
同步通讯双方的时钟误差允许误差较小,而异步通讯双方的时钟允许误差较大。
(4)通讯速率
衡量通讯性能的一个重要的参数就是通讯速率,通常以比特率来表示。
比特率,即每秒钟传输的二进制位数。单位比特每秒(bit/s)。
波特率,表示每秒钟传输了多少个码元。码元是通讯信号调制的概念。
2、串口通讯USART
(1)物理层
-
RS-232标准
串口通讯的物理层有很多标准机变种。RS-232标准主要规定了信号的用途,通讯接口以及信号的电平标准。

-
电平标准
根据通讯使用的电平标准不同,串口通讯可以分为TTL标准和RS-232标准。
5V TTL:逻辑1:2.4V~5V
逻辑0:0~0.5V
RS-232:逻辑1:-15V~-3V
逻辑0:+3V~+15V
常使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。
-
DB9接口
DB9接口就是常说的串口。

在目前的工业控制中使用的串口一般只使用RXD、TXD以及GND三条信号线,直接传输数据信号。
(2)协议层
串口通讯的协议层中规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成。
通讯双方的数据包格式要约定一致才能正常收发数据。
-
波特率
串口异步通讯中由于没有时钟信号,所以两个设备直接需要约定好波特率。常见的波特率为4800/9600/115200等。
-
通讯的起始和停止信号
数据包的起始信号由一个逻辑0的数据位表示,数据包的停止信号可由0.5/1/1.5/2个逻辑1的数据表示。
-
有效数据
有效数据的长度常被约定为5/6/7或8位长。
-
数据校验
有效数据之后,有一个可选的数据校验位。校验方法有奇校验(odd)。偶校验(even)、0校验(space)、1校验(Mark)以及无校验(noparity)。
3、STM32的USART
STM32芯片具有多个USART外设用于串口通信。
USART,即通用同步异步收发器。可以灵活地与外部设备进行全双工数据交换。
有别于USART,STM32还具有UART外设,UART在USART的基础上裁剪了同步通信功能,只有异步通讯。
我们平时用的串口通信基本都是UART。
USART满足外部设备对工业标准NRZ异步穿行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率。
USART支持同步单向通信和半双工单线通信,还支持局与互联网LIN,智能卡(SmartCard)协议和IrDA(红外线数据协会)SIR ENDEC规范。
USART支持使用DMA,可实现高速数据通信。
STM32的USART输出的是TTL电平信号,若需要RS-232标准的信号可使用MAX3232芯片进行转换。
(1)功能引脚
TX:发送数据输出引脚
RX:接收数据输入引脚
SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
nRTS:请求已发送,n表示低电平有效。
nCTS:清除以发送,n表示低电平有效。
SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

(2)数据寄存器
USART_DR数据寄存器,低9位有效,且第9位数据是否有效取决于控制寄存器1USART_CR1的M位设置,当M位为0表示8位数据字长,当M位为1时表示9位数据字长。一般使用8位数据字长。
USART_DR包含了已发送的数据或者接受的数据。USART_DR实际包含有两个寄存器,一个是专门用于发送的可写TDR,一个专门用于接受的可读RDR。
(3)控制器
USART有专门控制发送的发送器、控制接受的接收器,还有唤醒单元,中断控制等。
发送器
USART_CR1寄存器 UE位置1使能USART.
M位置0,8位数据字长,M位置1,9位数据字长。
TE位置1启动数据发送,发送移位寄存器的数据在TX引脚输出,同步模式时SCLK也输出时钟信号。
TCIE位置1,将产生中断。
USART_CR2寄存器 STOP盘[1:0]控制停止位的长短。默认1停止位,2个停止位适用于正常USART模式、单线模式和调制解调器模式。0.5个和1.5个停止位用于智能卡模式。
USART_SR USART状态寄存器。 在USART_DR寄存器写入最后一位数据之后,USART_SR的TC位置1,表示数据传输完成。
几个重要的标志位:
TE 发送使能
TXE 发送寄存器为空,发送单个字节的时候使用
TC 发送完成,发送多个字节数据的时候使用
TXIE 发送完成中断使能
接收器
USART_CR1的RE位置1,使能USART接受。
RX线开始搜索起始位。确定起始位后根据RX线电平状态把数据存放在接受移位寄存器内。
接受完后将接受移位寄存器的数据移到RDR内,并将USART_SR寄存器的RXNE位置1,如果USART_CR2寄存器的RXNEIE置1的话可以产生中断。
(4)小数波特率生成
波特率指数据信号对载波的调制速率。
USART波特率和比特率相等,波特率越大,传输速率越快。
USART的发送器和接收器使用相同的波特率。
波特率 = f_PLCK /(8*(2-OVER8)*USARTDIV)
f_PLCK为USART时钟。OVER8为USART_CR1寄存器的OVER8位对应的值。USARTDIV是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。
其中DIV_Mantissa[11:0]位定义USARTDIV的整数部分。DIV_Function[3:0]位定义USARTDIV的小数部分,DIV_Function[3]位只有在OVER8位为0时有效,否则必须为零。
例如:STM32F407ZGT6芯片的USART1和USART6使用APB2总线时钟,最高可达84MHz,即f_PLCK = 84MHz.
当使用16倍采样即OVER8 = 0,为得到115200bps波特率,此时:
115200 = 840000000 / 8*2 * USARTDIV.
USARTDIV = 45.57.DIV_Function = 0.57*16 = 9.12取整9,DIV_Function = 0x9,DIV_Mantissa= 45 = 0x2d.
即设置USART_BRR的值为0x2d9.
(5)校验控制/中断控制
USART_CR1的PCE位置1就可以启动奇偶校验控制,奇偶校验有硬件自动完成。当接受数据时如果出现奇偶校验位验证失败,会见USART_SR寄存器的PE位置1,并可以产生奇偶校验中断。
4、USART通信实践
(1)实验设计
实现开发板与电脑

最低0.47元/天 解锁文章
721

被折叠的 条评论
为什么被折叠?



