基于移動機器人的嵌入式開發(fā) 課件 09-STM32串口通信_第1頁
基于移動機器人的嵌入式開發(fā) 課件 09-STM32串口通信_第2頁
基于移動機器人的嵌入式開發(fā) 課件 09-STM32串口通信_第3頁
基于移動機器人的嵌入式開發(fā) 課件 09-STM32串口通信_第4頁
基于移動機器人的嵌入式開發(fā) 課件 09-STM32串口通信_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

北京工業(yè)職業(yè)技術(shù)學(xué)院嵌入式系統(tǒng)應(yīng)用主講:

XXX老師STM32串口通信學(xué)習(xí)目標(biāo)掌握了解熟悉串口接收和發(fā)送的程序設(shè)計結(jié)合嵌入式車型機器人進行串口程序設(shè)計13什么是串口通信并行通信串行通信2STM32接口屬性STM32串口初始化配置串口相關(guān)寄存器主講內(nèi)容主講內(nèi)容Speechcontent9.2STM串口初始化配置9.1串口通信概述9.3STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計9.4項目實戰(zhàn)在嵌入式智能車型機器人的核心板上,配置有可插拔Wi-Fi模塊與ZigBee模塊,使其可以通過Wi-Fi模塊或者ZigBee模塊與外界進行通信與數(shù)據(jù)交互。那么,嵌入式智能車型機器人的核心(STM32F103VCT6微處理器)又是怎樣與Wi-Fi模塊或ZigBee模塊進行通信與數(shù)據(jù)交互的?嵌入式智能車型機器人上使用了異步串口通信技術(shù)來實現(xiàn)與Wi-Fi模塊或ZigBee模塊的通信與數(shù)據(jù)交互。串口通信概述

隨著計算機系統(tǒng)的應(yīng)用與微機網(wǎng)絡(luò)的發(fā)展,通信(這里所說的通信是指計算機與外界信息的交互)功能越來越重要了?,F(xiàn)如今,個人計算機常用的有USB口(通用串行通信口)、USART口(通用同步/異步串行接收/發(fā)送器,以下簡稱串口)等。因為通信速率、距離、硬件特性等原因,USART口在個人計算機基本上已經(jīng)看不到了。但是在嵌入式鄰域里,USART口的地位仍處于金字塔頂端,無可取代。因為對于一般的嵌入式硬件平臺,對于通信時的數(shù)據(jù)量以及數(shù)據(jù)的傳輸速率的要求并不高,并且USART口有著硬件消耗低、可靠性高和靈活性高的特征,使其非常適用于嵌入式設(shè)備的需求。使用USART口可以輕松地實現(xiàn)嵌入式微處理器與外圍設(shè)備之間的通信。在當(dāng)代微處理器控制系統(tǒng)中,通信一般有兩種方式,分別是并行通信和串行通信。串口通信概述

9.1.1并行通信并行通信方式,一般是指將數(shù)據(jù)字節(jié)的各個位通過多條數(shù)據(jù)線同時進行傳輸,其中,每一位占據(jù)一條數(shù)據(jù)線。如圖所示,并行通信次傳輸一個字節(jié)(10101010),所以需要使用8條數(shù)據(jù)線,同時,除了8條數(shù)據(jù)線外,還需要控制線以及地址線。由于現(xiàn)在都是使用傳輸速率快的USB2.0或USB3.0接口通信,并口通信已經(jīng)使用的非常少,并且在進行STM32串口開發(fā)時,使用的是串行通信。

串口通信概述使用并行通信的優(yōu)點是:控制簡單、相對傳輸速度快。使用并行通信的缺點是:由于傳輸線較多,長距離傳送時成本高。發(fā)送方與接收方同時接收存在困難。串口通信概述9.1.2串行通信

并行通信方式,一般是指將數(shù)據(jù)字節(jié)排列一個隊列,在一條傳輸線上逐個傳送。如圖所示,串行通信傳送一個字節(jié)數(shù)據(jù)(10101010),在一條數(shù)據(jù)線上,因為一次只能傳輸一位數(shù)據(jù),所以對于一個字節(jié)的數(shù)據(jù),要分8次才能傳輸完畢。在進行串行通信時,必須要有這樣一個過程:在數(shù)據(jù)發(fā)送時,要把并行數(shù)據(jù)變成串行數(shù)據(jù)發(fā)送到線路上去,接收數(shù)據(jù)時要把串行數(shù)據(jù)變成并行數(shù)據(jù),只有這樣做才能被嵌入式設(shè)備處理。

串口通信概述

9.1.3STM32串口特性在STM32中,配備了多個USART口(其具體數(shù)目視具體芯片而定),其主要特性如下:實現(xiàn)了全雙工的異步通信。遵守NRZ標(biāo)準格式。配備了分頻數(shù)波特率發(fā)生器系統(tǒng)。發(fā)送和接收共用可編程波特率,最高達4.5Mbit/s??删幊虜?shù)據(jù)字長度(8位或9位)。可配置的停止位。支持1或2個停止位。串口通信概述可充當(dāng)LIN總線主機,發(fā)送同步斷開符;還可充當(dāng)LIN總線從機,檢測斷開符。當(dāng)USART配置成LIN總線模式時,可生成13位斷開符;可檢測10/11位斷開符??蓪崿F(xiàn)單線半雙工通信。擁有單獨的發(fā)送器和接收器使能位。擁有3種檢測標(biāo)志:接收緩沖器滿、發(fā)送緩沖器空、傳輸結(jié)束標(biāo)志。擁有2種校驗控制:發(fā)送校驗位、對接收數(shù)據(jù)進行校驗。從這些特性中可以看出,USART除了可以進行最基本的串行通信,還可以應(yīng)用于LIN應(yīng)用、IRDA(紅外通信)應(yīng)用等。串口通信概述主講內(nèi)容主講內(nèi)容Speechcontent9.1串口通信概述9.2STM串口初始化配置9.3STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計9.4項目實戰(zhàn)為了能夠使串口在STM32上工作,首先要做的是對串口進行初始化配置。在此之前,需要先了解和STM32串口初始化配置相關(guān)的幾個寄存器。

9.2.1STM32串口初始化配置相關(guān)寄存器

1.APB2ENR(APB2外設(shè)時鐘使能寄存器)在STM32中,USART1_TX(串口1輸出)和USART1_RX(串口1輸入)重映射到了STM32上的GPIOA9引腳和GPIOA10引腳上。所以要使能GPIOA口和USART1口。如圖所示,GPIOA口和USART1的使能都是在APB2ENR(外設(shè)時鐘使能寄存器)上,所以只要對該寄存器操作即可。

STM串口初始化配置

STM串口初始化配置

圖中,位14表示USART1口時鐘使能位,寫1表示使能USART1時鐘,寫0表示關(guān)閉USART1時鐘。位2表示GPIOA口時鐘使能位,寫1表示使能GPIOA時鐘,寫0表示關(guān)閉GPIOA時鐘。使用C語言在不影響其他位的情況下,可以使用以下語句使能GPIOA口和USART1口。

RCC->APB2ENR|=1<<2;RCC->APB2ENR|=1<<14;

STM串口初始化配置2.APB2RSTR(APB2外設(shè)復(fù)位寄存器)在進行串口初始化配置時,需要對USART口進行復(fù)位,所以在這里,需要使用APB2RSTR外設(shè)復(fù)位寄存器。下圖為該寄存器的各位描述。

STM串口初始化配置圖中,位14表示USART1口復(fù)位,寫1表示復(fù)位USART1,寫0表示無效。使用C語言在不影響其他位的情況下,可以使用以下語句復(fù)位USART1口。RCC->APB2RSTR|=1<<14;RCC->APB2RSTR&=~(1<<14);

STM串口初始化配置3.USART_CRx(串口控制寄存器)在STM32中,每個串口都有3個控制寄存器,串口的很多配置都是通過這3個寄存器來進行設(shè)置的。在嵌入式智能車型機器人中,只用到了USART_CR1寄存器。下圖為該寄存器的各位描述。

STM串口初始化配置圖中,該寄存器的低14位用于串口的功能設(shè)置。位13表示串口使能位,寫1,使能串口。位12表示字長選擇位,寫1,1個起始位,9個數(shù)據(jù)位,1個停止位。位10表示校驗使能位,寫0,禁止校驗;寫1,使能校驗。位9表示校驗位選擇,寫0,偶校驗;寫1,奇校驗。位7表示發(fā)送緩沖區(qū)空中斷是能位,寫1,當(dāng)USART->SR寄存器中的TEX為1時,將產(chǎn)生串口中斷。位6表示發(fā)送完成中斷使能位,寫1,當(dāng)USART->SR中的TC位為1時,將產(chǎn)生串口中斷。位5表示接收緩沖區(qū)非空中斷使能,寫1,當(dāng)USART->SR中的ORE或者RXNE位為1時,將產(chǎn)生串口中斷。位3表示發(fā)送使能位,寫1,開啟串口發(fā)送功能。位2表示接收使能位,寫1,開啟串口接收功能。

STM串口初始化配置假如需求是設(shè)置該寄存器為1個停止位,無校驗位,并且不影響其他位的設(shè)置。通過以下C代碼,可以完成對該寄存器的設(shè)置。USART1->CR1|=0X200C;

STM串口初始化配置4.USART_DR(串口數(shù)據(jù)寄存器)在STM32中,串口的發(fā)送與接收數(shù)據(jù)都是通過USART_DR寄存器實現(xiàn)的。該寄存器是一個雙寄存器,包含了TDR和RDR。當(dāng)向該寄存器寫數(shù)據(jù)的時候,串口就會自動發(fā)送,當(dāng)收到數(shù)據(jù)的時候,也會存在該寄存器內(nèi)。圖9.6所示為該寄存器的各位描述。

STM串口初始化配置圖中,位0~8表示串口數(shù)據(jù),其中包含了發(fā)送或接收的數(shù)據(jù)。由于它是由兩個寄存器組成的,分別是發(fā)送用的(TDR)和接收用的(RDR),所以該寄存器兼具讀寫功能。TDR寄存器提供了內(nèi)部總線和輸出以為寄存器之間的并行接口。RDR寄存器提供了輸入移位寄存器和內(nèi)部總線之間的并行接口。當(dāng)使能了校驗位進行數(shù)據(jù)發(fā)送時,寫到MSB的值會被后來的校驗位取代。當(dāng)進行數(shù)據(jù)接收時,收到的MSB位是接收到的校驗位。

STM串口初始化配置

5.USART_SR(串口狀態(tài)寄存器)在STM32中,串口的狀態(tài)可以通過讀取USART_SR寄存器來獲取。該寄存器的各位描述如下圖所示。

STM串口初始化配置在這里只要關(guān)注5位、6位即可。RXNE(讀數(shù)據(jù)寄存器非空),當(dāng)該位被值1的時候,就是提示已經(jīng)有數(shù)據(jù)被接收到了,并且可以讀出來了。這時候要做的就是讀取USART->DR,通過讀取USART->DR寄存器可以將該位清零,也可以向該位寫0,直接清除。

TC(發(fā)送完成),當(dāng)該位被置位的時候,表示USART->DR內(nèi)的數(shù)據(jù)已經(jīng)被發(fā)送完成了。如果設(shè)置了這個位的中斷,則會產(chǎn)生中斷。該位也有兩種清零方式:①讀USART->SR寄存器,寫USART->DR;②直接向該位寫0。

STM串口初始化配置

6.USART_BRR(波特率寄存器)在STM32的每個串口都一個獨立的波特率寄存器USART_BRR,通過設(shè)置該寄存器就可以達到配置不同波特率的目的。下圖所示為該寄存器的各位描述。

STM串口初始化配置圖中,位4~15表示USARTDIV的整數(shù)部分,這12位定義了USART分頻器除法因子(USARTDIV)的整數(shù)部分。位0~3位表示USARTDIV的小數(shù)部分,這4位定義了USART分頻器除法因子(USARTDIV)的小數(shù)部分。在這里假設(shè)向BRR寄存器中寫入的值是mantissa,使用C語言實現(xiàn)設(shè)置該寄存器如下:USART1->BRR=mantissa;

STM串口初始化配置

9.2.2STM32波特率計算可以通過USARTx->BRR寄存器設(shè)置波特率,其中最低4位用來存放小數(shù)部分,緊接著的12位用來存放整數(shù)部分,最高16位保留。在STM32中,串口波特率計算公式如下:

如上公式所示,串口波特率計算公式中是給串口的時鐘(PCLK1用于USART2、3,PCLK2用于USART1),USARTDIV是一個無符號定點數(shù)。只要得到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR的值。反之,可以通過USART->BRR的值得到USARTDIV的值。

STM串口初始化配置

例:通過USARTDIV得到串口USART_BRR寄存器的值假設(shè)串口1要設(shè)置為115200波特率,而PCLK2的時鐘為72M。這樣,根據(jù)上面的公式有:USARTDIV=72000000/(115200×16)=39.0625那么得到DIV_Fraction=16×0.0625=1=0x01DIV_Mantissa=39=0x27這樣,就得到了USART1->BRR的值為0x0271。只要設(shè)置串口1的BRR寄存器值為0x0271就可以得到115200的波特率。

STM串口初始化配置在進行開發(fā)時,使用C語言實現(xiàn)波特率計算的代碼片段如下:

floattemp; //聲明中間緩存變量

u16mantissa; //聲明變量保存整數(shù)部分及最后結(jié)果

u16fraction; //聲明變量保存小數(shù)部分

temp=(float)(pclk2*1000000)/(bound*16);//pclk2為參數(shù),表示時鐘,

//bound為參數(shù)表示輸入波特率值

mantissa=temp; //得到整數(shù)部分值

fraction=(temp-mantissa)*16; //得到小數(shù)部分值

mantissa<<=4; //左移4位,空出小數(shù)部分

mantissa+=fraction; //加上小數(shù)部分的值,得到最終結(jié)果

STM串口初始化配置9.2.3STM32串口初始化配置程序設(shè)計1.STM32中實現(xiàn)串口初始化配置步驟1:

獲得波特率的值。步驟2

:使能GPIO口和USART口。步驟3:

復(fù)位USART口。步驟4:

設(shè)置中斷。

STM串口初始化配置2.程序設(shè)計注意事項

為方便程序復(fù)用,需將串口初始化配置的過程封裝為一個函數(shù)。同時,需要將時鐘與輸入波特率的值設(shè)置為參數(shù)。

為引用該方法方法,需在對應(yīng)的.h文件中定義。

為使能接收中斷在.h文件中宏定義一個常量,例如,#defineEN_USART1_RX。

STM串口初始化配置3.程序?qū)崿F(xiàn)(1)以下為使用C語言進行STM32串口初始化配置的程序清單。代碼清單:#include"usart.h"voiduart1_init(u32pclk2,u32bound){ floattemp; u16mantissa; u16fraction; temp=(float)(pclk2*1000000)/(bound*16); mantissa=temp;

STM串口初始化配置fraction=(temp-mantissa)*16;mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; RCC->APB2ENR|=1<<14; GPIOA->CRH=0X444444B4; RCC->APB2RSTR|=1<<14; RCC->APB2RSTR&=~(1<<14);

STM串口初始化配置USART1->BRR=mantissa; //將波特率值寫入USART1->BRR寄存器中USART1->CR1|=0X200C;//1位停止,無校驗位#ifEN_USART1_RX USART1->CR1|=1<<8; //接收緩沖區(qū)非空中斷使能

USART1->CR1|=1<<5; //接收緩沖區(qū)非空中斷使能

MY_NVIC_Init(3,1,USART1_IRQChannel,1);#endif}

STM串口初始化配置(2)在USART目錄下創(chuàng)建usart.h文件,輸入以下代碼清單中的代碼。#ifndef__USART_H#define__USART_H#include<stm32f10x_lib.h>#include<string.h>#include"sys.h"#include"test.h"#defineEN_USART1_RX1voiduart1_init(u32pclk2,u32bound);#endif

STM串口初始化配置主講內(nèi)容主講內(nèi)容Speechcontent9.1串口通信概述9.3STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計9.2STM串口初始化配置9.4項目實戰(zhàn)9.3.1STM32串口數(shù)據(jù)接收中斷響應(yīng)實現(xiàn)由于在進行STM32串口初始化配置時設(shè)置了串口1的接收使能中斷,所以串口數(shù)據(jù)的接收只要完成其串口中斷的響應(yīng)函數(shù)即可。當(dāng)串口1發(fā)生了響應(yīng)的中斷后,就會跳到其響應(yīng)函數(shù)執(zhí)行。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計1.中斷響應(yīng)函數(shù)程序?qū)崿F(xiàn)步驟步驟1定義一個USART1_RX_BUF[]數(shù)組,用來存放外圍設(shè)備發(fā)來的數(shù)據(jù)。定義一個RX_num1變量,用來表示USART1_RX_BUF[]數(shù)組的下標(biāo),以及判斷數(shù)據(jù)接收是否完成。

步驟2

定義一個變量temp用來保存USART1->DR中的一個字節(jié)數(shù)據(jù)。根據(jù)RX_num1的值,判斷temp中內(nèi)容,保存到USART1_RX_BUF[]數(shù)組中的第幾位。

步驟3

當(dāng)RX_num1大于等于USART1_RX_BUF[]數(shù)組的長度時,為RX_num1賦值0。

步驟4

當(dāng)RX_num1等于0時,表示的是通信協(xié)議的第一位(即通信協(xié)議頭的第一位)。當(dāng)RX_num1大于0時,表示的是通信協(xié)議第二位及往后的數(shù)據(jù)。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計2.程序設(shè)計注意事項USART1_RX_BUF[]數(shù)組的長度是根據(jù)通信協(xié)議而定的。如果通信協(xié)議有3個字節(jié),那么USART1_RX_BUF[]數(shù)組的長度就是3;如果通信協(xié)議有8個字節(jié),那么USART1_RX_BUF[]數(shù)組的長度就是8。3.程序?qū)崿F(xiàn)(1)在usart.c文件中添加中斷響應(yīng)函數(shù)voidUSART1_IRQHandler(void)。以下為中斷響應(yīng)函數(shù)的代碼清單。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計u8USART1_RX_BUF[3];u8RX_num1=0;voidUSART1_IRQHandler(void){ u8res; res=USART1->DR; if(RX_num1>0) { USART1_RX_BUF[RX_num1]=res; RX_num1++;

}

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計

elseif(res==0xFF) { USART1_RX_BUF[0]=res; RX_num1=1; } if(RX_num1>=3) { RX_num1=0; } }

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計

添加該段代碼時需要注意,u8USART1_RX_BUF[3];和u8RX_num1=0;的位置是在包含頭文件的語句后面。在以上程序中,我們自定義了一個長度為3個字節(jié)的通信協(xié)議,其格式如下表所示。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計

(2)在usart.h文件中,添加定義好的緩沖數(shù)組,以供其他文件使用。代碼清單如下:#ifndef__USART_H#define__USART_H#include<stm32f10x_lib.h>#include<string.h>#include"sys.h"#include"test.h"externu8USART1_RX_BUF[];#defineEN_USART1_RX1voiduart1_init(u32pclk2,u32bound);#endif

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計

9.3.2STM32串口數(shù)據(jù)發(fā)送實現(xiàn)在STM32中,實現(xiàn)串口數(shù)據(jù)的發(fā)送是非常簡單的。只要將需要發(fā)送的數(shù)據(jù)放入到USART_DR寄存器中即可。1.STM32串口數(shù)據(jù)發(fā)送程序?qū)崿F(xiàn)步驟

步驟1

設(shè)計一個函數(shù),該函數(shù)為有參函數(shù)。因為需要發(fā)送的數(shù)據(jù)不是固定的,所以需要將發(fā)送的數(shù)據(jù)作為參數(shù)傳到設(shè)計好的函數(shù)中。

步驟2

將發(fā)送數(shù)據(jù)賦給USART->DR寄存器。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計

2.程序設(shè)計注意實現(xiàn)(1)因為一次只能向USART->DR寄存器中存放一個字節(jié)數(shù)據(jù),所以需要注意傳入?yún)?shù)的取值范圍,以及溢出。(2)需要一個while()循環(huán)去判斷是否發(fā)送結(jié)束,其判斷條件可以通過USART->SR的第6位去判斷。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計3.程序?qū)崿F(xiàn)(1)在usart.c文件中添加串口數(shù)據(jù)發(fā)送函數(shù)intU1SendChar(intch)。以下為串口數(shù)據(jù)發(fā)送函數(shù)的代碼清單。intU1SendChar(intch){USART1->DR=(ch&0x1FF);//將數(shù)據(jù)放入到USART->DR寄存器中

while((USART1->SR&0x40)==0);//等待發(fā)送結(jié)束

return(ch);}

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計在該函數(shù)中,USART1->DR=(ch&0x1FF);表示將需要發(fā)送的數(shù)據(jù)放入USART1->DR寄存器中。while((USART1->SR&0x40)==0);表示等待發(fā)送結(jié)束。(2)因為在更多的時候需要在其他文件中引用串口數(shù)據(jù)發(fā)送的函數(shù),所以要在usart.h中進行修改,以供其他文件使用,其代碼清單如下。

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計#ifndef__USART_H#define__USART_H#include<stm32f10x_lib.h>#include<string.h>#include"sys.h"#include"test.h"externu8USART1_RX_BUF[];#defineEN_USART1_RX1voiduart1_init(u32pclk2,u32bound);externintU1SendChar(intchar);#endif

STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計主講內(nèi)容主講內(nèi)容Speechcontent9.1串口通信概述9.4項目實戰(zhàn)9.2STM串口初始化配置9.3STM32串口數(shù)據(jù)接收和發(fā)送的程序設(shè)計9.4.1項目概述在嵌入式智能車型機器人上,可以通過Android設(shè)備發(fā)送指令控制嵌入式智能車型機器人,而且嵌入式智能車型機器人也可向Android設(shè)備發(fā)送數(shù)據(jù)。其原理是Android設(shè)備與嵌入式智能車型機器人通過Wi-Fi連接,在嵌入式智能車型機器人上,Wi-Fi模塊會將接收到的數(shù)據(jù)通過串口轉(zhuǎn)送到STM32上,STM32上也會通過串口將要發(fā)送的數(shù)據(jù)傳給Wi-Fi模塊,然后傳給Android設(shè)備。下面以STM32為核心,通過外接設(shè)備,實現(xiàn)簡單的控制數(shù)據(jù)的發(fā)送與接收。項目實戰(zhàn)9.4.2項目要求(1)嵌入式智能車型機器人可以通過按鍵或指令控制實時回傳數(shù)據(jù)到PC端。(2)按下按鍵可回傳相應(yīng)數(shù)據(jù)到PC端。(3)通過發(fā)送指令,嵌入式智能車型機器人發(fā)送相應(yīng)數(shù)據(jù)到PC端。項目實戰(zhàn)9.4.3項目框圖根據(jù)項目的要求,畫出項目框圖,如圖9.9所示。項目中包括按鍵模塊、主控芯片、Wi-Fi模塊以及PC。如果是通過按鍵控制,主控芯片會將數(shù)據(jù)通過串口轉(zhuǎn)發(fā)Wi-Fi模塊,然后Wi-Fi模塊會將數(shù)據(jù)發(fā)送到PC端,在PC端顯示。如果是通過指令控制,PC端會將數(shù)據(jù)發(fā)送到Wi-Fi模塊,Wi-Fi模塊通過串口轉(zhuǎn)發(fā)給主控芯片,數(shù)據(jù)經(jīng)過處理后,由主控芯片通過串口發(fā)送到Wi-Fi模塊,最后通過Wi-Fi將數(shù)據(jù)發(fā)送給PC端顯示。項目實戰(zhàn)項目實戰(zhàn)9.4.4電路連接

1.按鍵與STM32F103VCT6連接項目選用核心板上K1、K2、K3、K4這4個按鍵作為功能按鍵。K1與STM32上的GPIOB端口的12引腳連接。K2與STM32上的GPIOB端口的13引腳連接。K3與STM32上的GPIOB的14引腳連接。K4與STM32上的GPIOB端口的15引腳連接。其中K1與K2作為控制是否實時發(fā)送數(shù)據(jù)使用。按下K1鍵表示一直發(fā)送數(shù)據(jù)到PC端,發(fā)送數(shù)據(jù)為(0xFA0x000x000xAF)。按下K2鍵表示關(guān)閉一直發(fā)送數(shù)據(jù)到PC端,但會發(fā)送數(shù)據(jù)(0xFA0xFF0xFF0xFF)作為提示。按下K3鍵表示發(fā)送數(shù)據(jù)(0xFA0xAA0xBB0xAF)到PC端。按下K4鍵表示發(fā)送數(shù)據(jù)(0xFA0xCC0xDD0xAF)到PC端。項目實戰(zhàn)2.Wi-Fi模塊與STM32F103VCT6連接項目中,選用串口1與Wi-Fi??谶M行串口通信。所以,STM32上的GPIOA的第9引腳作為STM32的串口通信輸出端與Wi-Fi模塊的第20引腳連接。STM32上的GPIOA的第10引腳作為STM32的串口通信接收端與Wi-Fi模塊的第21引腳連接。項目實戰(zhàn)

9.4.5通信協(xié)議定義(1)PC端向嵌入式智能車型機器人發(fā)送指令數(shù)據(jù)結(jié)構(gòu),如下表所示。項目實戰(zhàn)(2)主指令對應(yīng)功能項目實戰(zhàn)

9.4.6程序設(shè)計程序流程圖如圖所示。程序中主要包括設(shè)備初始化、按鍵掃描、指令接收掃描3部分。項目實戰(zhàn)9.4.7程序?qū)崿F(xiàn)(1)新創(chuàng)建一個工程test,在其下創(chuàng)建3個目錄,分別是SYSTEM、USER、HARDWARE。SYSTEM目錄下主要存放STM32內(nèi)部設(shè)備的初始化文件、延時文件等。USER目錄下主要存放編寫的主要業(yè)務(wù)邏輯。HARDWARE目錄下主要存放外面對外圍設(shè)備初始化、功能函數(shù)的文件。因為前面章節(jié)已對系統(tǒng)時鐘初始化和延時做過講解,在此不再贅述。(2)在SYSTEM目錄下添加USART目錄,并在USART目錄下添加usart.c文件和usart.h文件。usart.c文件中代碼清單見P84-P85項目實戰(zhàn)9.4.7程序?qū)崿F(xiàn)(1)新創(chuàng)建一個工程test,在其下創(chuàng)建3個目錄,分別是SYSTEM、USER、HARDWARE。SYSTEM目錄下主要存放STM32內(nèi)部設(shè)備的初始化文件、延時文件等。USER目錄下主要存放編寫的主要業(yè)務(wù)邏輯。HARDWARE目錄下主要存放外面對外圍設(shè)備初始化、功能函數(shù)的文件。因為前面章節(jié)已對系統(tǒng)時鐘初始化和延時做過講解,在此不再贅述。(2)在SYSTEM目錄下添加USART目錄,并在USART目錄下添加usart.c文件和usart.h文件。usart.c文件和usart.h中代碼清單見P84-P85項目實戰(zhàn)(3)按鍵初始化,在HARDWARE目錄下,創(chuàng)建目錄KEY目錄,并在KEY目錄下創(chuàng)建key.c文件和key.h文件。key.c文件中的代碼清單如下:項目實戰(zhàn)#include"key.h"#include"delay.h"voidkey_init(void){RCC->APB2ENR|=1<<3;GPIOB->CRH&=0X0000FFFF; GPIOB->CRH|=0X88880000; GPIOB->ODR|=0xf000; }項目

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論