理论教育 STM32单片机USART功能简介

STM32单片机USART功能简介

时间:2023-11-09 理论教育 版权反馈
【摘要】:图4.16USART功能框图1.功能引脚见图4.16中①部分。任何USART双向通信至少需要上述两个脚。USART只是异步功能传输时,仅用TX、RX引脚。发送器当USART_CR1寄存器的发送使能位TE置1时,启动数据发送。2个停止位适用于正常USART模式、单线模式和调制解调器模式;0.5个和1.5个停止位用于智能卡模式。如果USART_CR1寄存器的TCIE位置1,将产生中断。接收器如果将USART_CR1寄存器的RE位置1,使能USART接收,使得接收器在RX线开始搜索起始位。

STM32单片机USART功能简介

STM32F103x增强型系列产品中,内置了3个通用同步/异步收发器(USART1、USART2和USART3)和2个通用异步收发器(UART4和UART5)。这5个接口提供异步通信、支持IrDA SIR ENDEC传输编解码、多处理器通信模式、单线半双工通信模式和LIN主/从功能。

USART1的时钟来源于APB2总线时钟,最大频率为72MHz,接口通信速率可达4.5兆位/秒,其他4个USART时钟来源于APB1总线时钟,最大频率为36MHz,接口的通信速率可达2.25兆位/秒。USART1、USART2和USART3接口具有硬件的CTS和RTS信号管理、兼容ISO7816的智能卡模式和类SPI通信模式,除了UART5之外所有其他接口都可以使用DMA操作。

对于USART的使用,功能框图是最核心的内容,掌握了功能框图就对USART就有了一个整体的把握,在编程时思路就很清晰。USART功能框图如图4.16所示。

图4.16 USART功能框图

1.功能引脚

见图4.16中①部分。

RX:接收数据串行输入。通过过采样技术来区别数据和噪音,从而恢复数据。

TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

任何USART双向通信至少需要上述两个脚。

SCLK:发送器时钟输出。此引脚输出用于同步传输的时钟(在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲),数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,SCLK可以为智能卡提供时钟。

IrDA_IN:IrDA模式下的数据输入。

IrDA_OUT:IrDA模式下的数据输出。

以上两引脚仅在IrDA模式里需要。

nCTS:清除发送(Clear To Send),如果时能CTS流控制,发送器在发送下一帧数据之前会检测nCTS引脚;如果低电平,表示可以发送数据;若是高电平,在当前数据传输结束时阻断下一次的数据发送。

nRTS:发送请求(Request To Send),如果时能RTS流控制,若是低电平,表明USART准备好接收数据;当接收寄存器已满时,nRTS将被设置为高电平。

以上两引脚仅在硬件流控模式中需要。

SW_RX数据接收引脚,只用于单线和智能卡模式,属于内部引脚。

USART只是异步功能传输时,仅用TX、RX引脚。

USART模式设置如表4.5所示。

表4.5 USART模式设置

◎:支持,●:不支持该应用

STM32F103x系列USART引脚分布如表4.5所示。

表4.5 STM 32F103x系列USART引脚分布表

注:①无重映像/完全重映像/部分重映像。
②无重映像/重映像。
③部分重映像只适用于64、100和144脚的封装。
④重映像只适用于100和144脚的封装。

2.数据寄存器

见图4.16中②部分。

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。

USART支持DMA传输,可以实现高速数据传输。

3.控制器

见图4.16中③部分。

USART有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等。使用USART之前需要向USART_CR1寄存器的UE位置1,使能USART。发送或者接收数据字长可选8位或9位,由USART_CR1的M位控制。

(1)发送器

当USART_CR1寄存器的发送使能位TE置1时,启动数据发送。发送移位寄存器的数据会在TX引脚输出,如果是同步模式,SCLK也输出时钟信号。

一个字符帧发送需要3个部分:起始位+数据帧+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的8位或9位数据,数据是从低位开始传输的;停止位是一定时间周期的高电平。

停止位时间长短是可以通过USART控制寄存器2(USART_CR2)的位13、12进行编程,可选0.5个、1个、1.5个和2个停止位。默认使用1个停止位。2个停止位适用于正常USART模式、单线模式和调制解调器模式;0.5个和1.5个停止位用于智能卡模式。

字长可以通过编程USART_CR1寄存器中的M位,选择成8或9位,具体发送字符时序图如图4.17所示。

当发送使能位TE置1之后,发送器先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往USART_DR寄存器写入要发送的数据。在写入最后一个数据后,需要等待USART状态奇存器(USART_SR)的TC位为1,表示数据传输完成。如果USART_CR1寄存器的TCIE位置1,将产生中断。

图4.17 字符发送时序图

在发送数据时,编程的时候有几个比较重要的标志位,具体功能如下。

TE:发送使能。

TXE:发送寄存器为空,发送单个字节的时候使用。

TC:发送完成,发送多个字节数时候使用。

TXIE:发送完成中断使能。

(2)接收器

如果将USART_CR1寄存器的RE位置1,使能USART接收,使得接收器在RX线开始搜索起始位。在确定起始位后就根据RX线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到RDR内,并把USART_SR寄存器的RXNE位置1;同时,如果USART_CR2寄存器的RXNEIE置1的话,可以产生中断。

在接收数据时,编程的时候有几个比较重要的标志位,具体功能如下。

RE:接收位。(www.daowen.com)

RXNE:读数据寄存器非空。

RXNEIE:发送完成中断使能。

为得到一个信号真实情况,需要用一个比这个信号频率高的采样信号去检测,这称为过采样。这个采样信号的频率大小决定最后得到的源信号准确度,一般频率越高得到的准确度越高。但为了得到越高频率,采样信号也越困难,运算和功耗等也会增加。所以一般选择合适就好。

接收器可配置为不同的过采样技术,以实现从噪声中提取有效的数据。USART_CR1寄存器的OVER8位用来选择不同的采样方法,如果OVER8位设置为1采用8倍过采样,即用8个采样信号采样位数据;如果OVER8位设置为0,则采用16倍过采样,即用16个采样信号采样一位数据。

USART的起始位检测需要用到特定序列。如果在RX线识别到该特定序列,就认为是检测到了起始位。起始位检测对使用16倍或8倍过采样的序列都是一样的。该特定序列为1110X0X0X0000,其中“X”表示电平任意,1或0皆可。

16倍采样过程如图4.18所示。

图4.18 16倍采样过程

4.分数波特率的生成

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位为bit/s(bps)。对于USART波特率与比特率相等的情况,就不区分这两个概念。波特率越大,传输速率越快。

USART的发送器和接收器使用相同的波特率,计算公式如下:

其中,fCK为USART时钟,参考表4.5的值,USARTDIV是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。其中高16位保留,硬件强制为0,[15:4]位存放DIV_Mantissa[11:0]的值(USARTDIV的整数部分),[3:0]位存放DIV_Fraction[3:0]的值(USARTDIV的小数部分)。对上述参数进行设置便可得到相应的波特率。

例如:DIV_Mantissa=234,DIV_Fraction=6(即USART_BRR=0x0EA6),则:

波特率=36000000/(16×234.375)=9600 (USART2、USART3、USART4、USART5)

又例如:使用USART1,波特率为923.076Kbps

则:923076=72000000/(16*USARTDIV) USARTDIV=4.875

注意:在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行中改变波特率寄存器的数值。

在计算DIV Fraction时经常出现小数情况,经过我们取舍得到整数,这样会导致最终输出的波特率较目标值略有偏差。设置常用波特率时的误差计算如表4.6所示。

表4.6 设置常用波特率时的误差计算表

注:①CPU的时钟频率越低,则某一特定波特率的误差也越低。可以达到的波特率上限可以由这组数据得到;②只有USART1使用PCLK2(最高72MHz)。其他USART使用PCLK1(最高36MHz)。

5.校验控制

STM32F103xx系列控制器的USART支持奇偶校验。当使用校验位时,串口传输的长度将是8位的数据帧加上1位的校验位,总共9位,此时USART_CR1寄存器的M位端要设置为1,即9数据位。将USART_CR1寄存器的PCE位置1就可以启动奇偶校验控制,奇偶校验由硬件自动完成。启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位。接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会将USART_SR寄存器的PE位置1,并可以产生奇偶校验中断。

奇偶校验控制后,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。

6.中断控制

USART有多个中断请求事件,具体见表4.7所示。

表4.7 USART支持的中断请求表

7.多处理器通信

通过USART可以实现多处理器通信(将几个USART连在一个网络里)。例如,某个USART设备可以是主,它的TX输出和其他USART从设备的RX输入相连接;USART从设备各自的TX输出逻辑在一起,并且和主设备的RX输入相连接。

在多处理器配置中,我们通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就可以减少由未被寻址的接收器的参与带来的多余的USART服务开销。

未被寻址的设备可启用其静默功能置于静默模式。在静默模式里:

①任何接收状态位都不会被设置。

②所有接收中断被禁止。

③USART_CR1寄存器中的RWU位被置1。RWU可以被硬件自动控制或在某个条件下由软件写入。

根据USART_CR1寄存器中的WAKE位状态,USART可以用两种方法进入或退出静默模式。

①如果WAKE位被复位:进行空闲总线检测。

②如果WAKE位被设置:进行地址标记检测。

(1)空闲总线检测(WAKE=0)

当RWU位被写1时,USART进入静默模式。当检测到一空闲帧时,它被唤醒。然后RWU被硬件清零,但是USART_SR寄存器中的IDLE位并不置起。RWU还可以被软件写0。图4.19给出利用空闲总线检测来唤醒和进入静默模式的一个例子。

(2)地址标记(addressmark)检测(WAKE=1)

在这个模式里,如果MSB是1,该字节被认为是地址;否则,被认为是数据。在一个地址字节中,目标接收器的地址被放在4个LSB中。这个4位地址被接收器同它自己地址做比较,接收器的地址被编程在USART_CR2寄存器的ADD。

图4.19 利用空闲总线检测的静默模式

如果接收到的字节与它的编程地址不匹配时,USART进入静默模式。此时,硬件设置RWU位。接收该字节既不会设置RXNE标志,也不会产生中断或发出DMA请求,因为USART已经在静默模式。

当接收到的字节与接收器内编程地址匹配时,USART退出静默模式。然后RWU位被清零,随后的字节被正常接收。收到这个匹配的地址字节时将设置RXNE位,因为RWU位已被清零。当接收缓冲器不包含数据时(USART_SR的RXNE=0),RWU位可以被写0或1。否则,该次写操作被忽略。图4.19所示为利用地址标记检测来唤醒和进入静默模式的例子。

在图4.20中,当前的接收器地址是1(配置在USARVCR2寄在器中)。

图4.20 利用地址标记检测的静默模式

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈