




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、通用同步異步通信USART微信公眾號:講編程的高老師8通用同步異步通信USART微信公眾號:講編程的高老師8本章目標(biāo)了解串行通信的概念掌握STM32F103xx中USART的結(jié)構(gòu)和功能掌握串口的配置方法掌握使用庫函數(shù)控制STM32F103xx的串口來發(fā)送和接收數(shù)據(jù)的方法本章目標(biāo)了解串行通信的概念目錄/Contents8.1串行通信原理概述8.2STM32F103xx的串口工作原理8.3應(yīng)用案例1:串口查詢方式接收8.4應(yīng)用案例2:串口中斷方式接收8.5小結(jié)目錄/Contents8.1串行通信原理概述8.2STM32目錄/Contents8.1串行通信原理概述一、串行通信的硬件連接二、異步串行通
2、信的數(shù)據(jù)幀目錄/Contents8.1串行通信原理概述一、串行通信的硬串行通信的硬件連接兩臺工作電平標(biāo)準(zhǔn)相同的單片機(jī)之間只需將發(fā)送端(TXD)和接收端(RXD)交叉連接,再將參考零電位引腳相連接串行通信的硬件連接兩臺工作電平標(biāo)準(zhǔn)相同的單片機(jī)之間只需將發(fā)送串行通信的硬件連接單片機(jī)實(shí)現(xiàn)兩個RS-232通信接口的電路通信標(biāo)準(zhǔn)電平標(biāo)準(zhǔn)5V TTL邏輯1: 2.45V邏輯0: 00.5VRS-232邏輯1: -15-3V邏輯0: +3+15V串行通信的硬件連接單片機(jī)實(shí)現(xiàn)兩個RS-232通信接口的電路通串行通信的硬件連接USB轉(zhuǎn)串口后與單片機(jī)通信電路原理圖串行通信的硬件連接USB轉(zhuǎn)串口后與單片機(jī)通信電路原
3、理圖異步串行通信的數(shù)據(jù)幀異步串行通信示意圖字符幀的結(jié)構(gòu)異步串行通信的數(shù)據(jù)幀異步串行通信示意圖字符幀的結(jié)構(gòu)目錄/Contents8.1串行通信原理概述8.2STM32F103xx的串口工作原理8.3應(yīng)用案例1:串口查詢方式接收8.4應(yīng)用案例2:串口中斷方式接收8.5小結(jié)目錄/Contents8.1串行通信原理概述8.2STM32目錄/Contents8.2STM32F103xx的串口工作原理一、USART的結(jié)構(gòu)框圖二、利用庫函數(shù)設(shè)置和使用串口三、數(shù)據(jù)發(fā)送與接收目錄/Contents8.2STM32F103xx的串口工作USART的結(jié)構(gòu)框圖波特率控制中斷控制收發(fā)控制數(shù)據(jù)存儲與轉(zhuǎn)移USART的結(jié)構(gòu)框
4、圖波特率控制中斷控制收發(fā)控制數(shù)據(jù)存儲與轉(zhuǎn)移利用庫函數(shù)設(shè)置和使用串口函數(shù)名 描述RCC_APB2PeriphClockCmd串口時鐘使能及GPIO時鐘使能USART_DeInit串口復(fù)位GPIO_Init串口參數(shù)初始化USART_ITConfig開啟中斷并且初始化NVICUSART_Cmd使能串口利用庫函數(shù)設(shè)置和使用串口函數(shù)名 描述RCC_APB2Peri數(shù)據(jù)發(fā)送與接收函數(shù)名 描述USART_SendData向串口寄存器USART_DR寫入一個數(shù)據(jù)(發(fā)送數(shù)據(jù))USART_ReceiveData讀取串口接收到的數(shù)據(jù)USART_GetFlagStatus讀取串口狀態(tài)數(shù)據(jù)發(fā)送與接收函數(shù)名 描述USAR
5、T_SendData向串口目錄/Contents8.1串行通信原理概述8.2STM32F103xx的串口工作原理8.3應(yīng)用案例1:串口查詢方式接收8.4應(yīng)用案例2:串口中斷方式接收8.5小結(jié)目錄/Contents8.1串行通信原理概述8.2STM32目錄/Contents8.3應(yīng)用案例1:串口查詢方式接收一、目標(biāo)二、仿真電路設(shè)計三、運(yùn)行結(jié)果目錄/Contents8.3應(yīng)用案例1:串口查詢方式接收一、案例1目標(biāo)使用STM32F103R6串口1,實(shí)現(xiàn):能通過查詢方式接收數(shù)據(jù),每接收到一個字節(jié),立即向?qū)Ψ桨l(fā)送一個相同內(nèi)容的字節(jié),并把該字節(jié)的十六進(jìn)制碼顯示在兩位數(shù)碼管上。案例1目標(biāo)使用STM32F10
6、3R6串口1,實(shí)現(xiàn):能通過查詢仿真電路仿真電路虛擬串口軟件Virtual 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_Hvoid usart_init(Int32U baud);extern Int08U Receiv
7、e_byte;#endifusart.h#include vartypes.husart.c/Filename: usart.c#include includes.hInt08U 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
8、);/使能USART1,GPIOA時鐘 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, &GPIO_InitStructure);/初始化GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_
9、Pin_10; /USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空輸入 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA.10 USART_InitStructure.USART_BaudRate = baud;/串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字長為8位數(shù)據(jù)格式 USART_InitStructure.USART_StopBits = USA
10、RT_StopBits_1;/一個停止位 USART_InitStructure.USART_Parity = USART_Parity_No;/無奇偶校驗位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/無硬件數(shù)據(jù)流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/收發(fā)模式 USART_Init(USART1, &USART_InitStructure);/初始化串口1 USART_Cmd(USA
11、RT1, ENABLE);/使能串口1/加入以下代碼,支持printf函數(shù)/fputc函數(shù)重定向 需要包含頭文件stdio.h,并且勾選Options Target對話框Target選項卡中的use MicroLIBint fputc(int ch, FILE *f) USART_SendData(USART1, (uint8_t) ch);/USART1發(fā)送一個字符數(shù)據(jù) while(USART_GetFlagStatus(USART1, USART_FLAG_TC) = RESET);/等待發(fā)送完畢 return ch;usart_Init()初始化串口usart.c/Filename: u
12、sart.cusarLed.h/Filename: led.h#include vartypes.h#ifndef _LED_H#define _LED_Hvoid LED_Init(void);#endifLed.h/Filename: led.husart.c/Filename: led.c#include includes.hvoid LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /使能PB端口時鐘 GPIO_InitStr
13、ucture.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, &GPIO_InitStructure);/根據(jù)設(shè)定參數(shù)初始化GPIOB LED_Init()初始化數(shù)碼管相關(guān)的IO端口usart.c/Filename: led.cLED_In對system_stm32f10 x.c進(jìn)行修改/void Syste
14、mInit(void) RCC_DeInit();/將外設(shè) RCC寄存器重設(shè)為缺省值 RCC_HSICmd(ENABLE);/使能HSI while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) = RESET);/等待HSI使能成功 RCC_HCLKConfig(RCC_SYSCLK_Div1);/設(shè)置AHB時鐘 HCLK = SYSCLK/1 RCC_PCLK1Config(RCC_HCLK_Div4);/設(shè)置低速速AHB時鐘 RCC_PCLK2Config(RCC_HCLK_Div1);/設(shè)置高速AHB時鐘 /設(shè)置 PLL 時鐘源及倍頻系數(shù) RCC_PLLConf
15、ig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);/8M/2=4M, 4M*12=48M,在Proteus中要設(shè)置CPU工作頻率為48M,否則串行通信會出錯 RCC_PLLCmd(ENABLE);/使能PLL /等待指定的 RCC 標(biāo)志位設(shè)置成功 等待PLL初始化成功 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /設(shè)置系統(tǒng)時鐘(SYSCLK) 設(shè)置PLL為系統(tǒng)時鐘源 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/選擇想要的系統(tǒng)時鐘 /等待PLL成功用作于系統(tǒng)時鐘的
16、時鐘源 while(RCC_GetSYSCLKSource() != 0 x08); / 0 x08:PLL作為系統(tǒng)時鐘SystemInit()初始化配置系統(tǒng)時鐘源經(jīng)過測試,在Proteus仿真平臺中,當(dāng)STM32F103xx使用外部晶振(HSE)作為系統(tǒng)時鐘源時,會導(dǎo)致波特率不準(zhǔn)確,從而導(dǎo)致通信失敗。為此,要在system_stm32f10 x.c文件中修改SystemInit函數(shù)。system_stm32f10 x.c文件是非常重要的系統(tǒng)文件,修改時必須謹(jǐn)慎!建議將原來的SystemInit函數(shù)名稱修改為SystemInit0,再增加新的SystemInit函數(shù)。在實(shí)際硬件平臺運(yùn)行程序時,
17、無需對system_stm32f10 x.c文件作這樣的修改。對system_stm32f10 x.c進(jìn)行修改/void main.c/filename:main.c#includeincludes.hint main(void) Int08U led_table16=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;/共陽字型編碼 Int16U desplay_word;/兩位數(shù)碼管顯示字(兩字節(jié)) Receive_byte=0 x00;/數(shù)碼管顯示初
18、值“00” usart_init(9600);/串口初始化波特率為9600 LED_Init(); /LED端口初始化 printf(Hello USART!);/測試printf是否可用 while(1) if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET) /接收數(shù)據(jù)位非空標(biāo)志位不為零,即接收到了數(shù)據(jù) Receive_byte = USART_ReceiveData(USART1); /把接收到的數(shù)據(jù)傳送到變量 USART_ClearFlag(USART1, USART_FLAG_RXNE); /讀數(shù)據(jù)寄存器非空標(biāo)志清除 USA
19、RT_SendData(USART1, Receive_byte);/向串口1發(fā)送相同的數(shù)據(jù) while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); /等待發(fā)送結(jié)束 desplay_word = (led_tableReceive_byte4 8) | led_tableReceive_byte & 0 x0f; /把剛接收到的字符轉(zhuǎn)換為顯示碼 GPIO_Write(GPIOB,desplay_word);/PB口輸出顯示 在main函數(shù)中調(diào)用usart初始化函數(shù),配置波特率為9600bps。在while循環(huán)中,用USART_GetFlag
20、Status函數(shù)查詢USART1是否接收到數(shù)據(jù),如果接收到數(shù)據(jù),調(diào)用USART_ReceiveData 數(shù)據(jù)把數(shù)據(jù)傳到Receive_byte 變量。接收到的數(shù)據(jù)傳送完成之后,把讀數(shù)據(jù)寄存器非空標(biāo)志清除。調(diào)用了USART_SendData函數(shù)向外發(fā)送一個字符(Receive_byte 變量中的內(nèi)容),把接收到的數(shù)據(jù)重新發(fā)送出去。執(zhí)行發(fā)送后,等待發(fā)送完成標(biāo)志。最后把剛接收到的數(shù)據(jù)轉(zhuǎn)換為顯示碼,從PB端口輸出。main.c/filename:main.c在main函數(shù)仿真運(yùn)行效果仿真運(yùn)行效果目錄/Contents8.1串行通信原理概述8.2STM32F103xx的串口工作原理8.3應(yīng)用案例1:串口
21、查詢方式接收8.4應(yīng)用案例2:串口中斷方式接收8.5小結(jié)目錄/Contents8.1串行通信原理概述8.2STM32目錄/Contents8.4應(yīng)用案例2:串口中斷方式接收一、安例2目標(biāo)二、仿真電路設(shè)計三、運(yùn)行效果目錄/Contents8.4應(yīng)用案例2:串口中斷方式接收一、案例2目標(biāo)使用STM32F103R6串口1,實(shí)現(xiàn):通過中斷方式接收數(shù)據(jù),每接收到一個字節(jié),立即向?qū)Ψ桨l(fā)送一個相同內(nèi)容的字節(jié),并把該字節(jié)的十六進(jìn)制碼顯示在兩位數(shù)碼管上電路和調(diào)試方法與案例1相同,只有程序代碼有點(diǎn)差異!案例2目標(biāo)使用STM32F103R6串口1,實(shí)現(xiàn):通過中斷方程序代碼的不同之處在案例1代碼的基礎(chǔ)上進(jìn)行修改串口初
22、始化配置(使能接收中斷)增加串口中斷服務(wù)函數(shù)main函數(shù)中的while循環(huán)內(nèi)刪除串口查詢接收代碼。程序代碼的不同之處在案例1代碼的基礎(chǔ)上進(jìn)行修改串口初始化配置usart.c/void usart_init(Int32U bound) GPIO_InitTypeDef GPIO_InitStructure;/GPIO初始化結(jié)構(gòu)體 USART_InitTypeDef USART_InitStructure;/串口初始化結(jié)構(gòu)體 NVIC_InitTypeDef NVIC_InitStructure;/中斷初始化結(jié)構(gòu)體 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USA
23、RT1|RCC_APB2Periph_GPIOA, ENABLE);/使能USART1,GPIOA時鐘 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, &GPIO_InitStructure);/初始化GPIOA.9 GPI
24、O_InitStructure.GPIO_Pin = GPIO_Pin_10;/USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空輸入 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA.10 /Usart1 中斷 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;/設(shè)置串口1中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
25、/搶占優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;/子優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/IRQ通道使能 NVIC_Init(&NVIC_InitStructure);/根據(jù)指定的參數(shù)初始化VIC寄存器 USART_InitStructure.USART_BaudRate = bound;/串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字長為8位數(shù)據(jù)格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;/一個停止位 USART_InitStructure.USART_Parity = USART_Parity_No;/無奇偶校驗位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/無硬件數(shù)據(jù)流控制 USART_InitStructur
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南測繪職業(yè)學(xué)院《EVC企業(yè)價值創(chuàng)造》2023-2024學(xué)年第一學(xué)期期末試卷
- 閩北職業(yè)技術(shù)學(xué)院《茶藝與茶道》2023-2024學(xué)年第一學(xué)期期末試卷
- 晉城職業(yè)技術(shù)學(xué)院《莊子寓言故事與人生智慧》2023-2024學(xué)年第一學(xué)期期末試卷
- 銅陵職業(yè)技術(shù)學(xué)院《碑帖》2023-2024學(xué)年第一學(xué)期期末試卷
- DB4206T 28-2021 畜禽養(yǎng)殖檔案信息技術(shù)規(guī)范
- 川北醫(yī)學(xué)院《健美操教學(xué)與訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 達(dá)州中醫(yī)藥職業(yè)學(xué)院《品牌視覺專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 三亞中瑞酒店管理職業(yè)學(xué)院《數(shù)據(jù)科學(xué)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 沈陽體育學(xué)院《越南語初級聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 北京農(nóng)學(xué)院《英語強(qiáng)化課程I》2023-2024學(xué)年第一學(xué)期期末試卷
- 英語社團(tuán)活動課件
- 第三方檢測市場部管理制度提成方案
- 學(xué)前兒童發(fā)展心理學(xué)-情感
- GB∕T 16762-2020 一般用途鋼絲繩吊索特性和技術(shù)條件
- 電網(wǎng)施工作業(yè)票模板
- 安徽省小學(xué)學(xué)生學(xué)籍表
- 精選天津市初中地理會考試卷及答案
- 非車險銷售人員基礎(chǔ)培訓(xùn)系列第一講走進(jìn)非車險世界
- 比選申請文件模板
- pt1000熱電阻分度表
- 彩盒成品檢驗標(biāo)準(zhǔn)
評論
0/150
提交評論