第九章USART-STM32

上传人:壹****1 文档编号:567915825 上传时间:2024-07-22 格式:PPT 页数:28 大小:1.54MB
返回 下载 相关 举报
第九章USART-STM32_第1页
第1页 / 共28页
第九章USART-STM32_第2页
第2页 / 共28页
第九章USART-STM32_第3页
第3页 / 共28页
第九章USART-STM32_第4页
第4页 / 共28页
第九章USART-STM32_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第九章USART-STM32》由会员分享,可在线阅读,更多相关《第九章USART-STM32(28页珍藏版)》请在金锄头文库上搜索。

1、第九章第九章 STM32 外设接口模块外设接口模块9.1 USART 模块模块USART是UniversalSynchronous/AsynchronousReceiver/Transmitter的简称,翻译成中文即为:通用同步/异步串行接收/发送器;它具有全双工通用同步/异步串行收发能力;该接口是一个高度灵活的串行通信设备;STM32的USART模块分USART、UART两种:大容量STM32F103,有多达5个串口,前三个为USART,后两个则为UART,即:USART1,USART2,USART3,以及UART4、UART52021/6/429.1 USART 模块模块USART 收发模

2、块一般分为三大部分:收发模块一般分为三大部分:时钟发生器、数据发送器和接收器时钟发生器、数据发送器和接收器。控制。控制寄存器为所有的模块共享。寄存器为所有的模块共享。时钟发生器时钟发生器由同步逻辑电路和波特率发生器组成。发送时钟引脚由同步逻辑电路和波特率发生器组成。发送时钟引脚 XCK 仅用于同仅用于同步发送模式下。步发送模式下。发送器部分发送器部分由一个单独的写入缓冲器、一个串行移位寄存器、校验位发生器和用由一个单独的写入缓冲器、一个串行移位寄存器、校验位发生器和用于处理不同帧结构的控制逻辑电路构成。于处理不同帧结构的控制逻辑电路构成。接收器接收器是是 USART 模块最复杂的部分,最主要的

3、是时钟和数据接收单元,此外还模块最复杂的部分,最主要的是时钟和数据接收单元,此外还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器。包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器。接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检测,并实现了连续发送多帧数据无延时的通信。测,并实现了连续发送多帧数据无延时的通信。数据接收单元用作异步数据的接收。数据接收单元用作异步数据的接收。2021/6/439.1.1 USART 功能概述功能概述通用同步异步收发器(通用同步异步收发器( USART)提供了

4、一种灵活的方法来与使用工业标准)提供了一种灵活的方法来与使用工业标准NRZ异步串行数据格式的异步串行数据格式的外部设备之间进行全双工数据交换外部设备之间进行全双工数据交换。它支持同步一路通信和半双工的单线通信,它支持同步一路通信和半双工的单线通信,LIN,智能卡协议,智能卡协议,IrDA和调制解调和调制解调器操作(器操作( CTS/RTS);允许多处理器通信,可以进行高速的数据通信。);允许多处理器通信,可以进行高速的数据通信。任何任何USART双向通信都至少需要两个引脚:接收数据输入(双向通信都至少需要两个引脚:接收数据输入( RX)和发送数据输)和发送数据输出(出( TX)。)。RX:串行

5、数据输入。:串行数据输入。TX:发送数据输出。当发送器使能的时候并且没有数据要发送,:发送数据输出。当发送器使能的时候并且没有数据要发送,TX引脚是高电引脚是高电平。平。2021/6/44STM32 外设接口模块外设接口模块在同步模式中需要下列引脚: SCLK: 发送器时钟输出。在IrDA模式中需要下列引脚: IrDA_RDI:IrDA模式下的数据输入。 IrDA_TDO: IrDA模式下的数据输出。在调制解调器模式中需要下列引脚: nCTS: 清除发送 nRTS: 发送请求2021/6/45TX:发送数据输出引脚。:发送数据输出引脚。RX:接收数据输入引脚。:接收数据输入引脚。SW_RX:数

6、据接收引脚,只用于单线和智能卡模式,属于内部:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。引脚,没有具体外部引脚。nRTS:请求以发送:请求以发送(Request To Send),n 表示低电平有效。表示低电平有效。nCTS:清除以发送:清除以发送(Clear To Send),n 表示低电平有效。表示低电平有效。SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。:发送器时钟输出引脚。这个引脚仅适用于同步模式。USART 数据寄存器数据寄存器(USART_DR)只有低只有低 9 位有效;位有效;USART_DR 包含了已发送的数据或者接收到的数据。包含了已发送

7、的数据或者接收到的数据。USART_DR 实际是包含了两个寄存器,一个专门用于发送的可实际是包含了两个寄存器,一个专门用于发送的可写写 TDR,一个专门用于接收的可读,一个专门用于接收的可读 RDR。USART 有专门控制发送的发送器、控制接收的接收器,还有唤有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。醒单元、中断控制等等。发送或接受遵循一定的格式和协议。发送或接受遵循一定的格式和协议。波特率指数据信号对载波的调制速率,它用单位时间内载波调波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。制状态改变次数来表示,单位为波特。比特率指

8、单位时间内传输的比特数,单位比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于对于 USART 波特率与比特率相等,以后不区分这两个概念。波特率与比特率相等,以后不区分这两个概念。波特率越大,传输速率越快。波特率越大,传输速率越快。USART 的发送器和接收器使用相同的波特率。的发送器和接收器使用相同的波特率。2021/6/469.1.1 USART 功能概述功能概述通过这些引脚,在正常通过这些引脚,在正常USART模式下,串行数据作为帧发送和接收。包括:模式下,串行数据作为帧发送和接收。包括: 总线在发送或接收前应处于空闲状态总线在发送或接收前应处于空闲状态 一个起始位一个起始

9、位 一个数据字(一个数据字( 8位或者位或者9位),最低有效位在前位),最低有效位在前 0.5、1/1.5、2个停止位,由此表明数据帧的结束。个停止位,由此表明数据帧的结束。 使用分数波特率产生器使用分数波特率产生器带带12位整数和位整数和4位小数位小数 一个状态寄存器一个状态寄存器(USART_SR) 数据寄存器数据寄存器(USART_DATA) 波特率寄存器波特率寄存器(USART_BRR) 带带12位尾数和位尾数和4位小数位小数 智能卡模式下的保护时间寄存器(智能卡模式下的保护时间寄存器( USART_GTPR)2021/6/479.1.2 USART寄存器简介寄存器简介串口最基本的设置

10、,就是波特率的设置。串口最基本的设置,就是波特率的设置。STM32STM32的串口使用起来的串口使用起来非常简单的,只要开启了串口时钟,并设置相应非常简单的,只要开启了串口时钟,并设置相应IOIO口的模式,然口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。用了。波特率计算:波特率计算:假设:假设:fCK=72MHzfCK=72MHz,欲设置,欲设置96009600的波特率,则有:的波特率,则有: USARTDIV=720000/(9600*16)=468.75 USARTDIV=720000/(9600*16)=

11、468.75 则:整数部分则:整数部分DIV_Mantissa=468=0x1D4; (12DIV_Mantissa=468=0x1D4; (12位二进制数位二进制数) ) 小数部分小数部分DIV_Fraction=16DIV_Fraction=16* *0.75=12=0xC; (40.75=12=0xC; (4位二进制数位二进制数) ) DIV=0x1D4CDIV=0x1D4C;2021/6/48STM32 外设接口模块外设接口模块串口设置一般可以总结为如下几个步骤:串口设置一般可以总结为如下几个步骤:1、串口时钟使能(、串口时钟使能(USART 1用用APB2时钟),时钟), GPIO

12、时钟使能时钟使能(APB2)2、串口复位、串口复位 USART_DeInit(USART1) 3 3、GPIOGPIO端口模式设置端口模式设置 (PA9、PA10)4 4、串口参数初始化、串口参数初始化 (波特率、数据位、停止位、校验位等波特率、数据位、停止位、校验位等)5 5、开启中断并且初始化、开启中断并且初始化 NVICNVIC(如果需要开启中断才需要这个步(如果需要开启中断才需要这个步骤)骤) 6 6、使能串口、使能串口 USRRT_Cmd(USART1, ENABLE)7 7、编写中断处理函数、编写中断处理函数2021/6/492021/6/4102021/6/4112021/6/4

13、122021/6/4132021/6/4142021/6/4152021/6/4162021/6/4172021/6/418STM32 外设接口模块外设接口模块实验用电路板串口电路原理图1.硬件连接 电路硬件连接如下图 所示。2021/6/419STM32 外设接口模块外设接口模块2.软件编程步骤(查询法)步骤一:添加库函数,编写用户函数。步骤二:系统时钟配置。 main.c文件中SystemInit()函数配置系统时钟为72M。步骤三:串口初始化。步骤四:串口数据输出。步骤五:打开串口调试助手。2021/6/420void USART1_Init(void) GPIO_InitTypeDef

14、 GPIO_Initstructure; USART_InitTypeDef USART_Initstructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE); GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9; GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_In

15、itstructure);/ PA9复用推挽输出复用推挽输出 TXD引脚引脚 GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10; GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_Initstructure); / PA10复用浮空输入复用浮空输入 RXD引脚引脚 USART_Initstructure.USART_BaudRate = 115200;/ 波特率设置波特率设置 USART_Initstructure.USART_WordLength = USA

16、RT_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;/使能发送与接收使能

17、发送与接收 USART_Init(USART1,&USART_Initstructure); /初始化初始化USART1 USART_Cmd(USART1,ENABLE);/打开串口打开串口2021/6/421#include stm32f10x.h“#include usart.h“u8 ch;int i=0;int main(void) SystemInit(); USART1_Init(); while(1) while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) = RESET); ch = USART_ReceiveData(USART1)

18、; while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) = RESET); USART_SendData(USART1,ch); 2021/6/422中断配置(采用中断方式是时需设置)中断配置(采用中断方式是时需设置)void Usart1_ITConfig(void) NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/第二功第二功能时钟开启能时钟开启 NVIC_InitStructure.NVIC_IRQChannel

19、= USART1_IRQn;/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;/ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/ NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);2021/6/423中断方式下的串口中断方式下的串口1中断程序中断程序void USART1_I

20、RQHandler(void) static u8 ch; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) ch = USART_ReceiveData(USART1); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) = RESET); USART_SendData(USART1,ch); USART_ClearITPendingBit(USART1,USART_IT_RXNE); 2021/6/424小结小结通过本章的学习初步掌握了通过本章的学习初步掌握了STM32单片机的串口结构及单片机的串口结构及使用方法。使用方法。1.能掌握实例程序编制的原则和基本步骤;能掌握实例程序编制的原则和基本步骤;2.实例基础上能够进行基本功能的修改及完善。实例基础上能够进行基本功能的修改及完善。2021/6/425Thanks!2021/6/426部分资料从网络收集整理而来,供大家参考,感谢您的关注!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号