嵌入式系统设计(STM32)第5讲ppt课件.ppt

上传人:牧羊曲112 文档编号:1891260 上传时间:2022-12-24 格式:PPT 页数:75 大小:1.48MB
返回 下载 相关 举报
嵌入式系统设计(STM32)第5讲ppt课件.ppt_第1页
第1页 / 共75页
嵌入式系统设计(STM32)第5讲ppt课件.ppt_第2页
第2页 / 共75页
嵌入式系统设计(STM32)第5讲ppt课件.ppt_第3页
第3页 / 共75页
嵌入式系统设计(STM32)第5讲ppt课件.ppt_第4页
第4页 / 共75页
嵌入式系统设计(STM32)第5讲ppt课件.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《嵌入式系统设计(STM32)第5讲ppt课件.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统设计(STM32)第5讲ppt课件.ppt(75页珍藏版)》请在三一办公上搜索。

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

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

3、按照先低位后高位的顺序逐位发送。待发送的每个字符的位数可以在5、6、7或8位之间选择。数据位的后面可以加上一位奇偶校验位,也可以不加,由编程指定。最后传送的是停止位(高电平),一般选择1位、1.5位或2位。,数据传送方式,单工方式。单工方式采用一根数据传输线,只允许数据按照固定的方向传送。半双工方式。半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。全双工方式。全双工方式采用两根数据传输线,允许数据同时进行双向传送。,波特率,波特率是指每秒内传送二进制数据的位数,以b/s和bps(位/秒,bit per second)为单位。它是衡量串行数据传送速度快慢的重要指标

4、和参数。计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。,PC机串口通信流控制,这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象, 或者两台计算机的处理速度不同, 如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。 流控制能解决这个问题, 当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进 程,防止数据的丢失。PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、 DT

5、R/DSR等)和软件流控制XON/XOFF(继续/停止),硬件流控制,硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75)和一个低位标志(可为缓冲区大小的25),当缓冲区内数据量达到高位时,

6、我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。,RS-232-C,RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。 RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4

7、800、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+15V,5.2 USART简介,通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之

8、间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议,IrDA (Infra Red Data Association,红外数据组织)SIR ENDEC(Serial Infrared,串行红外协议)规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。总之,STM32F10 x系列芯片所提供的USART串口功能十分强大,基本上所有的串口功能,它都能通过硬件实现,USART模式配置。(X=支持,NA=不支持)(STM32F103内置

9、3个USART和2个UART),STM32的USART主要特性,全双工的,异步通信 NRZ(Not Return to Zero,不归零码)标准格式 分数波特率发生器系统-发送和接收共用的可编程波特率,最高达4.5Mbits/s 可编程数据字长度(8位或9位) 可配置的停止位。支持1或2个停止位 单线半双工通信 检测标志。接收缓冲器满、发送缓冲器空、传输结束标志。四个错误检测标志10个带标志的中断源 ,USART功能概述:总线在发送或接收前应处于空闲状态(高电平) 一个起始位 一个数据字(8或9位),最低有效位在前 0.5,1.5,2个的停止位,由此表明数据帧的结束 使用分数波特率发生器-12

10、位整数和4位小数的表示方法。 一个状态寄存器(USART_SR) 数据寄存器(USART_DR) 一个波特率寄存器(USART_BRR),12位的整数和4位小数 一个智能卡模式下的保护时间寄存器(USART_GTPR) CK:发送器时钟输出。IrDA_RDI: IrDA模式下的数据输入。 IrDA_TDO: IrDA模式下的数据输出。 nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。nRTS: 发送请求,若是低电平,表明USART准备好接收数据,5.3 STM32的通用串口结构,任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX

11、:接收数据串行输入端。通过采样技术来区别数据和噪音,从而恢复数据。 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_Rem

12、ap_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, ,起始位侦测:在USART中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。 该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0,接收器起始位侦测,如果3个采样点都

13、为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.4 USART寄存器描述,状态寄存器(USART_SR) 数据寄存器(USART_D

14、R) 波特比率寄存器(USART_BRR) 控制寄存器1(USART_CR1) 控制寄存器2(USART_CR2) 控制寄存器3(USART_CR3) 保护时间和预分频寄存器(USART_GTPR) 可以用半字(16位)或字(32位)的方式操作这些外设寄存器。,状态寄存器(USART_SR),D31-D10:保留D9-D0:状态位,D4-IDLE:监测到总线空闲 (IDLE line detected) D3-ORE:溢出错误 (Overrun error) D2-NE: 噪声错误标志 (Noise error flag) D1-FE: 帧错误 (Framing error) D0-PE: 校

15、验错误 (Parity error),溢出错误:如果RXNE还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当RXNE位被清零后才能从移位寄存器转移到RDR寄存器。噪音错误:使用过采样技术(同步模式除外),通过区别有效输入数据和噪音来进行数据恢复。帧错误:由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。,噪音错误,当在接收帧中检测到噪音时: 在RXNE位的上升沿设置NE标志。 无效数据从移位寄存器传送到USART_DR寄存器。,RXNE:读数据寄存器非空 (Read data register not empty) 。 当RDR移位寄存器中的数据被转移到USAR

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

17、 1:发送完成。,数据寄存器(USART_DR),DR8:0:数据值 (Data value)包含了发送或接收的数据。当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位该取代。 当使能校验位进行接收时,读到的MSB位是接收到的校验位。,波特比率寄存器(USART_BRR),位15:4:DIV_Mantissa11:0-USARTDIV的整数部分,这12位定义了USART分频器除法因子(USARTDIV)的整数部分。位3:0:DIV_Fraction3:0-USARTDIV的小数部分,这4位定义了USART

18、分频器除法因子(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=0 x1BC), 于是 , Man

19、tissa (USARTDIV) = 27 , Fraction (USARTDIV) = 12/16 = 0.75 , 所以, USARTDIV = 27.75 例2:要求 USARTDIV = 25.62, 就有: DIV_Fraction = 16*0.62 = 9.92,最接近的整数是:10 = 0 x0A, DIV_Mantissa = mantissa (25.620) = 25 = 0 x19, 于是,USART_BRR = 0 x19A,例3: 要求 USARTDIV = 50.99 就有,DIV_Fraction = 16*0.99 = 15.84 最接近的整数是,16 =

20、0 x10 = DIV_frac3:0溢出 = 进位必须加到整数部分 DIV_Mantissa = mantissa (50.990 + 进位) = 51 = 0 x33 于是,USART_BRR = 0 x330,USARTDIV=51,设置波特率时的误差计算,控制寄存器1 (USART_CR1),UE:USART使能 (USART enable) M:字长 (Word length) 。0:一个起始位,8个数据位,n个停止位; 1:一个起始位,9个数据位,n个停止位。 WAKE:唤醒的方法 (Wakeup method) PCE:检验控制使能 (Parity control enable)

21、 PS:校验选择 (Parity selection) 。0:偶校验; 1:奇校验。 PEIE:PE中断使能 (PE interrupt enable) TXEIE:发送缓冲区空中断使能 (TXE interrupt enable) TCIE:发送完成中断使能 (Transmission complete interrupt enable) RXNEIE:接收缓冲区非空中断使能 (RXNE interrupt enable) ,字长设置,控制寄存器2 (USART_CR2),LINEN:LIN(局域互联网)模式使能 (LIN mode enable) 。该位由软件设置或清除。 0:禁止LIN模

22、式; 1:使能LIN模式。 在LIN模式下,可以用USART_CR1寄存器中的SBK位发送LIN同步断开符(低13位),以及检测LIN同步断开符。 STOP:停止位 (STOP bits) ,这2位用来设置停止位的位数。 00:1个停止位;01:0.5个停止位; 10:2个停止位;11:1.5个停止位;注:UART4和UART5不能用0.5停止位和1.5停止位。,停止位的设置,保护时间和预分频寄存器(USART_GTPR),用于红外或智能卡模式。位15:8:GT7:0-保护时间值 (Guard time value) 。该位域规定了以波特时钟为单位的保护时间。在智能卡模式下,需要这个功能。当保

23、护时间过去后,才会设置发送完成标志。位7:0:PSC7:0-预分频器值 (Prescaler value) - 在红外(IrDA)低功耗模式下:PSC7:0=红外低功耗波特率 - 在智能卡模式下:PSC4:0:预分频值。对系统时钟进行分频,给智能卡提供时钟。,5.5 库函数,5.5.1 USART寄存器结构5.5.2 USART库函数,5.5.1 USART寄存器结构,typedef struct vu16 SR; u16 RESERVED1; vu16 DR; u16 RESERVED2; vu16 BRR; u16 RESERVED3; vu16 CR1; u16 RESERVED4; v

24、u16 CR2; u16 RESERVED5; vu16 CR3; u16 RESERVED6; vu16 GTPR; u16 RESERVED7; USART_TypeDef;,寄存器: SR - USART状态寄存器DR - USART数据寄存器BRR - USART波特率寄存器CR1 - USART控制寄存器1 CR2 - USART控制寄存器2 CR3 - USART控制寄存器3 GTPR - USART保护时间和预分频寄存器,5.5.2 USART库函数,串口常用函数:,USART_DeInit:将外设USARTx寄存器重设为缺省值USART_Init:根据USART_InitStr

25、uct中指定的参数初始化外设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寄存器重设为缺省值函数原形: void USART_

26、DeInit(USART_TypeDef* USARTx)例:/* Resets the USART1 registers to their default reset value */ USART_DeInit(USART1);,函数USART_Init,功能:根据USART_InitStruct中指定的参数初始化外设USARTx寄存器函数原形: void USART_Init (USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct),USART_InitTypeDef structure,typedef struct u32

27、USART_BaudRate; /波特率u16 USART_WordLength; /字长u16 USART_StopBits; /停止位u16 USART_Parity; /奇偶校验u16 USART_HardwareFlowControl; /硬件流控制u16 USART_Mode; /模式u16 USART_Clock; u16 USART_CPOL; u16 USART_CPHA; u16 USART_LastBit; USART_InitTypeDef;,串口1配置举例,/* The following example illustrates how to configure the

28、 USART1 */ USART_InitTypeDef USART_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_HardwareFlowC

29、ontrol = 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 =

30、USART_LastBit_Enable; USART_Init(USART1, ,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:偶模式 U

31、SART_Parity_Odd:奇模式,USART_HardwareFlowControl USART_HardwareFlowControl_None:硬件流控制失能 USART_HardwareFlowControl_RTS:发送请求RTS使能USART_HardwareFlowControl_CTS:清除发送CTS使能USART_HardwareFlowControl_RTS_CTS:RTS和CTS使能USART_Mode USART_Mode_Tx:发送使能 USART_Mode_Rx:接收使能USART_CLOCKUSART_Clock_Enable:时钟高电平活动 USART_Cl

32、ock_Disable:时钟低电平活动,函数USART_StructInit,功能描述: 把USART_InitStruct中的每一个参数按缺省值填入例: /* The following example illustrates how to initialize a USART_InitTypeDef structure */ USART_InitTypeDef USART_InitStructure; USART_StructInit (,USART_InitStruct缺省值,函数USART_Cmd,功能描述:使能或者失能USART外设。函数原形: void USART_Cmd(USAR

33、T_TypeDef* USARTx, FunctionalState NewState) 例: /* Enable the USART1 */ USART_Cmd (USART1, ENABLE);,函数USART_ITConfig,功能描述:使能或者失能指定的USART中断函数原形:void USART_ITConfig (USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState) 例:/* Enables the USART1 transmit interrupt */ USART_ITConfig(USART1, USAR

34、T_IT_TC, ENABLE);,USART_IT值:,USART中断请求,函数USART_SendData,功能描述:通过外设USARTx发送单个数据函数原形:void USART_SendData(USART_TypeDef* USARTx, u8 Data) x可以是1,2或者3,来选择USART外设。例:/* Send one HalfWord on USART3 */ USART_SendData(USART3, 0 x26);,函数USART_ReceiveData,例: /* Receive one halfword on USART2 */ u8 RxData; RxData

35、 = USART_ReceiveData(USART2);,函数USART_GetFlagStatus,功能描述:检查指定的USART标志位设置与否。函数原形:FlagStatus USART_GetFlagStatus (USART_TypeDef* USARTx, u16 USART_FLAG) 返回值 :USART_FLAG的新状态(SET或者RESET) 例: /* Check if the transmit data register is full or not */ FlagStatus Status; Status = USART_GetFlagStatus(USART1, U

36、SART_FLAG_TXE);,USART_FLAG值:,函数USART_ClearFlag,功能描述:清除USARTx的待处理标志位函数原形: void USART_ClearFlag(USART_TypeDef* USARTx, u16 USART_FLAG) 例: /* Clear Overrun error flag */ USART_ClearFlag(USART1,USART_FLAG_ORE);,函数USART_GetITStatus,功能描述:检查指定的USART中断发生与否函数原形:ITStatus USART_GetITStatus(USART_TypeDef* USART

37、x, u16 USART_IT) 输入参数1:USARTx:x可以是1,2或者3,来选择USART外设输入参数2 :USART_IT:待检查的USART中断源返回值: USART_IT的新状态例:/* Get the USART1 Overrun Error interrupt status */ ITStatus ErrorITStatus; ErrorITStatus = USART_GetITStatus(USART1, USART_IT_OverrunError);,USART_IT值:,函数USART_ClearITPendingBit,功能描述:清除USARTx的中断待处理位。函数

38、原形:void USART_ClearITPendingBit (USART_TypeDef* USARTx, u16 USART_IT)其中,USART_IT:待检查的USART中断源 USARTx:x可以是1,2或者3,来选择USART外设例: /* Clear the Overrun Error interrupt pending bit */ USART_ClearITPendingBit(USART1,USART_IT_OverrunError);,5.6 程序设计举例,声明函数声明变量主函数配置系统时钟使能外设时钟配置GPIO配置中断优先级配置串口、允许串口中断串口发送字符串主循环

39、等待串口接受字符中断延时子函数初始化系统时钟函数初始化GPIO、中断优先级、串口等子函数中断处理子函数,函数及变量声明,#include “stm32f10 x.h”void RCC_Configuration(void);/初始化系统时钟函数void uart_init(u32 baund); /初始化GPIO、中断、串口的函数void Delay(vu32 nTime); /延时函数void Uart1_PutString(u8 *buf , u8 len); /输出字符串函数u8 Uart1_PutChar(u8 ch); /输出一个字符的函数u8 buf=(“Please input:

40、rn”); /定义一个字符串u8 i; /定义变量i,主函数,int main() RCC_Configuration(); uart_init(9600);Uart1_PutString(buf, 20);while(1) ,配置系统时钟,开启外设时钟,void RCC_Configuration() ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) R

41、CC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) =

42、 RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0 x08); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);,配置GPIO、USART、NVIC,void uart_init(u32 bound) /GPIO? GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_In

43、itStructure;NVIC_InitTypeDef NVIC_InitStructure; /USART1_TX- PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, ,配置GPIO、USART、NVIC(续),NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_In

44、itStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init( ,输出字符串,u8 Uart1_PutChar(u8 ch) /发送一个字符 USART_SendData(USART1, (u8) ch); while(USART_GetFlagSta

45、tus(USART1, USART_FLAG_TXE) = RESET) return ch; /* 发送字符串 */void Uart1_PutString(u8 *buf , u8 len) u8 i=0; for(i=0; ilen; i+) Uart1_PutChar(*buf+); ,中断服务程序,void USART1_IRQHandler(void) u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) Res =USART_ReceiveData(USART1); /接收数据送给Res USART_SendDa

46、ta(USART1,Res); /再发送出去 ,实验五 串口通信实验,开关拨到ISP, USB供电,实验五 串行通信实验,实验目的:掌握STM32通用串口USART的工作原理,以及发送/接收数据过程。实验内容:(1)利用微机串口调试助手,向STM32发送字符串并回显。(2)开发板上按下一个键,对应的LED点亮,按键编号发送给微机。(3)设变量x=123.45,将该数值上传给微机。,习题五,1. USART的英文全称是()。2. 异步通信是指数据以()为单位进行传送。每传送一个字符,都要另外加上()位和()位。它们分别是()电平和()电平。3. STM32F103内置了()个USART和()个U

47、ART。4. 系统默认USART1的数据发送端TX对应的引脚是();数据接收端RX对应的引脚是()。可以通过重映射功能,把USART的TX、RX映射到()、()。5. STM32的USART传送数据的位数可以是()位或()位。6. 停止位可以是1位、()位、()位或()位。7. 波特率的单位是()。8. 波特率寄存器是(),其中D15:D4这12位存放分频器除法因子的()部分,D3:D0这4位存放()部分。9. USART相关寄存器有()个。其中控制寄存器有()个。10.USART的状态寄存器中,表示发送结束的标志位是();表示接受结束的标志位是()。这些标志位可供查询或者产生()请求。,11

48、.串行通信采用奇校验,9数据位,若传送的数据是字符A,则奇偶校验位的值是()。12.完成下列对USART1的初始化编程,要求串口的波特率9600,9位数据,偶校验,1个停止位,无硬件控制流,允许发送、接收。USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = ( ); USART_InitStructure.USART_WordLength = ();USART_InitStructure.USART_StopBits = ();USART_InitStructure.USART_Parity =(

49、);USART_InitStructure.USART_HardwareFlowControl =();USART_InitStructure.USART_Mode = ();USART_Init (USART1, 13. 串口使能的函数是()。14. 允许串口接收中断的函数是()。15. 允许串口发送中断的函数是()。16. 串口发送数据的函数是()。17. 串口接收数据的函数是()。,18. 串口中断优先级配置。优先级分组为第2组,USART1中断抢占优先 级为1,副优先级为2。NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = ();NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=();NVIC_InitStructure.NVIC_IRQChannelSubPriority = ();NVIC_InitStructure.NVIC_IRQChannelCmd = ();NVIC_Init(,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号