您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 嵌入式系统设计(STM32)第5讲
第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位
本文标题:嵌入式系统设计(STM32)第5讲
链接地址:https://www.777doc.com/doc-4032396 .html