第14章USART收发器一、USART的结构1、主要特点全双工异步通信;NRZ标准格式;分数波特率发生器系统,最高达4.5Mbits/s;可编程数据字长度(8位或9位);可配置的停止位-支持1或2个停止位;LIN主发送同步断开符的能力以及LIN从检测断开符的能力;IRDASIR编码器解码器,在正常模式下支持3/16位的持续时间;智能卡模拟功能,智能卡接口支持ISO7816-3标准里定义的异步协议智能卡,智能卡用到的0.5和1.5个停止位;单线半双工通信;使用DMA的可配置的多缓冲器通信;检测标志,接收缓冲器满,发送缓冲器空,传输结束标志;校验控制,发送校验位,对接收数据进行校验;四个错误检测标志:溢出错误,噪音错误,帧错误,校验错误;10个带标志的中断源;CTS改变,LIN断开符检测,发送数据寄存器空,发送完成,接收数据寄存器满,检测到总线为空闲,溢出错误,帧错误,噪音错误,校验错误;多处理器通信,如果地址不匹配,则进入静默模式从静默模式中唤醒(通过空闲总线检测或地址标志检测);两种唤醒接收器的方式,地址位(MSB),空闲总线;2、管脚定义RX:接收数据串行输入,通过过采样技术来区别数据和噪音,从而恢复数据;TX:发送数据输出,当发送器被激活,并且没数据发送时,TX引脚处于高电平;SCLK:发送器时钟输出,用于同步传输的时钟;IrDA_RDI:IrDA模式下的数据输入;IrDA_TDO:IrDA模式下的数据输出;nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送;nRTS:发送请求,若是低电平,表明USART准备好接收数据;3、USART的结构图二、USART特征描述(一)发送器当发送使能位(TE)被设置时,发送移位寄存器中的数据在TX脚上输出,相应的时钟脉冲在SCLK脚上输出。1、数据字长:发送器发送8位或9位的数据字。2、可配置的停止位1个停止位:停止位位数的默认值;2个停止位:可用于常规USART模式、单线模式以及调制解调器模式;0.5个停止位:在智能卡模式下接收数据时使用;1.5个停止位:在智能卡模式下发送数据时使用。3、单字节通信过程清零TXE位总是通过对数据寄存器的写操作来完成的,TXE位由硬件来设置,它表明:数据已经从TDR移送到移位寄存器,数据发送已经开始;TDR寄存器被清空,下一个数据可以被写进USART_DR寄存器而不会覆盖先前的数据;如果TXEIE位被设置,此标志将产生一个中断。(二)接收器1、数据格式应与发送器配置的相同;2、字符接收,当一字符被接收到时:RXNE位被置位,表明移位寄存器的内容被送到RDR;如果RXNEIE位被设置,产生中断;在接收期间当检测到任何错误,错误标志将置位;在多缓冲器通信时,RXNE在每个字节接收后被置位,并由DMA对数据寄存器的读操作而清零;在单缓冲器模式里,由软件读USART_DR寄存器完成对RXNE位清除。3、错误状态溢出错误;噪音错误(采样值为000或111时为有效数据,其它为噪音干扰,产生噪音错误);帧错误;(三)分数波特率的产生1、分数波特率的计算方法接收器和发送器(Rx和Tx)的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。Tx/Rx波特率=fck/(16*USARTDIV)这里的fck是给外设的时钟;USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。如何从波特率寄存器BRR的值得到USARTDIV的值例:设BRR=1BCh,则:DIV_Mantissa=27dDIV_Fraction=12d于是Mantissa(USARTDIV)=27dFraction(USARTDIV)=12/16=0.75d所以USARTDIV=27.75d如何从波特率除数USARTDIV的值得到BRR的值例:设USARTDIV=25.62d,就有:DIV_Fraction=16*0.62d=9.92d近似等于10d=Ah则:DIV_Mantissa=mantissa(25.620d)=25d=19h于是BRR=19Ah误差%置于波特率寄存器中的值实际误差%置于波特率寄存器中的值实际Kbps序号fCPU=40MHzfCPU=10MHz波特率0.94%2.6875930.232不可能不可能不可能921.68-0.22%5.4375459.77-1.36%1.375454.545460.87-0.22%10.875229.885-0.94%2.6875232.558230.460.06%21.6875115.274-0.22%5.4375114.942115.250.06%43.37557.637-0.22%10.87557.47157.64-0.02%130.187519.203-0.03%32.562519.19319.23-0.01%260.43759.599-0.04%65.1259.5969.620.04%1041.68752.3999-0.04%260.43752.3992.412、设置波特率时的误差计算(四)同步模式1、同步模式的设置通过在USART_CR2寄存器上写CLKEN位选择同步模式,在同步模式里,下列位必须保持清零状态:USART_CR2寄存器中的LINEN位;USART_CR3寄存器中的SCEN,HDSEL和IREN位;2、同步模式的特点USART允许用户以主模式方式控制双向同步串行通信。SCLK脚是USART发送器时钟的输出,在起始位和停止位期间,SCLK脚上没有时钟脉冲。根据USART_CR2寄存器中LBCL位的状态,决定在最后一个有效数据位期间产生或不产生时钟脉冲。USART_CR2寄存器的CPOL位允许用户选择时钟极性,USART_CR2寄存器上的CPHA位允许用户选择外部时钟的相位。在总线空闲期间,实际数据到来之前以及发送断开符号的时候,外部SCLK时钟不被激活。同步模式时,USART发送器和异步模式里工作一模一样。但是因为SCLK是与TX同步的(根据CPOL和CPHA),所以TX上的数据是随SCLK同步发出的。同步模式的USART接收器工作方式与异步模式不同。数据在SCLK上采样(根据CPOL和CPHA决定上/下降沿采样),不需要过采样。但必须考虑建立时间和持续时间(取决于波特率,1/16位时间)。3、采样时钟极性的选择USART数据时钟时序示例(M=0)USART数据时钟时序示例(M=1)数据建立和保持时间同步传输的例子(六)利用DMA连续通信USART可以利用DMA连续通信,Rx缓冲器和Tx缓冲器的DMA请求可以分别产生。可以清零USART2_SR寄存器里的TXE/RXNE标志来实现连续通信。1、利用DMA发送使用DMA进行发送,可以通过设置USART_CR3寄存器上的DMAT位激活。只要TXE位被置位,DMA就能从SRAM中装载数据到USART_DR寄存器里。DMASWTRIGGERDMA请求ORADC1TIM2_CC3TIM4_CC1SWTRIGGERORUSART3_TXSWTRIGGERORSWTRIGGERORSWTRIGGERORSWTRIGGERORSWTRIGGEROR高优先级请求低优先级请求通道1TIM1_CC1TIM2_UPTIM3_CC3SPI1_RXUSART3_RXTIM1_CC2SPI1_TXTIM3_CC4TIM3_UPSPI2_RXI2C2_TXTIM1_CC4USART1_TXTIM1_CCUTIM1_TRIGTIM4_CC2USART1_RXTIM1_UPSPI2_TXI2C2_RXTIM2_CC1TIM4_CC3USART2_RXTIM1_CC3TIM3_CC1I2C1_TXTIM3_TRIGUSART2_TXTIM2_CC2TIM2_CC4TIM4_UPI2C1_RX通道2通道3通道4通道5通道6通道72、利用DMA接收使用DMA进行接收,可以通过设置USART_CR3寄存器的DMAR位激活。只要接收到一个字节,数据就从USART_DR寄存器放到配置成DMA的SRAM区域。3、多缓冲器通信中的错误标志和中断产生在多缓冲器通信的情况下,通信期间发生任何错误,在当前字节传输后将置位错误标志。如果中断使能位被设置,将产生中断。在单个字节接收的情况下,如果设置了错误标志中断使能,会在当前字节传输后,产生中断。(七)中断1、中断请求表:中断事件事件标志使能位发送数据寄存器空TXETXEIECTS标志CTSCTSIE发送完成TCTCIE接收数据就绪可读TXNETXNEIE检测到数据溢出ORE检测到空闲线路IDLEIDLEIE奇偶检验错PEPEIE断开标志LBDLBDIE噪声标志,多缓冲通信中的溢出错误和帧错误NE或ORT或FEEIEUSART的各种中断事件被连接到同一个中断向量2、USART中断映像图三、USART固件库函数USART_Init的使用方法函数原形voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct)功能描述根据指定的USART_InitStruct结构参数初始化USARTx接口.输入参数1USARTx:其中x可以是1,2或3.输入参数2USART_InitStruct:指向USART_InitTypeDef结构.USART_InitTypeDef结构:该结构定义在stm32f10x_usart.h文件中。typedefstruct{u32USART_BaudRate;u16USART_WordLength;u16USART_StopBits;u16USART_Parity;u16USART_HardwareFlowControl;u16USART_Mode;u16USART_Clock;u16USART_CPOL;u16USART_CPHA;u16USART_LastBit;}USART_InitTypeDef;下表描述的USART_InitTypeDef结构可以使用在同步和异步模式中的情况.Members异步模式同步模式USART_BaudRate√√USART_WordLength√√USART_StopBits√√USART_Parity√√USART_HardwareFlowControl√√USART_Mode√√USART_Clock√USART_CPOL√USART_CPHA√USART_LastBit√USART_WordLength参数设置发送和接收数据帧的长度.USART_WordLength描述USART_WordLength_8b8位数据USART_WordLength_9b9处理位数据USART_StopBits参数定义发送停止位的数目.USART_StopBits描述USART_StopBits_11位停止位USART_StopBits_0_50.5位停止位USART_StopBits_22位停止位USART_StopBits_1_51.5位停止位USART_Parity参数定义奇偶校验模式.USART_Parity描述USART_Parity_No禁止奇偶校验USART_Parity_Even奇校验USART_Parity_Odd偶校验USART_HardwareFlowControl参数使能或禁止指定的流控制.USART_HardwareFlowControl描述USART_HardwareFlowControl_NoneHFC禁止USART_HardwareFlowControl_RTSRTS使能USART_HardwareFlowControl_CTSCTS使能USART_HardwareFlowControl_RTS_CTSRTS和CTS使能USART_Mode参数使能或禁止指定的发送或接收.USART_Mode描述USART_Mode_Tx发送使能USART_Mode_Rx接收使能USAR