嵌入式系统设计(STM32)第5讲_第1页
嵌入式系统设计(STM32)第5讲_第2页
嵌入式系统设计(STM32)第5讲_第3页
嵌入式系统设计(STM32)第5讲_第4页
嵌入式系统设计(STM32)第5讲_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

第5讲USARTUSART:UniversalSynchronous&AsynchronousReceiverandTransmitterSTM32通用同步/异步收发器5.1串行通信相关概念5.2STM32的通用串口结构5.3串口相关寄存器5.5库函数5.6程序设计举例5.1串行通信相关概念串行通信:串行通信是指在单根数据线上将数据一位一位地依次传送。发送过程中,每发送完一个数据,再发送第二个,依此类推。接受数据时,每次从单根数据线上一位一位地依次接受,再把它们拼成一个完整的数据。在远距离数据通信中,一般采用串行通信方式,它具有占用通信线少、成本低等优点。同步和异步通信方式同步串行通信方式是指在相同的数据传送速率下,发送端和接受端的通信频率保持严格同步。

由于不需要使用起始位和停止位,可以提高数据的传输速率,但发送器和接受器的成本较高。异步串行通信是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在10%以内,就能保证正确实现通信。异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态(又称MARK状态)。当有数据发送时,信号线变成低电平,并持续一位的时间,用于表示发送字符的开始,该位称为起始位(也称SPACE状态)。

起始位之后,在信号线上依次出现待发送的每一位字符数据,并且按照先低位后高位的顺序逐位发送。待发送的每个字符的位数可以在5、6、7或8位之间选择。数据位的后面可以加上一位奇偶校验位,也可以不加,由编程指定。最后传送的是停止位(高电平),一般选择1位、1.5位或2位。数据传送方式单工方式。单工方式采用一根数据传输线,只允许数据按照固定的方向传送。半双工方式。半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。全双工方式。全双工方式采用两根数据传输线,允许数据同时进行双向传送。波特率波特率是指每秒内传送二进制数据的位数,以b/s和bps(位/秒,bitpersecond)为单位。它是衡量串行数据传送速度快慢的重要指标和参数。计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。PC机串口通信流控制这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/DSR等)和软件流控制XON/XOFF(继续/停止)硬件流控制

硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。RS-232-CRS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。EIA-RS-232C规定:在TxD和RxD上,逻辑1(MARK)=-3V~-15V;逻辑0(SPACE)=+3~+15V5.2USART简介通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议,IrDA(InfraRedDataAssociation,红外数据组织)SIRENDEC(SerialInfrared,串行红外协议)规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。总之,STM32F10x系列芯片所提供的USART串口功能十分强大,基本上所有的串口功能,它都能通过硬件实现USART模式配置。(X=支持,NA=不支持)

(STM32F103内置3个USART和2个UART)STM32的USART主要特性全双工的,异步通信NRZ(NotReturntoZero,不归零码)标准格式分数波特率发生器系统--发送和接收共用的可编程波特率,最高达4.5Mbits/s可编程数据字长度(8位或9位)可配置的停止位。支持1或2个停止位单线半双工通信检测标志。接收缓冲器满、发送缓冲器空、传输结束标志。四个错误检测标志10个带标志的中断源……USART功能概述:总线在发送或接收前应处于空闲状态(高电平)一个起始位一个数据字(8或9位),最低有效位在前0.5,1.5,2个的停止位,由此表明数据帧的结束使用分数波特率发生器----12位整数和4位小数的表示方法。一个状态寄存器(USART_SR)数据寄存器(USART_DR)一个波特率寄存器(USART_BRR),12位的整数和4位小数一个智能卡模式下的保护时间寄存器(USART_GTPR)CK:发送器时钟输出。IrDA_RDI:IrDA模式下的数据输入。IrDA_TDO:IrDA模式下的数据输出。nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。nRTS:发送请求,若是低电平,表明USART准备好接收数据5.3STM32的通用串口结构任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。RX:接收数据串行输入端。通过采样技术来区别数据和噪音,从而恢复数据。TX:发送数据输出端。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

端口重映射P132.图7-1.重映射步骤为:1.打开复用IO时钟和USART重映射后的I/O口引脚时钟,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);2.I/O口重映射开启.

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);3.配制重映射引脚,

这里只需配置重映射后的I/O,原来的不需要去配置.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);起始位侦测:在USART中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。该序列为:1110X0X0X0000接收器起始位侦测如果3个采样点都为’0’(在第3、5、7位的第一次采样,和在第8、9、10的第二次采样都为’0’),则确认收到起始位,这时设置RXNE标志位,如果RXNEIE=1,则产生中断。如果两次3个采样点上仅有2个是’0’(第3、5、7位的采样点和第8、9、10位的采样点),那么起始位仍然是有效的,但是会设置NE噪声标志位。如果不能满足这个条件,则中止起始位的侦测过程,接收器会回到空闲状态(不设置标志位)。如果有一次3个采样点上仅有2个是’0’(第3、5、7位的采样点或第8、9、10位的采样点),那么起始位仍然是有效的,但是会设置NE噪声标志位。5.4USART寄存器描述状态寄存器(USART_SR)数据寄存器(USART_DR)波特比率寄存器(USART_BRR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2)控制寄存器3(USART_CR3)保护时间和预分频寄存器(USART_GTPR)可以用半字(16位)或字(32位)的方式操作这些外设寄存器。状态寄存器(USART_SR)D31-D10:保留D9-D0:状态位D4----IDLE:监测到总线空闲(IDLElinedetected)D3----ORE:溢出错误(Overrunerror)D2----NE:噪声错误标志(Noiseerrorflag)D1----FE:帧错误(Framingerror)D0----PE:校验错误(Parityerror)溢出错误:如果RXNE还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当RXNE位被清零后才能从移位寄存器转移到RDR寄存器。噪音错误:使用过采样技术(同步模式除外),通过区别有效输入数据和噪音来进行数据恢复。帧错误:由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。噪音错误当在接收帧中检测到噪音时:

●在RXNE位的上升沿设置NE标志。

●无效数据从移位寄存器传送到USART_DR寄存器。RXNE:读数据寄存器非空(Readdataregisternotempty)。当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清零。RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

0:数据没有收到;1:收到数据,可以读出。TC:发送完成(Transmissioncomplete)。当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。

0:发送还未完成;1:发送完成。

数据寄存器(USART_DR)

DR[8:0]:数据值(Datavalue)包含了发送或接收的数据。当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位该取代。当使能校验位进行接收时,读到的MSB位是接收到的校验位。波特比率寄存器(USART_BRR)

位15:4:DIV_Mantissa[11:0]---USARTDIV的整数部分,这12位定义了USART分频器除法因子(USARTDIV)的整数部分。位3:0:DIV_Fraction[3:0]---USARTDIV的小数部分,这4位定义了USART分频器除法因子(USARTDIV)的小数部分。注意:如果TE或RE被分别禁止,波特计数器停止计数分数波特率的产生:fCK是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1)

只有USART1使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)。USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。如何从USART_BRR寄存器值得到USARTDIV?例1:如果DIV_Mantissa=27,DIV_Fraction=12(USART_BRR=0x1BC),

于是,Mantissa(USARTDIV)=27,

Fraction(USARTDIV)=12/16=0.75,所以,USARTDIV=27.75例2:要求USARTDIV=25.62,就有:

DIV_Fraction=16*0.62=9.92,最接近的整数是:10=0x0A,

DIV_Mantissa=mantissa(25.620)=25=0x19,于是,USART_BRR=0x19A例3:要求USARTDIV=50.99就有,DIV_Fraction=16*0.99=15.84最接近的整数是,16=0x10=>DIV_frac[3:0]溢出=>进位必须加到整数部分DIV_Mantissa=mantissa(50.990+进位)=51=0x33于是,USART_BRR=0x330,USARTDIV=51设置波特率时的误差计算控制寄存器1(USART_CR1)UE:USART使能(USARTenable)M:字长(Wordlength)。0:一个起始位,8个数据位,n个停止位;

1:一个起始位,9个数据位,n个停止位。WAKE:唤醒的方法(Wakeupmethod)PCE:检验控制使能(Paritycontrolenable)PS:校验选择(Parityselection)。0:偶校验;1:奇校验。PEIE:PE中断使能(PEinterruptenable)TXEIE:发送缓冲区空中断使能(TXEinterruptenable)TCIE:发送完成中断使能(Transmissioncompleteinterruptenable)RXNEIE:接收缓冲区非空中断使能(RXNEinterruptenable)……字长设置控制寄存器2(USART_CR2)LINEN:LIN(局域互联网)模式使能(LINmodeenable)。该位由软件设置或清除。0:禁止LIN模式;1:使能LIN模式。在LIN模式下,可以用USART_CR1寄存器中的SBK位发送LIN同步断开符(低13位),以及检测LIN同步断开符。STOP:停止位(STOPbits),这2位用来设置停止位的位数。00:1个停止位;01:0.5个停止位;10:2个停止位;11:1.5个停止位;注:UART4和UART5不能用0.5停止位和1.5停止位。停止位的设置保护时间和预分频寄存器(USART_GTPR)

用于红外或智能卡模式。位15:8:GT[7:0]--保护时间值(Guardtimevalue)。该位域规定了以波特时钟为单位的保护时间。在智能卡模式下,需要这个功能。当保护时间过去后,才会设置发送完成标志。位7:0:PSC[7:0]--预分频器值(Prescalervalue)--在红外(IrDA)低功耗模式下:PSC[7:0]=红外低功耗波特率

--在智能卡模式下:PSC[4:0]:预分频值。对系统时钟进行分频,给智能卡提供时钟。5.5库函数5.5.1USART寄存器结构5.5.2USART库函数5.5.1USART寄存器结构typedefstruct{vu16SR;u16RESERVED1;vu16DR;u16RESERVED2;vu16BRR;u16RESERVED3;vu16CR1;u16RESERVED4;vu16CR2;u16RESERVED5;vu16CR3;u16RESERVED6;vu16GTPR;u16RESERVED7;}USART_TypeDef;寄存器:SR----USART状态寄存器DR----USART数据寄存器BRR----USART波特率寄存器CR1----USART控制寄存器1CR2----USART控制寄存器2CR3----USART控制寄存器3GTPR----USART保护时间和预分频寄存器5.5.2USART库函数串口常用函数:USART_DeInit:将外设USARTx寄存器重设为缺省值USART_Init:根据USART_InitStruct中指定的参数初始化外设USARTx寄存器USART_Cmd:使能或者失能USART外设USART_ITConfig:使能或者失能指定的USART中断USART_SendData:通过外设USARTx发送单个数据USART_ReceiveData:返回USARTx最近接收到的数据USART_GetFlagStatus:检查指定的USART标志位设置与否USART_ClearFlag:清除USARTx的待处理标志位USART_GetITStatus:检查指定的USART中断发生与否函数USART_DeInit

功能描述:将外设USARTx寄存器重设为缺省值函数原形:

voidUSART_DeInit(USART_TypeDef*USARTx)例:/*ResetstheUSART1registerstotheirdefaultresetvalue*/

USART_DeInit(USART1);

函数USART_Init

功能:根据USART_InitStruct中指定的参数初始化外设USARTx寄存器函数原形:

voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct)USART_InitTypeDefstructure

typedefstruct{u32USART_BaudRate;//波特率u16USART_WordLength;//字长u16USART_StopBits;//停止位u16USART_Parity;//奇偶校验u16USART_HardwareFlowControl;//硬件流控制u16USART_Mode;//模式u16USART_Clock;u16USART_CPOL;u16USART_CPHA;u16USART_LastBit;}USART_InitTypeDef;串口1配置举例/*ThefollowingexampleillustrateshowtoconfiguretheUSART1*/USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_Odd;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_RTS_CTS;USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;USART_InitStructure.USART_Clock=USART_Clock_Disable;USART_InitStructure.USART_CPOL=USART_CPOL_High;USART_InitStructure.USART_CPHA=USART_CPHA_1Edge;USART_InitStructure.USART_LastBit=USART_LastBit_Enable;USART_Init(USART1,&USART_InitStructure);USART_WordLength

USART_WordLength_8b:8位数据USART_WordLength_9b:9位数据USART_StopBits

USART_StopBits_1:在帧结尾传输1个停止位USART_StopBits_0.5:在帧结尾传输0.5个停止位USART_StopBits_2:在帧结尾传输2个停止位USART_StopBits_1.5:在帧结尾传输1.5个停止位USART_Parity

USART_Parity_No:奇偶失能USART_Parity_Even:偶模式USART_Parity_Odd:奇模式USART_HardwareFlowControl

USART_HardwareFlowControl_None:硬件流

温馨提示

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

评论

0/150

提交评论