《嵌入式系統(tǒng)開發(fā)基礎(chǔ)教程——基于STM32F103系列ppt課件第8章-通用同步異步通信USART》由會(huì)員分享,可在線閱讀,更多相關(guān)《嵌入式系統(tǒng)開發(fā)基礎(chǔ)教程——基于STM32F103系列ppt課件第8章-通用同步異步通信USART(36頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),#,1,第,8,章 通用同步異步通信,USART,通用同步異步通信,USART,微信公眾號(hào):講編程的高老師,8,通用同步異步通信USART微信公眾號(hào):講編程的高老師8,1,本章目標(biāo),了解串行通信的概念,掌握,STM32F103xx,中,USART,的結(jié)構(gòu)和功能,掌握串口的配置方法,掌握使用庫函數(shù)控制,STM32F103xx,的串口來發(fā)送和接收數(shù)據(jù)的方法,本章目標(biāo)了解串行通信的概念,目錄,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,應(yīng)用案例,1,:串口
2、查詢方式接收,8.4,應(yīng)用案例,2,:串口中斷方式接收,8.5,小結(jié),目錄/Contents8.1串行通信原理概述8.2STM32,目錄,/,Contents,8.1,串行通信原理概述,一、串行通信的硬件連接,二、異步串行通信的數(shù)據(jù)幀,目錄/Contents8.1串行通信原理概述一、串行通信的硬,串行通信的硬件連接,兩臺(tái)工作電平標(biāo)準(zhǔn)相同的單片機(jī)之間只需將發(fā)送端(,TXD,)和接收端(,RXD,)交叉連接,再將參考零電位引腳相連接,串行通信的硬件連接兩臺(tái)工作電平標(biāo)準(zhǔn)相同的單片機(jī)之間只需將發(fā)送,串行通信的硬件連接,單片機(jī)實(shí)現(xiàn)兩個(gè),RS-232,通信接口的電路,通信標(biāo)準(zhǔn),電平標(biāo)準(zhǔn),5V TTL,邏輯
3、,1,:,2.45V,邏輯,0,:,00.5V,RS-232,邏輯,1,:,-15-3V,邏輯,0,:,+3+15V,串行通信的硬件連接單片機(jī)實(shí)現(xiàn)兩個(gè)RS-232通信接口的電路通,串行通信的硬件連接,USB,轉(zhuǎn)串口后與單片機(jī)通信電路原理圖,串行通信的硬件連接USB轉(zhuǎn)串口后與單片機(jī)通信電路原理圖,異步串行通信的數(shù)據(jù)幀,異步串行通信示意圖,字符幀的結(jié)構(gòu),異步串行通信的數(shù)據(jù)幀異步串行通信示意圖字符幀的結(jié)構(gòu),目錄,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,應(yīng)用案例,1,:串口查詢方式接收,8.4,應(yīng)用案例,2,:串口中斷方式接收,8.5,小
4、結(jié),目錄/Contents8.1串行通信原理概述8.2STM32,目錄,/,Contents,8.2,STM32F103xx,的串口工作原理,一、,USART,的結(jié)構(gòu)框圖,二、利用庫函數(shù)設(shè)置和使用串口,三、數(shù)據(jù)發(fā)送與接收,目錄/Contents8.2STM32F103xx的串口工作,USART,的結(jié)構(gòu)框圖,波特率控制,中斷控制,收發(fā)控制,數(shù)據(jù)存儲(chǔ),與,轉(zhuǎn)移,USART的結(jié)構(gòu)框圖波特率控制中斷控制收發(fā)控制數(shù)據(jù)存儲(chǔ)與轉(zhuǎn)移,利用庫函數(shù)設(shè)置和使用串口,函數(shù)名,描述,RCC_APB2PeriphClockCmd,串口時(shí)鐘使能及,GPIO,時(shí)鐘使能,USART_DeInit,串口復(fù)位,GPIO_Init,
5、串口參數(shù)初始化,USART_ITConfig,開啟中斷并且初始化,NVIC,USART_Cmd,使能串口,利用庫函數(shù)設(shè)置和使用串口函數(shù)名 描述RCC_APB2Peri,數(shù)據(jù)發(fā)送與接收,函數(shù)名,描述,USART_SendData,向串口寄存器,USART_DR,寫入一個(gè)數(shù)據(jù)(發(fā)送數(shù)據(jù)),USART_ReceiveData,讀取串口接收到的數(shù)據(jù),USART_GetFlagStatus,讀取串口狀態(tài),數(shù)據(jù)發(fā)送與接收函數(shù)名 描述USART_SendData向串口,目錄,/,Contents,8.1,串行通信原理概述,8.2,STM32F103xx,的串口工作原理,8.3,應(yīng)用案例,1,:串口查詢方式接
6、收,8.4,應(yīng)用案例,2,:串口中斷方式接收,8.5,小結(jié),目錄/Contents8.1串行通信原理概述8.2STM32,目錄,/,Contents,8.3,應(yīng)用案例,1,:串口查詢方式接收,一、目標(biāo),二、仿真電路設(shè)計(jì),三、運(yùn)行結(jié)果,目錄/Contents8.3應(yīng)用案例1:串口查詢方式接收一、,案例,1,目標(biāo),使用,STM32F103R6,串口,1,,實(shí)現(xiàn),:,能通過,查詢方式,接收數(shù)據(jù),每接收到一個(gè)字節(jié),立即向?qū)Ψ桨l(fā)送一個(gè)相同內(nèi)容的字節(jié),并把該字節(jié)的十六進(jìn)制碼顯示在兩位數(shù)碼管上。,案例1目標(biāo)使用STM32F103R6串口1,實(shí)現(xiàn):能通過查詢,仿真電路,仿真電路,虛擬串口軟件,Virtual
7、Serial Port Driver,創(chuàng)建,COM1,、,COM2,虛擬串口軟件Virtual Serial Port Driv,虛擬串口軟件占用,COM2,,向,COM1,(單片機(jī)端)發(fā)送數(shù)據(jù),虛擬串口軟件占用COM2,向COM1(單片機(jī)端)發(fā)送數(shù)據(jù),代碼實(shí)現(xiàn),代碼實(shí)現(xiàn),usart.h,#include vartypes.h,#include stdio.h /,為重定向,printf,函數(shù)作準(zhǔn)備,#,ifndef _USART_H,#define _USART_H,void usart_init(Int32U baud);,extern Int08U Receive_byte;,#endi
8、f,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,初始化結(jié)構(gòu)體,USART_InitTypeDef USART_InitStructure;/,串口初始化結(jié)構(gòu),RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);/,使能
9、,USART1,,,GPIOA,時(shí)鐘,USART_DeInit(USART1);/,復(fù)位串口,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;/,復(fù)用推挽輸出,GPIO_Init(GPIOA,/,初始化,GPIOA.9,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;,/USART1_RX GPIOA.10,
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;/,字長(zhǎng)為,8,位數(shù)據(jù)格式,USART_InitStructure.USART_StopBits=USART_StopBits_1;/,一個(gè)停止位,USART_InitStructure.USART_Pa
11、rity=USART_Parity_No;/,無奇偶校驗(yàn)位,USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;/,無硬件數(shù)據(jù)流控制,USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/,收發(fā)模式,USART_Init(USART1,/,初始化串口,1,USART_Cmd(USART1,ENABLE);/,使能串口,1,/,加入以下代碼,支持,printf,函數(shù),/fputc,函數(shù)重定向 需要包含頭文件,stdio.h,,并且
12、勾選,Options Target,對(duì)話框,Target,選項(xiàng)卡中的,use MicroLIB,int fputc(int ch,FILE*f),USART_SendData(USART1,(uint8_t)ch);/USART1,發(fā)送一個(gè)字符數(shù)據(jù),while(USART_GetFlagStatus(USART1,USART_FLAG_TC)=RESET);/,等待發(fā)送完畢,return ch;,usart_Init(),初始化串口,usart.c/Filename:usart.cusar,Led.h,/Filename:led.h,#include vartypes.h,#ifndef _L
13、ED_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,端口時(shí)鐘,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/,配置,PB,全部端口,GPIO_InitS
14、tructure.GPIO_Mode=GPIO_Mode_Out_PP;/,推挽輸出,GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;/IO,口速度為,10MHz,GPIO_Init(GPIOB,/,根據(jù)設(shè)定參數(shù)初始化,GPIOB,LED_Init(),初始化數(shù)碼管相關(guān)的,IO,端口,usart.c/Filename:led.cLED_In,對(duì),system_stm32f10 x.c,進(jìn)行修改,/,void SystemInit(void),RCC_DeInit();/,將外設(shè),RCC,寄存器重設(shè)為缺省值,RCC_HSICmd(ENABLE);/,
15、使能,HSI,while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)=RESET);/,等待,HSI,使能成功,RCC_HCLKConfig(RCC_SYSCLK_Div1);/,設(shè)置,AHB,時(shí)鐘,HCLK=SYSCLK/1,RCC_PCLK1Config(RCC_HCLK_Div4);/,設(shè)置低速速,AHB,時(shí)鐘,RCC_PCLK2Config(RCC_HCLK_Div1);/,設(shè)置高速,AHB,時(shí)鐘,/,設(shè)置,PLL,時(shí)鐘源及倍頻系數(shù),RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_12);/8M/2=4M,4M*
16、12=48M,在,Proteus,中要設(shè)置,CPU,工作頻率為,48M,,否則串行通信會(huì)出錯(cuò),RCC_PLLCmd(ENABLE);/,使能,PLL,/,等待指定的,RCC,標(biāo)志位設(shè)置成功 等待,PLL,初始化成功,while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET);,/,設(shè)置系統(tǒng)時(shí)鐘(,SYSCLK,)設(shè)置,PLL,為系統(tǒng)時(shí)鐘源,RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/,選擇想要的系統(tǒng)時(shí)鐘,/,等待,PLL,成功用作于系統(tǒng)時(shí)鐘的時(shí)鐘源,while(RCC_GetSYSCLKSource()!=0 x08);/0 x08,:,PLL,作為系統(tǒng)時(shí)鐘,SystemInit(),初始化配置系統(tǒng)時(shí)鐘源,經(jīng)過測(cè)試,在,Proteus,仿真平臺(tái)中,當(dāng),STM32F103xx,使用外部晶振(,HSE,)作為系統(tǒng)時(shí)鐘源時(shí),會(huì)導(dǎo)致波特率不準(zhǔn)確,從而導(dǎo)致通信失敗。為此,要在,system_stm32f10 x.c,文件中修改,SystemInit,函數(shù)。,system_stm32f10 x.c,文件是非常重要的系統(tǒng)文