目录
一、串口——物理层(RS-232标准为例)
1.串口通信结构
两个通信设备的“DB9接口〞之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准”传输数据信号。由于RS-232电平标准的信号不能被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL标准”的电平信号,才能实现通信。
2.电平标准
常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0。
而为了增加串口通信的远距离传输及抗干扰能力,RS-232使用-15V表示逻辑1,+15V表示逻辑0。
3.计算机与调制调解器的信号线连接
二、串口——协议层
1.介绍
串口通信的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通信的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通信双方的数据包格式要约定一致才能正常收发数据。
2.串口数据包的组成
(1)波特率
异步通信中由于没有时钟信号 (如前面讲解的DB9接口中是没有时钟信号的),所以两个通信设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图中用虚线分开的每一格就代表一个码元。
(2) 通信的起始和停止信号
串口通信的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
(3) 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据。有效数据的长度常被约定为5、6、7或8位长。
(4) 数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验、偶校验、0校验、1校验以及无校验。
三、USART简介(通用同步异步收发器)
USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。还有一个UART,它是在USART基础上裁剪掉了同步通信功能, 只有异步通信。简单区分同步和异步就是看通信时需要不需要对外提供时钟输出,平时用的串口通信基本上都是UART。
串行通信一般是以帧格式传输数据,即一帧一帧地传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART就是对这些传输参数有具体规定,但参数值也不唯,很多都可以自定义设置,只是增强它的兼容性。
四、USART功能剖析
1.功能引脚
(1)TX:发送数据输出引脚。
(2)RX:接收数据输入引脚。
(3)SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
(4)nRTS:请求以发送 ,n表示低电平有效。如果使能RTS流控制,当USART接收器准备好接收新数据时,就会将nRTS变成低电平;当接收寄存器已满时,nRTS将被设置为高电平。该引脚只适用于硬件流控制。
(5)nCTS:清除以发送 ,n表示低电平有效。如果使能CTS流控制,发送器在发送下一帧数据之前会检测nCTS引脚,如果为低电平,表示可以发送数据;如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。
(6)SCLK:发送器时钟输出引脚。仅适用于同步模式。
2.数据寄存器
USART数据寄存器 (USART_DR) 只有低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。
3. 控制器
USART有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等。使用USART之前需要向USART_CR1寄存器的UE位置1使能USART,UE位用来开启供给串口的时钟。发送或者接收数据字长可选8位或9位,由USART_CR1的M位控制。
(1)发送器
一个字符帧发送需要3个部分:起始位、数据帧、停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是要发送的8位或9位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。
停止位时间长短 是可以通过USART控制寄存器2(USART_CR2)的STOP[1:0]位控制,可选0.5个、1个、1.5个和2个停止位。默认使用1个停止位。2个停止位适用于正常USART模式、单线模式和调制解调器模式。0.5个和1.5个停止位用于智能卡模式。
当USART_CR1寄存器的发送使能位TE置1时,启动数据发送,发送移位寄存器的数据会在TX引脚输出,低位在前,高位在后。发送器开始会先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往USART_DR寄存器写入要发送的数据。在写入最后一个数据后,需要等待USART状态寄存器(USART_SR) 的TC位为1,表示数据传输完成。如果USART_CR1寄存器的TCIE位置1,将产生中断。
重点标识位:
①TE:发送使能。
②TXE:发送寄存器为空,发送单个字节的时候使用。
③TC:发送完成,发送多个字节数据的时候使用。
④TXIE:发送完成中断使能。
(2)接收器
如果将USART_CR1寄存器的RE位置1,使能USART接收,使得接收器在RX线开始搜索起始位。在确定起始位后,就根据RX线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到RDR内,并把USART_SR寄存器的RXNE位置1。如果USART_CR2寄存器的RXNEIE置1的话可以产生中断。
重点标识位:
①RE:接收使能。
②RXNE:读数据寄存器非空。
③RXNEIE:发送完成中断使能。
4.波特率生成
其中,fPLCK为USART时钟,USARTDIV是一个存放在波特率寄存器(USART_BRR) 中的无符号定点数,DIV_Mantissa[11:0]位定义USARTDIV的整数部分,DIV_Fraction[3:0]位定义USARTDIV的小数部分。
选取USART1作为实例,即fPLCK=72MHz,得到115200bps的波特率?
为得到115200bps的波特率,解得USARTDIV=39.0625
可算得DIV_Fraction = 0.0625 x 16 = 1 = 0x01,DIV_Mantissa = 39 = 0x17
即USART_BRR的值为0x171
5.校验控制
STM32F103系列控制器USART支持奇偶校验。当使用校验位时,串口传输的长度将在8位的数据帧加上1位的校验位,总共9位,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位,此时USART_CR1寄存器的M位需要设置为1,即9数据位。
将USART_CR1寄存器的PCE位置1就可以启动奇偶校验控制,奇偶校验由硬件自动完成。启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会将USART_SR寄存器的PE位置1,并可以产生奇偶校验中断。
6.中断控制
可以结合之前的文章理解
嵌入式入门——串口(1)笔记:
http://t.csdnimg.cn/WhVV2http://t.csdnimg.cn/WhVV2嵌入式入门——串口(2)USART: