第7章-STM32通用同步异步收发器USART3.ppt

上传人:wj 文档编号:26275969 上传时间:2023-06-17 格式:PPT 页数:90 大小:6.25MB
下载 相关 举报
第7章-STM32通用同步异步收发器USART3.ppt_第1页
第1页 / 共90页
第7章-STM32通用同步异步收发器USART3.ppt_第2页
第2页 / 共90页
第7章-STM32通用同步异步收发器USART3.ppt_第3页
第3页 / 共90页
第7章-STM32通用同步异步收发器USART3.ppt_第4页
第4页 / 共90页
第7章-STM32通用同步异步收发器USART3.ppt_第5页
第5页 / 共90页
点击查看更多>>
下载资源
资源描述

第7章-STM32通用同步异步收发器USART3.ppt

《第7章-STM32通用同步异步收发器USART3.ppt》由会员分享,可在线阅读,更多相关《第7章-STM32通用同步异步收发器USART3.ppt(90页珍藏版)》请在冰豆网上搜索。

第7章-STM32通用同步异步收发器USART3.ppt

退出,嵌入式单片机原理及应用,电气工程学院仪器科学与工程系,1ARM嵌入式系统概述2STM32单片机结构和最小系统3基于标准外设库的C语言程序设计基础4STM32通用输入输出GPIO5STM32外部中断6STM32通用定时器7STM32通用同步/异步收发器USART8直接存储器存取DMA9STM32的模数转换器ADC10STM32的集成电路总线I2C11STM32的串行外设接口SPI,第7章STM32通用同步/异步收发器USART,7.1串行通信基础7.2STM32的USART的结构特性7.3USART相关寄存器7.4STM32串行通信的工作方式7.5USART应用设计7.6串行通信接口抗干扰设计,退出,7.1串行通信的基本概念,7.1.1并行通信与串行通信计算机的CPU与外部设备之间的信息交换,以及计算机与计算机之间的信息交换过程称为通信。

1并行通信数据字节的各位同时传送的通信方式。

并行通信的优点是数据传送速度快,缺点是占用的传输线条数多,适用于近距离通信。

2串行通信:

数据字节的各位一位一位地依次传送的通信方式。

串行通信的速度慢,但占用的传输线条数少,适用于远距离的数据传送。

3.波特率:

每秒钟传送的二进制数据的位数。

串行通信数据传输形式:

异步(AsynchronousCommunication)同步(SynchronousCommunication),串行通信的方式:

单工(a)、半双工(b)和全双工(c)(simplexhalfduplexfullduplex),7.1.2串行通信方式,7.1.2串行通信方式,异步通信方式:

单片机的串行通信使用的是异步串行通信,异步通信是指发送方和接收方采用独立的时钟,即双方没有一个相同的参考时钟作为基准。

在异步通信中数据一般以一个字符为单位进行传送。

用一帧来表示一个字符,一帧信息由起始位(为0信号,占1位)、数据位(传输时低位在先,高位在后)、奇偶较验位(可要可不要)和停止位(为1信号,可1位、1位半或2位)组成。

同步通信方式:

在同步通信中,每个数据块的开头以同步字符SYN加以指示,使发送与接受双方取得同步。

数据块的各字符之间没有起始位和停止位,提高了通信的速度。

但为了能保持同步传送,在同步通信中须用一个时钟来协调收发器的工作,这就增加了设备的复杂性。

7.1.3串行通信的数据传输形式-异步通信格式,7.1.3串行通信的数据传输形式-异步通信格式,7.1.3串行通信的数据传输形式-异步通信格式,7.1.3串行通信的数据传输形式-异步通信格式,7.1.4波特率,7.2STM32的USART的结构特性,STM32有3-5个的全双工的异步串行通信USART接口,可实现设备之间的串行数据传输。

外部引脚:

接收数据输入(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_RX:

USART2_CK:

:

USART3_RTS:

USART3_CTS:

USART3_CK,USART3_RX:

USART3_TX:

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:

0:

本设备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:

0:

USARTDIV的整数部分DIV_Fraction3:

0:

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_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.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;USART_InitTypeDefUSART_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_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,7.5.3USART应用设计2串口发送数据(串口设置3),/4)串口参数初始化USART_InitStructure.USART_BaudRate=115200;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(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

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

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1