第7章-STM32通用同步异步收发器USART3PPT资料.ppt
- 文档编号:224243
- 上传时间:2023-04-28
- 格式:PPT
- 页数:90
- 大小:6.25MB
第7章-STM32通用同步异步收发器USART3PPT资料.ppt
《第7章-STM32通用同步异步收发器USART3PPT资料.ppt》由会员分享,可在线阅读,更多相关《第7章-STM32通用同步异步收发器USART3PPT资料.ppt(90页珍藏版)》请在冰点文库上搜索。
外部引脚:
接收数据输入(RX)发送数据输出(TX)清除发送(nCTS)发送请求(nRTS)发送器时钟输出(CK)内部包括:
发送数据寄存器(TDR)接收数据寄存器(RDR)移位寄存器IrDA串行红外编解码模块硬件数据流控制器、时钟控制、发送控制、唤醒单元、接收控制、中断控制和波特率控制等。
PA口16脚,PB口16脚,PC口3脚,PD口2脚,USART2_TX:
USART2_RX:
:
USART1_TX,:
USART1_RX,USART3_RX:
USART3_TX:
串口2,串口1,串口3,STM32F103Cx:
拥有3个USART,PA口16脚,PB口16脚,PC口16脚,PD口3脚,:
USART1_RTS:
USART1_CTS:
USART1_RX:
USART1_TX:
USART1_CK,USART2_CTS:
USART2_RTS:
USART2_TX:
USART2_CK:
USART3_RTS:
USART3_CTS:
USART3_CK,USART3_RX:
STM32F103RBT6包含3个USART:
USART1、USART2、USART3。
CR1,CR3,7.3USART相关寄存器,USART的功能是通过操作相应寄存器实现的数据寄存器(USART_DR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2)控制寄存器3(USART_CR3)状态寄存器(USART_SR)波特比率寄存器(USART_BRR)保护时间和预分频寄存器(USART_GTPR),数据寄存器(USART_DR):
用于保存接收或者发送的数据,7.3USART相关寄存器,数据寄存器(USART_DR):
用于保存接收或者发送的数据,7.3USART相关寄存器,控制寄存器1(USART_CR1)UE:
USART使能0:
USART分频器和输出被禁止1:
USART使能M:
字长0:
1位起始位,8位数据位,n个停止位1:
9位数据位WAKE:
唤醒方式0:
被空闲总线唤醒1:
被地址标记唤醒PCE:
校验控制使能PS:
校验选择0:
偶校验1:
奇校验PEIE,TXEIE,TCIE,RXNEIE,IDLEIETE:
发送使能RE:
接收使能RWU:
接收唤醒SBK:
发送断开帧,7.3USART相关寄存器,控制寄存器2(USART_CR2)LINEN:
LIN模式使能STOP1:
0:
停止位个数CLKEN:
时钟使能CPOL:
时钟极性CPHA:
时钟相位LBCL:
最后一位时钟脉冲LBDIE:
LIN断开符检测中断使能LBDL:
LIN断开符检测长度ADD3:
本设备USART节点的地址,7.3USART相关寄存器,控制寄存器3(USART_CR3),7.3USART相关寄存器,控制寄存器3(USART_CR3)DMAT:
DMA使能发送DMAR:
DMA使能接收,7.3USART相关寄存器,状态寄存器(USART_SR)CTS:
CTS标志LBD:
LIN断开检测ORE:
过载错误NE:
噪声错误标志FE:
帧错误标志TXE:
发送数据寄存器空当TDR寄存器的数据被硬件转移到移位寄存器的时候,由硬件置位,可以通过操作USART_DR寄存器清除此位TC:
发送完成当包含数据的一帧发送完,并且TXE=1时,由硬件置位,由软件序列清除(先读USART_SR,然后写入USART_DR)RXNE:
读数据寄存器非空当RDR移位寄存器中数据转移到USART_DR寄存器中,由硬件置位,通过读USART_DR清除此位IDLE:
总线空闲监测PE:
校验错误,7.3USART相关寄存器,波特率发生器(USART_BRR)DIV_Mantissa11:
USARTDIV的整数部分DIV_Fraction3:
USARTDIV的小数部分,7.3USART相关寄存器,保护时间和预分频寄存器(USART_GTPR),7.3USART相关寄存器,7.4STM32串行通信的工作方式,7.4.1数据发送和接收1.数据发送
(1)通过在USART_CR1寄存器上置位UE位来激活USART。
(2)编程USART_CR1的M位来定义字长。
(3)在USART_CR2中编程停止位的位数(4)如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。
按照多缓冲器通信中的描述配置DMA寄存器。
7.4.1数据发送和接收,1.数据发送(5)利用USART_BRR寄存器选择要求的波特率。
(6)设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。
(7)把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。
在只有一个缓冲器的情况下,对每个待发送的数据重复本步骤。
(8)在USART_DR寄存器中写入最后一个数据后,要等待TC=1,它表示最后一个数据帧的传输结束。
当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。
(1)将USART_CR1寄存器的UE置1来激活USART;
(2)编程USART_CR1的M位来定义字长;
(3)在USART_CR2中编写停止位的个数;
2.数据接收,7.4.1数据发送和接收,(4)如果需多缓冲器通信,选择USART_CR3中的DMA使能位(DMAR),按照多缓冲器通信所要求的配置DMA寄存器;
(5)利用波特率寄存器USART_BRR选择所需的波特率;
(6)设置USART_CR1的RE位,激活接收器,使它开始寻找起始位。
2.数据接收,7.4.1数据发送和接收,7.4.2硬件流控制,硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停发往计算机的数据流。
这种硬件握手方式的过程为:
我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将RTS线置高电平,当发送端的程序检测到CTS为高后,就停止发送数据,直到接收端缓冲区的数据量低于高位而将RTS置低电平。
RTS用来标明接收设备有没有准备好接收数据。
什么是硬件流控制模式?
硬件流控制:
利用nCTS输入和nRTS输出可以控制2个设备间的串行数据流,7.4.2硬件流控制,7.5USART应用设计,7.5.1USART常用库函数STM32标准库中提供了几乎覆盖所有USART操作的函数,所有USART相关函数均在stm32f10x_usart.c和stm32f10x_usart.h中定义和声明,库函数:
USART_DeInit函数USART_Init函数USART_StrucInit函数USART_Cmd函数USART_ITConfig函数USART_DMACmd函数USART_SetAddress函数USART_WakeUpConfig函数USART_ReceiverWakeUpCmd函数USART_LINBreakDetectionConfig函数USART_LINCmd函数USART_SendData函数,7.5.1USART常用库函数,库函数(续):
USART_ReceiveData函数USART_SendBreak函数USART_SetGuardTime函数USART_SetPrescaler函数USART_SmartCardCmd函数USART_SmartCardNackCmd函数USART_HalfDuplexCmd函数USART_IrDAConfig函数USART_IrDACmd函数USART_GetFlagStatus函数USART_ClearFlag函数USART_GetITStatus函数USART_ClearITPendingBit函数,7.5.1USART常用库函数,USART_Init(USART1,7.5.1USART常用库函数USART_Init(),typedefstructuint32_tUSART_BaudRate;
uint16_tUSART_WordLength;
uint16_tUSART_StopBits;
uint16_tUSART_Parity;
uint16_tUSART_Mode;
uint16_tUSART_HardwareFlowControl;
USART_InitTypeDef;
7.5.1USART常用库函数USART_Init(),USART_InitTypeDef,USART_BaudRate该参数用来设置串口传输的波特率。
波特率可以由以下公式计算:
波特率=fPCLK/(16*USARTDIV)IntegerDivider=(APBClock)/(16*(USART_InitStruct-USART_BaudRate)FractionalDivider=(IntegerDivider-(u32)IntegerDivider)*16)+0.5,7.5.1USART常用库函数USART_Init(),STM32单片机常用的波特率及其误差:
7.5.1USART常用库函数USART_Init(),USART_WordLength该参数用来设置在一个帧数据传输中或者接收到的一个帧数据中,数据的位数。
该参数可取的值,USART_StopBits该参数用来设置停止位的数目。
该参数可取的值。
7.5.1USART常用库函数USART_Init(),USART_Parity该参数用来设置一帧数据中奇偶校验的模式。
参数可取的值,注意:
奇偶校验一旦使能,在发送数据的最高位插入经硬件计算得到的奇偶校验位(字长9位时的第9位,字长8位时的第8位)。
7.5.1USART常用库函数USART_Init(),USART_HardwareFlowControl该参数用来设置硬件流控制模式使能还是失能。
7.5.1USART常用库函数USART_Init(),USART_Mode该参数用来设置串口模块发送,接收开启或者关闭。
该参数可取的值:
例:
异步串口1,速率9600,8位数据,1个停止位,无校验,无流量控制,接收发送使能。
7.5.1USART常用库函数USART_Init(),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_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,7.5.1USART常用库函数USART_Init(),USART_Cmd(USART1,ENABLE);
7.5.1USART常用库函数USART_Cmd(),USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
7.5.1USART常用库函数USART_ITConfig(),7.5.1USART常用库函数USART_ITConfig(),(帧,噪声,溢出错误),USART_SendData(USART3,0x26);
7.5.1USART常用库函数USART_SendData(),u16RxDATA;
RxDATA=USART_ReceiveData(USART2);
7.5.1USART常用库函数USART_ReceiveData(),FlagStatusStatus;
Status=USART_GetFlagStatus(USART1,USART_FLAG_TXE);
7.5.1USART常用库函数USART_GetFlagStatus(),7.5.1USART常用库函数USART_GetFlagStatus(),USART_ClearFlag(USART1,USART_FLAG_ORE);
7.5.1USART常用库函数USART_ClearFlag(),ITStatusErrorITStatus;
ErrorITStatus=USART_GetITStatus(USART1,USART_IT_ORE);
7.5.1USART常用库函数USART_GetITStatus(),7.5.1USART常用库函数USART_GetITStatus(),USART_ClearITPendingBit(USART1,USART_IT_ORE);
7.5.1USART常用库函数USART_ClearITPendingBit(),7.5.2USART使用流程,USART基本配置流程(见右图)串口是IO口的复用功能:
PA9复用推挽输出;
PA10浮空输入,7.5.3USART应用设计1串口收发数据,例1:
利用上位机的串口与STM32的USART1通信。
上位机通过键盘给STM32的串口发送字符,STM32将接收到的字符再传回上位机。
在上位机上通过串口调试助手显示结果。
intmain(void)uint16_ti;
USART_Config();
while
(1)if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)=SET)i=USART_ReceiveData(USART1);
USART_SendData(USART1,i);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!
=SET);
7.5.3USART应用设计1串口收发数据(主程序-查询),voidUSART_Config(void)GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);
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,7.5.3USART应用设计1串口收发数据(串口程序1),USART_InitStructure.USART_BaudRate=9600;
USART_Init(USART1,7.5.3USART应用设计1串口收发数据(串口程序2),将程序下载到开发板,通过串口与PC机相连,打开串口调试助手,串口调试助手显示,7.5.3USART通信实例2串口发送数据,例2:
用串口2发送数据,上位机使用串口调试工具接收并显示。
串口发送完数据后跳变LED2灯。
7.5.3USART通信实例2串口发送数据(主程序),intmain(void)SystemInit();
/配置系统时钟gpio_conf();
/初始化LED和按键IO口USART2_Config();
/初始化串口while
(1)for(unsignedinti=0;
i0xfffe;
i+)for(unsignedchark=0;
k9;
k+)asm(nop);
Usart2_PutChar(0x34);
/从串口2发送数据LED2B();
7.5.3USART应用设计2串口发送数据(串口设置1),voidUSART2_Config(void)/1)定义初始化结构体GPIO_InitTypeDefGPIO_InitStructure;
/2)开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
7.5.3USART应用设计2串口发送数据(串口设置2),/3)IO口初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_Init(GPIOA,7.5.3USART应用设计2串口发送数据(串口设置3),/4)串口参数初始化USART_InitStructure.USART_BaudRate=115200;
USART_Init(USART2,/串口2发送数据函数(查询)voidUsart2_PutChar(unsignedchardata)USART_SendData(USART2,data);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)=RESET);
/定义点亮、熄灭、跳变LED2#defineLED2ON()GPIOB-ODR|=GPIO_Pin_6#defineLED2OFF()GPIOB-ODR&
=GPIO_Pin_6#defineLED2B()GPIOB-ODR=GPIO_Pin_6,7.5.3USART通信实例2串口发送数据,voidgpio_conf(void)GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/*配置PB3-7外设为输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
/外设口线3-7GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT_PP;
/设为推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/50MHzIO口GPIO_Init(GPIOB,7.5.3USART通信实例2串口发送数据(GPIO配置1),/*GPIOC外设时钟使能*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
/*配置PC0-3外设为输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
/外设口线0-3GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
/输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/50MHzIO口G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 通用 同步 异步 收发 USART3