嵌入式系统开发基础教程——基于STM32F103系列ppt课件第8章-通用同步异步通信USART

上传人:txadgkn****dgknqu... 文档编号:252924881 上传时间:2024-11-24 格式:PPTX 页数:36 大小:2.15MB
返回 下载 相关 举报
嵌入式系统开发基础教程——基于STM32F103系列ppt课件第8章-通用同步异步通信USART_第1页
第1页 / 共36页
嵌入式系统开发基础教程——基于STM32F103系列ppt课件第8章-通用同步异步通信USART_第2页
第2页 / 共36页
嵌入式系统开发基础教程——基于STM32F103系列ppt课件第8章-通用同步异步通信USART_第3页
第3页 / 共36页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,1,第,8,章 通用同步异步通信,USART,通用同步异步通信,USART,微信公众号:讲编程的高老师,8,通用同步异步通信USART微信公众号:讲编程的高老师8,1,本章目标,了解串行通信的概念,掌握,STM32F103xx,中,USART,的结构和功能,掌握串口的配置方法,掌握使用库函数控制,STM32F103xx,的串口来发送和接收数据的方法,本章目标了解串行通信的概念,目录,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,应用案例,1,:串口查询方式接收,8.4,应用案例,2,:串口中断方式接收,8.5,小结,目录/Contents8.1串行通信原理概述8.2STM32,目录,/,Contents,8.1,串行通信原理概述,一、串行通信的硬件连接,二、异步串行通信的数据帧,目录/Contents8.1串行通信原理概述一、串行通信的硬,串行通信的硬件连接,两台工作电平标准相同的单片机之间只需将发送端(,TXD,)和接收端(,RXD,)交叉连接,再将参考零电位引脚相连接,串行通信的硬件连接两台工作电平标准相同的单片机之间只需将发送,串行通信的硬件连接,单片机实现两个,RS-232,通信接口的电路,通信标准,电平标准,5V TTL,逻辑,1,:,2.45V,逻辑,0,:,00.5V,RS-232,逻辑,1,:,-15-3V,逻辑,0,:,+3+15V,串行通信的硬件连接单片机实现两个RS-232通信接口的电路通,串行通信的硬件连接,USB,转串口后与单片机通信电路原理图,串行通信的硬件连接USB转串口后与单片机通信电路原理图,异步串行通信的数据帧,异步串行通信示意图,字符帧的结构,异步串行通信的数据帧异步串行通信示意图字符帧的结构,目录,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,应用案例,1,:串口查询方式接收,8.4,应用案例,2,:串口中断方式接收,8.5,小结,目录/Contents8.1串行通信原理概述8.2STM32,目录,/,Contents,8.2,STM32F103xx,的串口工作原理,一、,USART,的结构框图,二、利用库函数设置和使用串口,三、数据发送与接收,目录/Contents8.2STM32F103xx的串口工作,USART,的结构框图,波特率控制,中断控制,收发控制,数据存储,与,转移,USART的结构框图波特率控制中断控制收发控制数据存储与转移,利用库函数设置和使用串口,函数名,描述,RCC_APB2PeriphClockCmd,串口时钟使能及,GPIO,时钟使能,USART_DeInit,串口复位,GPIO_Init,串口参数初始化,USART_ITConfig,开启中断并且初始化,NVIC,USART_Cmd,使能串口,利用库函数设置和使用串口函数名 描述RCC_APB2Peri,数据发送与接收,函数名,描述,USART_SendData,向串口寄存器,USART_DR,写入一个数据(发送数据),USART_ReceiveData,读取串口接收到的数据,USART_GetFlagStatus,读取串口状态,数据发送与接收函数名 描述USART_SendData向串口,目录,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,应用案例,1,:串口查询方式接收,8.4,应用案例,2,:串口中断方式接收,8.5,小结,目录/Contents8.1串行通信原理概述8.2STM32,目录,/,Contents,8.3,应用案例,1,:串口查询方式接收,一、目标,二、仿真电路设计,三、运行结果,目录/Contents8.3应用案例1:串口查询方式接收一、,案例,1,目标,使用,STM32F103R6,串口,1,,实现,:,能通过,查询方式,接收数据,每接收到一个字节,立即向对方发送一个相同内容的字节,并把该字节的十六进制码显示在两位数码管上。,案例1目标使用STM32F103R6串口1,实现:能通过查询,仿真电路,仿真电路,虚拟串口软件,Virtual Serial Port Driver,创建,COM1,、,COM2,虚拟串口软件Virtual Serial Port Driv,虚拟串口软件占用,COM2,,向,COM1,(单片机端)发送数据,虚拟串口软件占用COM2,向COM1(单片机端)发送数据,代码实现,代码实现,usart.h,#include vartypes.h,#include stdio.h /,为重定向,printf,函数作准备,#,ifndef _USART_H,#define _USART_H,void usart_init(Int32U baud);,extern Int08U Receive_byte;,#endif,usart.h#include vartypes.h,usart.c,/Filename:usart.c,#include includes.h,Int08U Receive_byte;,void usart_init(Int32U baud),GPIO_InitTypeDef GPIO_InitStructure;/GPIO,初始化结构体,USART_InitTypeDef USART_InitStructure;/,串口初始化结构,RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);/,使能,USART1,,,GPIOA,时钟,USART_DeInit(USART1);/,复位串口,1,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;/USART1_TX GPIOA.9,GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;,GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;/,复用推挽输出,GPIO_Init(GPIOA,/,初始化,GPIOA.9,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;,/USART1_RX GPIOA.10,初始化,GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;/,浮空输入,GPIO_Init(GPIOA,/,初始化,GPIOA.10,USART_InitStructure.USART_BaudRate=baud;/,串口波特率,USART_InitStructure.USART_WordLength=USART_WordLength_8b;/,字长为,8,位数据格式,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,/,初始化串口,1,USART_Cmd(USART1,ENABLE);/,使能串口,1,/,加入以下代码,支持,printf,函数,/fputc,函数重定向 需要包含头文件,stdio.h,,并且勾选,Options Target,对话框,Target,选项卡中的,use MicroLIB,int fputc(int ch,FILE*f),USART_SendData(USART1,(uint8_t)ch);/USART1,发送一个字符数据,while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET);/,等待发送完毕,return ch;,usart_Init(),初始化串口,usart.c/Filename:usart.cusar,Led.h,/Filename:led.h,#include vartypes.h,#ifndef _LED_H,#define _LED_H,void LED_Init(void);,#endif,Led.h/Filename:led.h,usart.c,/Filename:led.c,#include includes.h,void LED_Init(void),GPIO_InitTypeDef GPIO_InitStructure;,RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);,/,使能,PB,端口时钟,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/,配置,PB,全部端口,GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/,推挽输出,GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;/IO,口速度为,10MHz,GPIO_Init(GPIOB,/,根据设定参数初始化,GPIOB,LED_Init(),初始化数码管相关的,IO,端口,usart.c/Filename:led.cLED_In,对,system_stm32f10 x.c,进行修改,/,void SystemInit(void),RCC_DeInit();/,将外设,RCC,寄存器重设为缺省值,RCC_HSICmd(ENABLE);/,使能,HSI,while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)=RESET);/,等待,HSI,使能成功,RCC_HCLKConfig(RCC_SYSCLK_Div1);/,设置,AHB,时钟,HCLK=SYSCLK/1,RCC_PCLK1Config(RCC_HCLK_Div4);/,设置低速速,AHB,时钟,RCC_PCLK2Config(RCC_HCLK_Div1);/,设置高速,AHB,时钟,/,设置,PLL,时钟源及倍频系数,RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_12);/8M/2=4M,4M*12=48M,在,Proteus,中要设置,CPU,工作频率为,48M,,否则串行通信会出错,RCC_PLLCmd(ENABLE);/,使能,PLL,/,等待指定的,RCC,标志位设置成功 等待,PLL,初始化成功,while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET);,/,设置系统时钟(,SYSCLK,)设置,PLL,为系统时钟源,RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/,选择想要的系统时钟,/,等待,PLL,成功用作于系统时钟的时钟源,while(RCC_GetSYSCLKSource()!=0 x08);/0 x08,:,PLL,作为系统时钟,SystemInit(),初始化配置系统时钟源,经过测试,在,Proteus,仿真平台中,当,STM32F103xx,使用外部晶振(,HSE,)作为系统时钟源时,会导致波特率不准确,从而导致通信失败。为此,要在,system_stm32f10 x.c,文件中修改,SystemInit,函数。,system_stm32f10 x.c,文件是非常重要的系统文
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!