串口通信技术与编程应用_第1页
串口通信技术与编程应用_第2页
串口通信技术与编程应用_第3页
串口通信技术与编程应用_第4页
串口通信技术与编程应用_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

串口通信技术与编程应用7.1USART的功能和内部结构7.2USART的寄存器7.3USART的收发格式7.4USART波特率的设置7.5USART硬件流控制7.6USART中断请求与模式配置7.7USART编程应用实例

7.1USART的功能和内部结构

7.1.1USART的主要功能

USART提供了一种灵活的方法与工业标准的异步串行数据格式以外的外部设备进行全双工数据交换。USART利用分数波特率发生器提供较宽范围的波特率参数选择。同时它也支持同步单向通信和单线半双工通信,支持LIN(局域互联网)、智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器CTS/RTS操作。它还允许多个处理器之间进行数据通信,通过使用多缓存配置的DMA方式,实现高速数据通信。

USART1接口通信速率可达4.5 Mb/s,其他接口的通信速率可达2.25 Mb/s。USART1、USART2和USART3接口具有硬件的CTS和RTS信号管理,兼容ISO7816的智能卡模式和SPI通信模式。除UART5外,所有其他接口都可以使用DMA操作。1.异步模式

(1)总线在发送或接收前应处于空闲状态。

(2)一个起始位。

(3)一个数据字(8位或9位),最低有效位在前。

(4) 0.5、1.5、2个停止位,由此表明数据帧的结束。

(5)使用分数比特率发生器(12位整数和4位小数的表示方法)。

(6)独立的发送器和接收器使能位。

(7)接收缓冲器满、发送缓冲器空和传输结束标志。

(8)溢出错误、噪声错误、帧错误和校验错误标志。

(9)硬件数据流控制。

(10)一个状态寄存器(USART_SR)。

(11)数据寄存器(USART_DR)。

(12)一个比特率寄存器(USART_BRR),12位的整数和4位小数。

(13)一个智能卡模式下的保护时间寄存器(USART_GTPR)。

2.同步模式

同步模式需要用到SCLK信号,作为发送器同步传输的时钟输出引脚。数据可在Rx引脚上利用SCLK信号同步接收。SCLK时钟相位和极性都可用软件编程。在智能卡通信模式中,SCLK为智能卡提供同步时钟。

3.IrDA传输模式需要的引脚

(1) IrDA_RDI为IrDA模式下的数据输入。

(2) IrDA_TDO为IrDA模式下的数据输出。

4.硬件流控制模式中需要的引脚

(1) nCTS引脚为清除发送信号。若nCTS是高电平,在当前数据传输结束时,可阻断下一次的数据发送。

(2) nRTS引脚为发送请求信号。若nRTS是低电平,表明USART已准备好接收数据。

图7.1是几种典型的串口通信功能示意图。图7.1几种典型的串口通信方式示意图7.1.2USART的内部结构

接口通常通过3个引脚(Rx、Tx和GND)与其他设备连接在一起。任何USART双向通信至少需要两个引脚:接收数据输入(Rx)和发送数据输出(Tx)。

Rx通过采样技术区别数据和噪声,从而恢复数据。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,Tx引脚处于高电平。USART硬件结构可分为发送与接收、控制、中断和波特率发生器4个部分。1.发送与接收部分

USART发送与接收部分电路结构如图7.2所示。图7.2USART发送与接收部分电路结构图

当需要发送数据时,内核(或DMA外设)把数据从内存(变量)写入发送数据寄存器TDR,之后发送控制器自动把数据从TDR加载到发送移位寄存器中,然后通过串口线Tx,把数据逐位地从Tx引脚发送出去。在数据从TDR转移到移位寄存器时,会产生发送寄存器TDR已空事件TXE。当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC。这些事件可以在状态寄存器中查询到。

而接收数据则是一个逆过程,数据从串口线Rx引脚逐位地输入接收移位寄存器中,然后自动地把数据转移到接收数据寄存器RDR,最后用软件(或DMA)读取到内存(变量)中。

2.控制及中断部分图7.3USART控制及中断部分电路结构图

发送器与接收器控制部分,包括USART三个控制寄存器(CR1、CR2和CR3)及一个状态寄存器(SR)。该部分通过向寄存器写入各种控制参数来控制发送和接收状态(如奇偶校验位、停止位等),还包括对USART中断的控制。串口的状态在任何时候都可以从状态寄存器中查询到。

3.波特率发生器

USART波特率发生器包括发送器波特率控制、接收器波特率控制和波特率时钟分频器等部分,其结构如图7.4所示。图7.4USART波特率发生器结构图7.2USART的寄存器图7.5USART寄存器地址映像及复位值

7.3USART的收发格式

在STM32xx系列ARM处理器中,用户可以通过设置USART_CR1寄存器中的M标志位来选择是8bit字长还是9bit字长。USART串口通信中字符长度的设置如图7.6所示。图7.6USART字符长度的设置

在USART串口数据通信过程中,Tx引脚在起始位期间一直保持低电平,而在停止位期间则保持高电平。

在数据帧中,空闲符被认为是一个全“1”的帧,其后紧跟着包含数据的下一个帧的起始位。而间隙符是一个帧周期全接收到“0”的数。在间隙帧之后,发送器会自动插入一个或者两个停止位,即逻辑“1”,用于应答起始位。

需要指出的是,发送和接收数据都是通过波特率产生器驱动的。当发送者和接收者的使能位均被设置为“1”时,则会为彼此分别产生驱动时钟。7.3.1USART的发送器

1.字符发送

在USART发送数据的过程中,Tx引脚先出现最低有效位。在这种模式下,USART_DR寄存器包含了一个与内部总线和发送移位寄存器之间的缓冲寄存器,即TDR。在字符发送过程中,每个字符之前都有一个逻辑低电平的起始位,用来分隔发送的字符数目。

在USART串口发送字符的过程中,TE标志位在数据发送期间不能复位(如果数据发送期间复位标志TE,将会破坏Tx发送引脚上的数据信息,因为此时波特率计数器将被冻结,当前发送的数据将丢失)。在TE标志位使能之后,USART串口将发送一个空闲帧。

2.可配置的停止位

在USART串口通信的过程中,每个字符所带的停止位的个数可以通过控制寄存器2中的第12位和第13位进行配置,如图7.7所示。具体配置的内容如下:

(1) 1个停止位。系统默认停止位数目为1个停止位。

(2) 2个停止位。通常情况下,USART在单线和调制解调器模式下支持2个停止位。

(3) 0.5个停止位。当USART处于智能卡模式下接收数据的时候支持0.5个停止位。

(4) 1.5个停止位。当USART处于智能卡模式下发送数据的时候支持1.5个停止位。

USART通信过程中空闲帧的发送已经包含了停止位。间隙帧可以是10个低位(标志位M=0)之后加上1个对应配置的停止位,也可以是11个低位(标志位M=l)之后加上1个配置的停止位。但是,不能发送长度大于10或11个低位的长间隙。

用户可以通过以下步骤实现对USART通信停止位的设置:

(1)通过将USART_CR1寄存器中的UE标志位设置为1来使能USART串口通信功能。

(2)通过配置USART_CR1寄存器中的M标志位来定义字长(当标志位M=0时,字长为10;当标志位M=1时,字长为11)。

(3)停止位的个数可通过USART_CR2寄存器配置。

(4)如果用户釆用多缓冲通信,则需要选择USART_CR3寄存器中的DMA使能位,即DMAT标志位。用户可以按照多缓冲通信的方式配置DMA寄存器。

(5)通过设置USART_CR1寄存器中的TE标志位发送一个空闲帧作为第一次数据发送。

(6)通过USART_BRR寄存器选择数据通信的波特率。

(7)向USART_DR寄存器中写入需要发送的字符(这个操作会清除TXE标志位),停止位就会自动加在字符的末端。图7.7USART通信中的停止位

3.单字节通信

在USART单字节通信过程中,清除TXE标志位一般都是通过向数据寄存器中写入数据来完成的。但TXE标志位是由系统硬件所设置的,且该标志位用来表明以下内容:

(1)数据已经从TDR中转移到移位寄存器,数据发送已经开始。

(2) TDR寄存器是空的。

(3)数据已写入USART_DR寄存器,而且不会覆盖前面的数据内容。

如果TXEIE标志位为1,则表明将产生一个中断。

如果USART接口没有进行数据发送,用户向USART_DR寄存器中写入一个数据,该数据将直接被放入移位寄存器中。在发送开始的时候,TXE标志位也将被设置为1。当一个数据帧发送完成,即在结束位之后,TC标志位将被设置为1。如果USART_CR1寄存器中的TCIE标志位被设置为1,将产生一个中断。

用户可以通过软件的方式来清除TC标志位,具体操作步骤如下:

(1)读一次USART_SR寄存器。

(2)写一次USART_DR寄存器。

4.间隙字符

在USART通信过程中,用户可以通过设置SBK标志位来发送一个间隙字符。间隙帧的长度与标志位M有关。

如果SBK标志位被设置为1,在完成当前的数据发送之后将在Tx线路上发送一个间隙字符。间隙字符发送完成后,由硬件对SBK标志位进行复位。USART在最后一个间隙帧的末端插入一个逻辑1,从而保证下一个帧的起始位能够被识别。

7.3.2USART的接收器

USART通信接口中的接收器可以接收8位或9位的数据。同样,数据字的长度取决于USART_CR1寄存器中的M标志位。

1.字符接收

在USART数据通信接收期间,Rx引脚最先接收到最低有效位。在这种模式下,USART_DR寄存器由一个内部总线和接收位移寄存器之间的缓冲区RDR构成。

有关USART字符接收的具体流程如下。

(1)通过将USART_CR1寄存器中的UE标志位设置为1来使能USART。

(2)通过配置USART_CR1寄存器中的M标志位来定义字长。

(3)通过USART_CR2寄存器配置停止位的个数。

(4)如果发生多缓冲通信,则选择USART_CR3寄存器中的DMA使能位,即DMAT标志位,按照多缓冲通信中的配置方法来设置DMA寄存器。

(5)通过波特率寄存器USART_BRR来选择合适的波特率。

(6)将USART_CR1寄存器中的RE标志位设置为1,即能使接收器开始寻找起始位。

在USART通信接口中接收到一个字符的时候,系统将执行如下操作:

(1) RXNE标志位被设置为1,表明移位寄存器中的内容被转移到RDR,即数据已经接收到并且可供读取。

(2)如果RXNEIE标志位被设置为1,系统将产生一个中断。

(3)在数据接收期间如果发现帧错误、噪声或溢出错误,则错误标志将会被设置为1。

(4)在多缓冲接收过程中,RXNE在每接收到一个字节之后都会被设置为1,并通过DMA读取数据寄存器来消除该标志位。

(5)在单缓冲模式下,对RXNE标志位的清除是由软件读取USART_DR寄存器来完成的。RXNE标志位也可通过直接对其写0进行清除。但需要注意的是,RXNE标志位必须在下一个字符接收完成前被清除,否则将产生溢出错误。

2.溢出错误

当USART通信接口接收到一个字符,而RXNE标志位还没有被复位时,系统将出现溢出错误。换而言之,在RXNE标志位被清除之前数据不能从移位寄存器转移到RDR寄存器。

在每次收到一个字节的数据后,RXNE标志位都会被设置为1。如果在下一个字节已经被接收或者前一次DMA请求尚未得到服务响应的时候,RXNE置位同样会产生一个溢出错误。在发生溢出时会发生以下情况:

(1) ORE标志位被设置为1。

(2) RDR中的内容不会丢失,用户在读取USART_DR寄存器的时候,前一个数据仍然保持有效。

(3)移位寄存器将被覆盖,在此之后所有溢出期间接收到的数据都将丢失。

(4)如果RXNEIE标志位被设置为1或EIE的DMAR标志位被设置为1,系统将产生一个中断。

(5)用户可以通过对USART_SR寄存器进行读数据操作后再继续读USART_DR寄存器来实现对ORE标志位的复位操作。

3.噪声错误

在ARM处理器中,可以通过“过采样”技术有效输入数据和噪声,从而实现数据恢复(不可以在同步模式下使用)。

当在USART数据帧中检测到噪声时,将产生以下动作状态:

(1) NE标志位在RXNE位的上升沿被设置为1。

(2)无效的数据从移位寄存器转移到USART_DR寄存器。

(3)如果是单字节通信,将不会产生中断,但NE标志位将和自身产生中断的RXNE标志位一起作用。

(4)在多缓冲通信中,如果USART_CR3寄存器中的EIE标志位被设置为1,将导致一个系统中断。

(5)用户可以通过依次读取USART_SR寄存器和USART_DR寄存器的方式对NE标志位进行复位。

7.4USART波特率的设置

波特率是每秒钟传送二进制数的位数,单位为位/秒(bitpersecond,bps)。波特率是串行通信的重要指标,用于表征数据传输的速度,但与字符的实际传输速度不同。字符的实际传输速度是指每秒钟内所传字符帧的帧数,与字符帧格式有关。例如,波特率为1200 b/s的通信系统,若采用11数据位字符帧,则字符的实际传输速度为1200/11=109.09帧/秒,每位的传输时间为1/1200秒。

接收器和发送器的波特率在USARTDIV中的整数和小数位中的值应设置成相同的。波特率通过USART_BRR寄存器来设置,包括12位整数部分和4位小数部分。USART_BRR寄存器格式如图7.8所示。图7.8USART_BRR寄存器格式

图7.8中,位0~位3定义了USART波特率分频器除法因子(USARTDIV)的小数部分。位4~位15定义了USAKT波特率分频器除法因子(USARTDIV)的整数部分。

发送和接收的波特率计算公式如下:

波特率=fPCLKx/(16×USARTDIV)

式中,fPCLKx(x=1,2)是外设的时钟,PCLK1用于USART2、USART3、USART4和USART5,PCLK2用于USART1。USARTDIV是一个无符号的定点数。例7.1要求USARTDIV=25.62d,就有

DIV_Fraction=16×0.62d=9.92d,近似等于10d=0x0A

DIV_Mantissa=mantissa(25.620d)=25d=0x19

所以,USART_BRR=0x19A。

例7.2要求USARTDIV=50.99d,就有

DIV_Fraction=16×0.99d=15.84d≈16d=0x0

DIVMantissa=mantissa(50.990d)=50d=0x32

所以,USART_BRR=0x330。

7.5USART硬件流控制

串口之间在传输数据时,经常会出现数据丢失的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通信,若接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。为了解决数据丢失现象,USART中设计了硬件流控制。当接收端数据处理能力不足时,就发出“不再接收”的信号,发送端即停止发送,直至收到“可继续发送”的信号后再发送数据。因此,硬件流控制可以控制数据传输的进程,防止数据的丢失。硬件流控制常用的有RTS/CTS(请求发送/清除发送)流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。用RTS/CTS流控制时,应将通信两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来协调数据的发送,而数据通信设备(如调制解调器)则用CTS来启动和暂停来自计算机的数据流。

利用nCTS输入和nRTS输出可以控制两个设备之间的串行数据流。两个串口之间的硬件流控制连线如图7.9所示。图7.9两个串口之间的硬件流控制

1.RTS流控制

如果RTS流控制被使能(RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效(低电平)。当接收寄存器内有数据到达时,nRTS被释放,由此表明希望在当前帧结束时停止数据传输。

2.CTS流控制

如果CTS流控制被使能(CTSE=1),发送器在发送下一帧前检查nCTS输入。如果nCTS有效(低电平),则下一个数据被发送(假设那个数据是准备发送的,即TXE=0),否则下一帧数据不被发送出去。若nCTS在传输期间变成无效,当前的传输完成后即停止发送。当CTSE=1时,只要nCTS输入变换状态,硬件就自动设置CTSIE状态位,它表明接收器是否已准备好进行通信。如果设置了USART_CR3寄存器的CTSIE位,则产生中断。7.6USART中断请求与模式配置

USART的各种中断事件被连接到同一个中断向量。有以下几种中断事件:

(1)发送期间的中断事件包括发送完成、清除发送和发送数据寄存器空。

(2)接收期间的中断事件包括闲总线检测、溢出错误、接收数据寄存器非空中断、检验错误、LIN断开符号检测、噪声标志(仅在多缓冲器通信)和帧错误(仅在多缓冲器通信)。

(3)如果设置了对应的使能控制位,这些事件就会产生各自的中断。

USART各种中断事件逻辑如图7.10所示。图7.10USART中断逻辑图

7.7USART编程应用实例

7.7.1串口通信应用基础

1.串口连接

STM32F103x4/6系列器件有两个同步/异步串口(USART1和USART2),STM32F103xC/D/E有5个串口(USART1、USART2、USART3、UART4和UART5)。在STM32处理器中,串口引脚往下兼容(即同名的串口引脚接线相同)。图7.11是STM32F103x系列器件的5个默认串口连接示意图。在硬件设计中如不需要硬件流控制,可不连接nCTS和nRTS信号线。

图7.11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论