畢業(yè)設(shè)計(jì)-基于stm32的智能小車(chē)設(shè)計(jì)_第1頁(yè)
畢業(yè)設(shè)計(jì)-基于stm32的智能小車(chē)設(shè)計(jì)_第2頁(yè)
畢業(yè)設(shè)計(jì)-基于stm32的智能小車(chē)設(shè)計(jì)_第3頁(yè)
畢業(yè)設(shè)計(jì)-基于stm32的智能小車(chē)設(shè)計(jì)_第4頁(yè)
畢業(yè)設(shè)計(jì)-基于stm32的智能小車(chē)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要本次實(shí)驗(yàn)重要分析了基于STM32F103微解決器的智能小車(chē)控制系統(tǒng)的系統(tǒng)設(shè)計(jì)過(guò)程。此智能系統(tǒng)的構(gòu)成重要涉及STM32F103控制器、電機(jī)驅(qū)動(dòng)電路、紅外探測(cè)電路、超聲波避障電路。本次實(shí)驗(yàn)采用STM32F103微解決器為核心芯片,運(yùn)用PWM技術(shù)對(duì)速度以及舵機(jī)轉(zhuǎn)向進(jìn)行控制,循跡模塊進(jìn)行黑白檢測(cè),避障模塊進(jìn)行障礙物檢測(cè)并避障功效,其它外圍擴(kuò)展電路實(shí)現(xiàn)系統(tǒng)整體功效。小車(chē)在運(yùn)動(dòng)時(shí),避障程序優(yōu)先于循跡程序,用超聲波避障電路進(jìn)行測(cè)距并避障,在超聲波模塊下我們使用舵機(jī)來(lái)控制超聲波的發(fā)射方向,用紅外探測(cè)電路實(shí)現(xiàn)小車(chē)循跡功效。在硬件設(shè)計(jì)的基礎(chǔ)上提出了實(shí)現(xiàn)電機(jī)控制功效、智能小車(chē)簡(jiǎn)樸循跡和避障功效的軟件設(shè)計(jì)方案,并在STM32集成開(kāi)發(fā)環(huán)境Keil下編寫(xiě)了對(duì)應(yīng)的控制程序,并使用mcuisp軟件進(jìn)行程序下載。核心詞:stm32;紅外探測(cè);超聲波避障;PWM;電機(jī)控制

AbstractThisexperimentmainlyanalyzesthecontrolsystemofsmartcarbasedonmicroprocessorSTM32F103systemdesignprocess.ThecompositionoftheintelligentsystemmainlyincludingSTM32F103controller,motordrivecircuit,infrareddetectioncircuit,circuitofultrasonicobstacleavoidance.ThisexperimentadoptsSTM32F103microprocessorasthecorechip,usingPWMtechniquetocontrolspeedandsteeringgearsteering,trackingmoduleisusedtodetecttheblackandwhite,obstacleavoidancemoduleforobstacledetectionandobstacleavoidancefunction,otherperipheralextendedcircuittorealizethewholesystemfunction.Whenthecarismoving,obstacleavoidanceprogrampriortotracking,usingultrasonicrangingandobstacleavoidanceobstacleavoidancecircuit,weusesteeringgearunderultrasonicmoduletocontroltheemissiondirectionofultrasonic,infrareddetectioncircuitisusedtoimplementthecartrackingfunction.Onthebasisofthehardwaredesignisproposedformotorcontrolfunction,simpleintelligentcartrackingandobstacleavoidancefunctionofsoftwaredesign,andintheSTM32integrateddevelopmentenvironmentundertheKeil.Writethecorrespondingcontrolprogram,anduseMcUispprogramdownloadsoftware.Keywords:STM32;Infrareddetection;Ultrasonicobstacleavoidance;PWM;Motorcontrol目錄1.緒論 -4-1.1研究概況 -4-1.2研究思路 -4-2.軟硬件設(shè)計(jì) -5-2.1中央解決模塊 -5-2.1.1stm32f103內(nèi)部構(gòu)造 -6-2.1.2stm32最小系統(tǒng)電路設(shè)計(jì) -7-2.1.3stm32軟件設(shè)計(jì)的基本思路 -9-2.1.4stm32中斷介紹 -9-2.1.5stm32定時(shí)/計(jì)數(shù)器介紹 -11-2.1.6主程序設(shè)計(jì)流程圖 -12-2.2電機(jī)驅(qū)動(dòng)模塊 -13-2.2.1驅(qū)動(dòng)模塊構(gòu)造及其原理 -13-2.2.2驅(qū)動(dòng)模塊電路設(shè)計(jì) -13-2.2.3驅(qū)動(dòng)軟件程序設(shè)計(jì) -14-2.3避障模塊設(shè)計(jì) -18-2.3.1避障模塊器件構(gòu)造及其原理 -19-2.3.2HC-SR04模塊硬件電路設(shè)計(jì) -21-2.3.3HC-SR04模塊程序設(shè)計(jì) -21-2.4循跡模塊設(shè)計(jì) -28-2.4.1循跡模塊構(gòu)造及其原理 -28-2.4.2循跡模塊電路設(shè)計(jì) -30-2.4.3紅外循跡模塊程序設(shè)計(jì) -30-3.軟件調(diào)試 -33-3.1程序仿真 -33-3.2程序下載 -34-4.系統(tǒng)測(cè)試 -35-5.總結(jié) -37-致謝 -39-參考文獻(xiàn) -40-附錄 -41-1.緒論智能小車(chē)通過(guò)多個(gè)感應(yīng)器獲得外部環(huán)境信息和內(nèi)部運(yùn)動(dòng)狀態(tài),實(shí)現(xiàn)在復(fù)雜環(huán)境背景下的自主運(yùn)動(dòng),從而完畢含有特定功效的機(jī)器人系統(tǒng)。而隨著智能化電器時(shí)代的到來(lái),它們?cè)跒槿藗兲峁┑氖孢m的生活環(huán)境的同時(shí),也提高了制造智能化電器對(duì)于人才規(guī)定的門(mén)檻。智能小車(chē)是集成了多個(gè)高新技術(shù),它不僅融合了電子、傳感器、計(jì)算機(jī)硬件、軟件等許多學(xué)科的知識(shí),并且還涉及到當(dāng)今許多前沿領(lǐng)域的技術(shù),它是一種國(guó)家高科技技術(shù)水平的重要體現(xiàn)。通過(guò)建立起簡(jiǎn)易智能小車(chē)的設(shè)計(jì),引導(dǎo)學(xué)生從理論走向?qū)嵺`,培養(yǎng)同窗們的動(dòng)手能力,使同窗們?cè)诶斫庵悄芑娖鞯墓ぷ髟淼幕A(chǔ)上,還使同窗們獲得完畢整體項(xiàng)目的能力,并掌握了Stm32開(kāi)發(fā)板的編程原理,為同窗們進(jìn)入ARM領(lǐng)域提供了基礎(chǔ)。另外,本次課程設(shè)計(jì),使同窗們理解自己的局限性之處,從而使同窗們有目的的提高自己的能力。1.1研究概況國(guó)外研究概況:上世紀(jì)50年代初,國(guó)外就有智能車(chē)輛的研究,從90年代開(kāi)始,智能車(chē)輛的研究就進(jìn)入了系統(tǒng)化、大規(guī)模的研究階段。特別突出的是美國(guó)卡內(nèi)基-梅隴大學(xué)機(jī)器人研究所已經(jīng)完畢了Navlab系列的自主車(chē)輛的研究,這一研究成果代表了國(guó)外智能車(chē)輛的重要研究方向。國(guó)內(nèi)研究概況:我國(guó)對(duì)于智能車(chē)輛的研究較晚,始于上世紀(jì)80年代,并且現(xiàn)在大部分還是使用入門(mén)級(jí)別的51單片機(jī)進(jìn)行設(shè)計(jì)與研究的,為了彌補(bǔ)與國(guó)外研究的差距,開(kāi)設(shè)了全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽。1.2研究思路系統(tǒng)將采集的傳感器信號(hào)送入stm32微控制器中,stm32微控制器根據(jù)采集的信號(hào)做出不同的判斷,從而控制電機(jī)運(yùn)動(dòng)方向和運(yùn)動(dòng)速度。系統(tǒng)以stm32微控制器為核心,通過(guò)傳感器采集不同的信號(hào)做出判斷,繼而變化電機(jī)的運(yùn)動(dòng)方向和運(yùn)動(dòng)速度。實(shí)驗(yàn)系統(tǒng)構(gòu)造如圖1.1所示:圖1.1實(shí)驗(yàn)系統(tǒng)構(gòu)造圖2.軟硬件設(shè)計(jì)智能小車(chē)控制系統(tǒng)含有了障礙物檢測(cè)、自主避障、自主循跡等功效。對(duì)應(yīng)的控制系統(tǒng)重要由下列四個(gè)模塊構(gòu)成:避障模塊、循跡模塊、電機(jī)驅(qū)動(dòng)模塊、中央解決模塊四個(gè)模塊構(gòu)成,系統(tǒng)總體框架如圖2.1所示:這個(gè)圖調(diào)節(jié)下,和下面的編號(hào)看起來(lái)位置不協(xié)調(diào)這個(gè)圖調(diào)節(jié)下,和下面的編號(hào)看起來(lái)位置不協(xié)調(diào)圖2.1系統(tǒng)框架圖我們本節(jié)重要任務(wù)是理解各個(gè)模塊的功效,掌握各個(gè)模塊所使用的器件的使用辦法,并能夠編寫(xiě)對(duì)應(yīng)的程序代碼。掌握各個(gè)模塊的功效。2.1中央解決模塊在人類(lèi)身體構(gòu)造中,大腦能夠根據(jù)各個(gè)器官所傳輸?shù)男畔⒆龀鰧?duì)應(yīng)的行為動(dòng)作用以確保人體所必須的生理原料,而stm32解決器之于智能小車(chē)就相稱(chēng)于大腦之于人類(lèi),它能夠從各個(gè)模塊之間獲得數(shù)據(jù),并對(duì)所傳輸?shù)臄?shù)據(jù)進(jìn)行實(shí)時(shí)解決,來(lái)驅(qū)使電機(jī)模塊做出對(duì)應(yīng)的行為動(dòng)作。由ARM公司設(shè)計(jì)的基于ARMv7架構(gòu)的Cortex系列的原則體系構(gòu)造在推出,此構(gòu)造是用來(lái)滿(mǎn)足日漸復(fù)雜的不同性能規(guī)定的軟件設(shè)計(jì),根據(jù)所面對(duì)的領(lǐng)域,Cortex系列能夠分為A、R、M三個(gè)分工明確的系列[1]。Stm32解決器的出現(xiàn)為微控制系統(tǒng)、工業(yè)控制系統(tǒng)、汽車(chē)車(chē)身系統(tǒng)和無(wú)線(xiàn)網(wǎng)絡(luò)等對(duì)功耗和成本敏感的嵌入式應(yīng)用領(lǐng)域?qū)崿F(xiàn)高系統(tǒng)性能系統(tǒng)提供了基礎(chǔ),使編程的復(fù)雜性,集高性能、低功耗、低成本大大簡(jiǎn)化,并使它們?nèi)跒橛谝惑w[2]。意法半導(dǎo)體ST公司作為一種半導(dǎo)體制造廠商,是ARM公司Cortex-M3內(nèi)核開(kāi)發(fā)項(xiàng)目一種重要合作方。6月11日由ST公司率先推出的基于Cortex-M3內(nèi)核的STM32系列微控解決器研發(fā)而出。此中,A系列是面對(duì)復(fù)雜的尖端應(yīng)用程序,用于運(yùn)行開(kāi)放式的復(fù)雜操作系統(tǒng);R是Real的首字母縮寫(xiě),是面對(duì)實(shí)時(shí)系統(tǒng)開(kāi)發(fā)的;M是Mirco的首字母縮寫(xiě),專(zhuān)門(mén)面對(duì)低成本的微控制領(lǐng)域開(kāi)發(fā)研究。因此,Cortex-M3解決器是由ARM公司設(shè)計(jì)的首款基于ARMv7-M體系構(gòu)造的32位原則解決器,它不僅含有低功耗、少門(mén)數(shù)等優(yōu)點(diǎn),并且還含有短中斷延遲、低調(diào)試成本等眾多優(yōu)點(diǎn),使它在眾多的解決器中脫穎而出?,F(xiàn)在為止,STM32系列解決器暫分為2個(gè)系列。其中,STM32F101系列是原則型系列,工作頻率設(shè)定在36MHZ;STM32F103系列是增強(qiáng)型系列,工作頻率設(shè)定在72MHZ,其帶有更多片內(nèi)RAM和更豐富的外設(shè)資源。這兩個(gè)系列的產(chǎn)品在軟件和引腳封裝方面含有兼容性,并且擁有相似的片內(nèi)Flash資源,使軟件的開(kāi)發(fā)和升級(jí)更加方便。本次實(shí)驗(yàn),我們使用的是stm32f103解決器。2.1.1stm32f103內(nèi)部構(gòu)造STM32F103系列微解決器是首款基于ARMv7-M體系構(gòu)造的32位原則RISC(精簡(jiǎn)指令集)解決器,含有執(zhí)行代碼效率高,外設(shè)資源豐富等眾多優(yōu)點(diǎn)。該系列微解決器工作頻率設(shè)定在72MHz,高達(dá)128K字節(jié)的內(nèi)置Flash存儲(chǔ)器和20K字節(jié)的SRAM,方便程序編寫(xiě),并且含有豐富的通用I/O端口。其內(nèi)部構(gòu)造圖如圖2.2所示:圖2.2內(nèi)部構(gòu)造圖Stm32解決器主系統(tǒng)重要由4個(gè)被動(dòng)單元和4個(gè)驅(qū)動(dòng)單元構(gòu)成。4個(gè)驅(qū)動(dòng)單元是:通用DMA1,通用DMA2,內(nèi)核DCode總線(xiàn)和系統(tǒng)總線(xiàn)。4個(gè)被動(dòng)單元由APB橋,APB設(shè)備,內(nèi)部Flash閃存,內(nèi)部SRAM、FSMC。我們實(shí)驗(yàn)所采用的芯片含有64KBSRAM、512KBFLASH、2個(gè)基本定時(shí)器,4個(gè)通用定時(shí)器,2個(gè)高級(jí)定時(shí)器,3個(gè)SPI,2個(gè)IIC,5個(gè)串口,1個(gè)USB,1個(gè)CAN,3個(gè)12位的ADC,1個(gè)12位DAC、1個(gè)SDIO接口,1個(gè)FSMC接口以及112個(gè)通用I/O口。2.1.2stm32最小系統(tǒng)電路設(shè)計(jì)Stm32的最小系統(tǒng)電路重要由系統(tǒng)時(shí)鐘電路、實(shí)時(shí)時(shí)鐘電路、JTAG調(diào)試接口電路,復(fù)位電路和啟動(dòng)模式選擇電路構(gòu)成。最小系統(tǒng)電路原理圖如圖2-1-3所示:圖2.3最小系統(tǒng)電路原理圖重要電路原理圖的設(shè)計(jì)及功效以下所示:1.系統(tǒng)時(shí)鐘電路系統(tǒng)時(shí)鐘電路重要作用是提供節(jié)拍,就相稱(chēng)于人類(lèi)的心臟跳動(dòng),隨著心臟的跳動(dòng),血液就會(huì)達(dá)成全身部位,因此系統(tǒng)時(shí)鐘的重要性就不言而喻啦。系統(tǒng)時(shí)鐘的電路設(shè)計(jì)如圖2.4所示:圖2.4系統(tǒng)時(shí)鐘電路圖在時(shí)鐘電路中,我們選用8M的晶振。2.復(fù)位電路復(fù)位電路的設(shè)計(jì)如圖2.5所示:圖2.5復(fù)位電路圖本次實(shí)驗(yàn)所采用的開(kāi)發(fā)板為低電平復(fù)位。如圖所示,當(dāng)按鍵懸空時(shí)RST輸入為高電平,當(dāng)按鍵按下時(shí),RST腳輸入為低電平,從而電路復(fù)位。3.JTAG電路JTAG電路原理圖如圖2.6所示:圖2.6JAG電路原理圖JTAG的重要功效是使目的文獻(xiàn)燒到核解決器中。4.啟動(dòng)模式電路啟動(dòng)模式電路原理圖如圖2.7所示:圖2.7啟動(dòng)模式電路原理圖通過(guò)設(shè)立BOOT[1:0]引腳能夠選擇三種不同啟動(dòng)模式,啟動(dòng)模式如表2-1所示:表2-1啟動(dòng)模式表啟動(dòng)模式選擇引腳啟動(dòng)模式闡明BOOT1BOOT0X0主閃存存儲(chǔ)器主閃存存儲(chǔ)器被選為啟動(dòng)區(qū)域01系統(tǒng)存儲(chǔ)器系統(tǒng)存儲(chǔ)器被選為啟動(dòng)區(qū)域11內(nèi)置SRAM內(nèi)置SRAM被選為啟動(dòng)區(qū)域2.1.3stm32軟件設(shè)計(jì)的基本思路在對(duì)其它模塊設(shè)計(jì)之前,我們必須理解stm32的編程規(guī)則。任何解決器,涉及stm32解決器,想要解決器完畢某項(xiàng)對(duì)應(yīng)的動(dòng)作,就必須對(duì)解決器的寄存器進(jìn)行操作。例如,我們?cè)趩纹瑱C(jī)C51中,同樣,我們?cè)趕tmM32的開(kāi)發(fā)中過(guò)程中,我們同樣能夠?qū)拇嫫髦苯硬僮鳎篏PIOx->BRR=0x0011。(x能夠是A,B,C,D,E…例如GPIOA就是端口A)但是,對(duì)于stm32這種級(jí)別的解決器,幾百個(gè)寄存器記起來(lái)談何容易。因此,ST(意法半導(dǎo)體)提出了固件庫(kù)的概念,運(yùn)用固件庫(kù)進(jìn)行編程。固件庫(kù)的本質(zhì)就是函數(shù)的集合,固件庫(kù)將那些寄存器的底層操作都封裝起來(lái),提供一整套API供開(kāi)發(fā)者使用。例如,上面通過(guò)控制BRR寄存器來(lái)控制電平的變化,官方庫(kù)封裝了一種函數(shù):VoidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIOx->BRR=GPIO_Pin;}(x能夠是A,B,C,D,E…例如GPIO_A就是端口A)通過(guò)使用GPIO_ResetBits()函數(shù)就能夠直接對(duì)寄存器進(jìn)行操作啦。2.1.4stm32中斷介紹本方案中,我們要使用stm32的中斷,在程序設(shè)計(jì)中,我們要啟動(dòng)各個(gè)管道的中斷,打開(kāi)各個(gè)中斷通道,配備中斷方式,我們先來(lái)講述下stm32單片機(jī)的中斷機(jī)制。構(gòu)造圖以下所示:圖2.32stm32外部中斷/事件控制器構(gòu)造圖圖中的實(shí)線(xiàn)箭頭,為外部中斷信號(hào)的傳輸途徑。首先外部信號(hào)從編號(hào)為1的輸入線(xiàn)進(jìn)入。另一方面這個(gè)外部信號(hào)通過(guò)編號(hào)2的邊沿檢測(cè)電路,這個(gè)邊沿檢測(cè)電路受到“上升沿選擇寄存器”、“下降沿選擇寄存器”的控制,我們能夠控制這兩個(gè)寄存器來(lái)選擇中斷的觸發(fā)方式。我們能夠在程序中進(jìn)行設(shè)立,例如全部段落設(shè)立為首行縮進(jìn)2個(gè)字符EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;設(shè)立為上升沿觸發(fā)中斷全部段落設(shè)立為首行縮進(jìn)2個(gè)字符然后該外部信號(hào)進(jìn)入編號(hào)為3或門(mén),或門(mén)另一端是軟件中斷寄存器,如果,軟件中斷/事件寄存器的對(duì)應(yīng)位置1,編號(hào)3的輸出總是為有效信號(hào)1。之后進(jìn)入“中斷掛起請(qǐng)求寄存器”,該寄存器統(tǒng)計(jì)了外部信號(hào)的電平變化。最后通過(guò)編號(hào)為4的與門(mén)進(jìn)入NVIC中斷控制器,如果“中斷屏蔽寄存器”的對(duì)應(yīng)位置0,外部的中斷請(qǐng)求信號(hào)不能傳輸?shù)絅VIC中斷控制器,從而實(shí)現(xiàn)中斷的屏蔽。由于我們采用的是外部信號(hào)觸發(fā)中斷,因此我們只需理解外部中斷的請(qǐng)求機(jī)制,對(duì)于事件的中斷請(qǐng)求機(jī)制,我們?cè)谶@里不做介紹。我們以PE1為例,介紹下外部中斷的普通環(huán)節(jié)。環(huán)節(jié)以下:?jiǎn)?dòng)I/O的復(fù)用時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);初始化I/O為輸入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOE,&GPIO_InitStructure);初始化線(xiàn)上中斷,設(shè)立觸發(fā)條件GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1);EXTI_InitStructure.EXTI_Line=EXTI_Line1; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);配備中斷分組NVIC,并使能中斷NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x06; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);編寫(xiě)中斷服務(wù)函數(shù)voidEXTI1_IRQHandler(void){}重要代碼詳見(jiàn)附錄2.2.1.5stm32定時(shí)/計(jì)數(shù)器介紹Stm32系列的單片機(jī)普通包含8個(gè)計(jì)數(shù)/定時(shí)器,TIM1、TIM8分別為高級(jí)控制訂時(shí)器,TIM2~TIM5為通用定時(shí)器,TIM6以及TIM7為基本定時(shí)器。對(duì)于定時(shí)器的具體內(nèi)容,我們不在這里一一介紹。然后我們介紹一下本實(shí)驗(yàn)采用了那些定時(shí)器,以及這些定時(shí)器所要完畢的功效有哪些。本實(shí)驗(yàn)所采用的定時(shí)器以及功效以下表所示:表2-2定時(shí)器介紹表定時(shí)器名稱(chēng)定時(shí)器配備模式重要功效TIM2定時(shí)器中斷模式通過(guò)定時(shí)器中斷,控制超聲波的掃描周期TIM3PWM復(fù)用輸出模式控制小車(chē)速度及舵機(jī)轉(zhuǎn)向TIM5輸入捕獲模式采集超聲波發(fā)射到接受的高電平持續(xù)時(shí)間t2.1.6主程序設(shè)計(jì)流程圖在本節(jié)實(shí)驗(yàn)中,循跡模塊以及避障模塊都是采用中斷方式進(jìn)行工作的,因此其主程序流程圖以下圖所示:圖1.2主程序流程圖根據(jù)程序設(shè)計(jì)圖,主程序設(shè)計(jì)以下:intmain(void){ u8TIM5CH1_CAPTURE_STA=0; //輸入捕獲狀態(tài) u16 TIM5CH1_CAPTURE_VAL; //輸入捕獲值delay_init(); //延時(shí)函數(shù)初始化 NVIC_Configuration();//設(shè)立NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) LED_Init(); GPIO_Configuration();//端口初始化 EXTIX_Init(); //掃描軌跡 TIM2_Int_Init(4999,7199);//控制超聲波掃描周期TIM3_PWM_Init(1999,719);//控制舵機(jī)方向 TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計(jì)數(shù) while(1) {farward_Low();delay_ms(10);}}2.2電機(jī)驅(qū)動(dòng)模塊Stm32對(duì)小車(chē)的控制,就是對(duì)電機(jī)的控制,通過(guò)控制電機(jī)的轉(zhuǎn)向,小車(chē)的運(yùn)動(dòng)狀態(tài)就會(huì)發(fā)生變化。電機(jī)驅(qū)動(dòng)模塊的重要器件為L(zhǎng)M293N,我們下面就具體解說(shuō)下電機(jī)驅(qū)動(dòng)模塊。2.2.1驅(qū)動(dòng)模塊構(gòu)造及其原理電機(jī)驅(qū)動(dòng)模塊的實(shí)物圖如圖2.8所示:圖2.8驅(qū)動(dòng)電路實(shí)物圖電機(jī)驅(qū)動(dòng)模塊的重要器件是芯片LM293D,內(nèi)部原理圖如圖2.9所示:K4K2K1K3S4K4K2K1K3S4圖2.9電機(jī)驅(qū)動(dòng)內(nèi)部原理圖全橋式驅(qū)動(dòng)電路的4只開(kāi)關(guān)管都工作在斬波狀態(tài),如圖1.2所示,K1、K2為一組,K3、K4為另一組,兩組的狀態(tài)互補(bǔ),一組導(dǎo)通則另一組必然關(guān)斷。當(dāng)K1、K2導(dǎo)通時(shí),K3、K4關(guān)斷,電機(jī)兩端加正向電壓,電機(jī)實(shí)現(xiàn)正轉(zhuǎn)或反轉(zhuǎn)制動(dòng);當(dāng)K3、K4導(dǎo)通時(shí),K1、K2關(guān)斷,電機(jī)兩端為反向電壓,電機(jī)實(shí)現(xiàn)反轉(zhuǎn)或正轉(zhuǎn)制動(dòng)。2.2.2驅(qū)動(dòng)模塊電路設(shè)計(jì)電機(jī)驅(qū)動(dòng)模塊的電路原理如圖2.10所示:圖2.10驅(qū)動(dòng)模塊電路原理圖表2-2是各個(gè)端口狀態(tài)與運(yùn)動(dòng)方向的關(guān)系,其關(guān)系以下表所示:表2-2端口與運(yùn)動(dòng)方向關(guān)系表電機(jī)M1IN1IN2電機(jī)M2IN3IN4停止00停止00正轉(zhuǎn)10正轉(zhuǎn)10反轉(zhuǎn)01反轉(zhuǎn)01-11-112.2.3驅(qū)動(dòng)軟件程序設(shè)計(jì)車(chē)輪電機(jī)的動(dòng)作由GPIO口的輸出實(shí)現(xiàn),本節(jié)重要配備運(yùn)動(dòng)方向和運(yùn)動(dòng)速度,對(duì)于運(yùn)動(dòng)速度的控制,我們必須使用PWM,通過(guò)變化PWM的占空比來(lái)調(diào)節(jié)速度的大小,其重要代碼設(shè)計(jì)以下所示:voidTIM3_PWM_Init(u16arr,u16psc){….}要想使stm32的通用定時(shí)器TIMx產(chǎn)生PWM輸出,需要用到的寄存器有:預(yù)分頻寄存器(TIMx_PSC)、自動(dòng)重裝載寄存器(TIMx_ARR)、捕獲/比較模式寄存器(TIMx_CCMR1/2)、捕獲/比較使能寄存器(TIMx_CCER)、捕獲/比較寄存器(TIMx_CCR1~4)。我們先介紹這幾個(gè)寄存器,然后介紹如何使用庫(kù)函數(shù)產(chǎn)生PWM輸出。下面我們就簡(jiǎn)樸介紹下這些寄存器:首先是預(yù)分頻寄存器(TIMx_PSC),該寄存器能夠用設(shè)立對(duì)時(shí)鐘進(jìn)行分頻,然后在提供應(yīng)計(jì)數(shù)器作為計(jì)數(shù)器的時(shí)鐘。該寄存器的各位功效如圖所示:圖2.11TIMx_PSC寄存器各位描述接下來(lái)介紹自動(dòng)重裝載寄存器(TIMx_ARR),該寄存器的各位描述以下圖所示:圖2.12TIMx_ARR寄存器各位描述通過(guò)設(shè)立這兩個(gè)寄存器,我們就能夠算出PWM的輸出周期,計(jì)算公式為:Tout=((arr+1)*(psc+1))/Tclk。其中Tclk為系統(tǒng)時(shí)鐘周期。另一方面我們介紹捕獲/比較模式寄存器(TIMx_CCMR1/2),總共有兩個(gè),TIMx_CCMR1和TIMx_CCMR2,TIMx_CCMR1控制通道CH1和CH2,TIMx_CCMR2控制CH3和CH4。由于這2個(gè)寄存器差不多,我們僅以通道CH1為例,介紹其中的TIMx_CCMR1為例,該寄存器的各位描述以下圖所示:圖2.13TIMx_CCMR1/2寄存器各位描述這里我們只介紹該寄存器的OCxM位,我們就以TIMx_CCMR1中的OC1M(控制通道CH1)為例,該位功效以下圖所示:圖2.14OC1M功效描述我們使用的是PWM輸出模式,因此OC1M必須設(shè)立為110/111。OC2M(控制通道CH2)各位描述與OC1M相似,我們這要不在敘述。然后我們介紹捕獲/比較使能寄存器(TIMx_CCER),該寄存器控制著各個(gè)輸入/輸出通道的開(kāi)關(guān),對(duì)于該寄存器,各位描述以下圖所示:圖2.15TIMx_CCER寄存器描述該寄存器比較簡(jiǎn)樸,由于我們只介紹通道1,因此我們只講CC1E位。如果我們想使能輸入/捕獲1,我們只需使用CC1E位。要想使PWM從I/O口輸出,此位必須設(shè)立為1。最后介紹捕獲/比較寄存器(TIMx_CCR1~4),總共有4個(gè),分別對(duì)應(yīng)CH1~4,由于這4個(gè)寄存器相似,我們僅以TIMx_CCR1為例,該寄存器的給位介紹以下圖所示:圖2.16TIMx_CCR1寄存器各位描述在輸出模式下,該寄存器的值與CNT中的值進(jìn)行比較,根據(jù)成果,實(shí)現(xiàn)電平的翻轉(zhuǎn)。至此,我們把用到的幾個(gè)寄存器都介紹完畢,下面我們就介紹如何通過(guò)庫(kù)函數(shù)來(lái)配備實(shí)現(xiàn)PWM三路輸出。啟動(dòng)TIM3時(shí)鐘以及復(fù)用功效輸出。使能GPIO和端口復(fù)用功效時(shí)鐘。庫(kù)函數(shù)使能TIM3、GPIO以及復(fù)用功效時(shí)鐘的辦法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);初始化TIM3,設(shè)立TIM3的PSC和ARR。在啟動(dòng)了TIM3的時(shí)鐘之后,我們要設(shè)立PSC和ARR寄存器的值來(lái)控制PWM的輸出周期。調(diào)用的格式以下: TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);設(shè)立TIM3_CH1、CH2、CH3的PWM模式,使能TIM3的CH1、CH2、CH3輸出。在庫(kù)函數(shù)中PWM通道設(shè)立是通過(guò)TIM_OC1Init~TIM_OC4Init來(lái)設(shè)立的,這里我們需要3路PWM輸出,因此我們需要使用函數(shù)TIM_OC1Init、TIM_OC2Init、TIM_OC3Init。庫(kù)函數(shù)的調(diào)用格式以下: TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC2Init(TIM3,&TIM_OCInitStructure); TIM_OC1Init(TIM3,&TIM_OCInitStructure); TIM_OC3Init(TIM3,&TIM_OCInitStructure);使能TIM3。完畢以上配備后,我們要使能定時(shí)器TIM3。庫(kù)函數(shù)調(diào)用格式以下: TIM_Cmd(TIM3,ENABLE);通過(guò)修改TIM3_CCRx(x為1,2,3)來(lái)控制占空比。庫(kù)函數(shù)格式以下:VoidTIM_SetComparex(TIM3,uint16_tCompare2);我們能夠懂得,通過(guò)定時(shí)器3控制PWM波的占空比,從而實(shí)現(xiàn)速度方面的控制。其中arr和psc能夠控制PWM波的周期,TIM3_CCRx能夠控制PWM波的占空比。我們只需要調(diào)用此函數(shù)就能夠?qū)崿F(xiàn)不同的速度控制。對(duì)于運(yùn)動(dòng)方向控制的代碼我們就后來(lái)退為例,由于端口寄存器過(guò)于簡(jiǎn)樸,我們不在此介紹端口的寄存器。我們僅介紹如何通過(guò)庫(kù)函數(shù)進(jìn)行端口配備。對(duì)各個(gè)I/O端口配備的過(guò)程相似,我們僅以PD8為例:重要過(guò)程以下所示:使能I/O口時(shí)鐘,調(diào)用格式以下所示:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC,ENABLE);初始化I/O參數(shù),調(diào)用格式以下所示:GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);操作I/0口GPIO_SetBits(GPIOD,GPIO_Pin_8);PD8置1GPIO_ResetBits(GPIOD,GPIO_Pin_8);PD8置0我們懂得了如何對(duì)端口進(jìn)行操作之后就能夠隨意的控制小車(chē)的運(yùn)動(dòng)啦,運(yùn)動(dòng)方向的程序設(shè)計(jì),其基本函數(shù)單元以下所示:voidLeft_Low(void);…我們調(diào)用這些函數(shù),就能夠?qū)崿F(xiàn)不同運(yùn)動(dòng)方向的控制。重要代碼詳見(jiàn)附錄3.2.3避障模塊設(shè)計(jì)在人類(lèi)身體構(gòu)造系統(tǒng)中,眼睛能夠使我們非常方便的采集到外界環(huán)境的信息,然后把信息及時(shí)的傳輸?shù)酱竽X,并對(duì)外界環(huán)境信息的變化做出對(duì)應(yīng)的解決。而對(duì)智能小車(chē)來(lái)說(shuō),避障模塊之于小車(chē)就相稱(chēng)于眼睛之于人類(lèi)。避障模塊能夠采集外部地形數(shù)據(jù),然后把所采集的地形數(shù)據(jù)傳輸?shù)街醒虢鉀Q模塊,從而實(shí)現(xiàn)規(guī)避障礙的功效。避障模塊所采用的器件在市場(chǎng)中有許多類(lèi)型,例如紅外檢測(cè),光位移檢測(cè),超聲波檢測(cè)等。本次實(shí)驗(yàn)我們使用的是HC-SR04超聲波檢測(cè),超聲波由于含有檢測(cè)能力強(qiáng),傳輸途徑寬,因此我們決定使用HC-SR04器件。在使用HC-SR04模塊進(jìn)行超聲波測(cè)距的同時(shí),我們能夠使用舵機(jī)進(jìn)行輔助。舵機(jī)的重要作用是變化HC-SR04模塊的照射方向,從而控制超聲波的發(fā)射方向。在程序編寫(xiě)過(guò)程中,如果小車(chē)前方遇見(jiàn)障礙時(shí),我們能夠直接控制舵機(jī)的轉(zhuǎn)向,而小車(chē)的車(chē)身能夠保持不變,在測(cè)量結(jié)束后,小車(chē)再做對(duì)應(yīng)的動(dòng)作。2.3.1避障模塊器件構(gòu)造及其原理HC-SR04超聲波測(cè)距模塊測(cè)量范疇在2cm-400cm之間,能夠?qū)崿F(xiàn)無(wú)接觸式測(cè)距功效。HC-SR04超聲波測(cè)距模塊由一種超聲波發(fā)射器、一種超聲波接受器和控制電路構(gòu)成,避障模塊的實(shí)物構(gòu)造圖如圖2.17所示:圖2.17實(shí)物正背面構(gòu)造圖如構(gòu)造圖所示VCC提供5v電源,GND為接地線(xiàn),TRIG為觸發(fā)信號(hào)線(xiàn),ECHO為回向信號(hào)輸出線(xiàn)?;驹硪韵拢翰捎肐O口TRIG觸發(fā)測(cè)距,給最少10us的高電平信號(hào),在TRIG觸發(fā)沿到來(lái)后,超聲波發(fā)射器會(huì)自動(dòng)發(fā)出8個(gè)40KHz的方波,并且檢測(cè)與否有信號(hào)返回,當(dāng)超聲波接受器接受到超聲波時(shí),表明有信號(hào)返回,通過(guò)IO口ECHO輸出一高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。因此測(cè)量距離=(高電平持續(xù)時(shí)間*340m/s)/2。測(cè)量時(shí)序圖如圖2.18所示:圖2.18超聲波時(shí)序圖我們根據(jù)時(shí)序圖,能夠編寫(xiě)對(duì)應(yīng)的程序代碼。為了避免發(fā)射信號(hào)對(duì)回向信號(hào)的影響,我們的測(cè)量周期不易過(guò)小。并且由于HC-SR04的感應(yīng)角度不不不大于15°,因此測(cè)距時(shí),為了避免發(fā)射信號(hào)丟失,我們規(guī)定被測(cè)物體的面積不應(yīng)不大于0.5平方米,否則可能造成測(cè)量成果不精確。舵機(jī)在避障模塊的重要作用前面已經(jīng)提到,本節(jié)重要解說(shuō)舵機(jī)的工作特性。舵機(jī)的實(shí)物圖如圖2.19所示:圖2.19舵機(jī)實(shí)物圖舵機(jī)的工作工作原理是stm32微解決器發(fā)出數(shù)據(jù)給舵機(jī),舵機(jī)內(nèi)部有一種基準(zhǔn)電路,它會(huì)產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),它將微解決器傳輸?shù)闹绷髌秒妷号c電位器的電壓數(shù)據(jù)進(jìn)行比較,獲得電壓差輸出。經(jīng)由電路板上的IC

判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)無(wú)核心馬達(dá)開(kāi)始轉(zhuǎn)動(dòng),透過(guò)減速齒輪將動(dòng)力傳至擺臂,同時(shí)由位置檢測(cè)器送回反饋信號(hào)。舵機(jī)的轉(zhuǎn)動(dòng)角度與stm32所提供的PWM信號(hào)有關(guān)。原則信號(hào)PWM周期為20ms,理論上來(lái)講脈寬為1~2ms,實(shí)際我們的脈寬為0.5~2.5ms,脈寬與所轉(zhuǎn)的角度一一對(duì)應(yīng)。角度與脈寬的對(duì)應(yīng)圖如圖2.20所示:圖2.20舵機(jī)角度與脈寬對(duì)應(yīng)圖2.3.2HC-SR04模塊硬件電路設(shè)計(jì)超聲波模塊硬件原理圖以下圖所示:圖2.21超聲波硬件原理圖HC-SR04模塊重要由發(fā)射器、接受器和部分電路構(gòu)成。在此實(shí)驗(yàn)中,我們只需簡(jiǎn)樸理解電路的設(shè)計(jì),對(duì)于其基本原理能夠不用過(guò)多涉獵,我們只需明白它們的工作原理,并且能夠簡(jiǎn)樸運(yùn)用即可。2.3.3HC-SR04模塊程序設(shè)計(jì)根據(jù)硬件電路的設(shè)計(jì),我們對(duì)避障子程序進(jìn)行設(shè)計(jì),程序流程圖如圖2.22所示:圖2.22避障程序流程圖避障模塊在程序設(shè)計(jì)中,我們的工作重要是:1、控制超聲波的掃描周期2、采集超聲波發(fā)射到接受的高電平持續(xù)時(shí)間t3、對(duì)采集的高電平持續(xù)時(shí)間t進(jìn)行解決,判斷前方與否有障礙下面我們就具體介紹我們是怎么通過(guò)軟件設(shè)計(jì)來(lái)完畢這幾個(gè)環(huán)節(jié)的:1、控制超聲波的掃描周期根據(jù)表2-2,我們采用的是TIM2來(lái)控制超聲波的掃描周期。首先我們把TIM2設(shè)立為定時(shí)器中斷模式,代碼格式為voidTIM2_Int_Init(u16arr,u16psc);由于配備定時(shí)器中斷模式十分簡(jiǎn)樸,我們就不在具體介紹,其具體代碼見(jiàn)附錄4.定時(shí)器TIM2的中斷周期計(jì)算公式為T(mén)=((arr+1)*(psc+1))/Tclk。Tclk為系統(tǒng)周期,普通為72Mhz.我們?cè)谥袛喾?wù)程序中控制超聲波的發(fā)射,我們采用PC7作為觸發(fā)信號(hào),根據(jù)超聲波時(shí)序圖,我們需要在中斷程序中給PC7一種持續(xù)10ms的高電平,中斷服務(wù)程序以下:voidTIM2_IRQHandler(void)//TIM2中斷{ if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) {TIM_ClearITPendingBit(TIM2,TIM_IT_Update); GPIO_SetBits(GPIOC,GPIO_Pin_7); delay_ms(10); GPIO_ResetBits(GPIOC,GPIO_Pin_7);}}2、采集超聲波發(fā)射到接受的持續(xù)時(shí)間t在本節(jié)實(shí)驗(yàn)中,我們使用了通用定時(shí)器TIM5的輸入捕獲功效,輸入捕獲模式含有測(cè)量頻率或者測(cè)量脈沖的寬度的功效。我們啟動(dòng)TIM5通道CH1(定時(shí)器5)的輸入捕獲模式,采集ECHO端口的高電平持續(xù)時(shí)間。配備定時(shí)器5代碼格式為:voidTIM5_Cap_Init(u16arr,u16psc){…}下面我們就具體解說(shuō)一下,如何啟動(dòng)并使用通用定時(shí)器的輸入捕獲功效。輸入捕獲的原理,簡(jiǎn)樸的講就是通過(guò)檢測(cè)TIM5(定時(shí)器)通道CH1的邊沿信號(hào),當(dāng)邊沿信號(hào)發(fā)生變化時(shí),現(xiàn)在寄存器的值TIM1_CNT寄存到通道的捕獲/比較寄存器(TIM5_CCR1)里面。我們的實(shí)驗(yàn)就是采集捕獲/比較寄存器(TIM5_CCR1)中的值并進(jìn)行解決,完畢對(duì)應(yīng)的動(dòng)作。為了使TIM5通道CH1含有捕獲功效,我們需要用到TIM5_PSC、TIM5_ARR、捕獲/比較模式寄存器(TIM5_CCMR1)、捕獲/比較使能寄存器(TIM5_CCER)、捕獲/比較寄存器(TIM5_CCR1)、DMA/中斷使能寄存器(TIM5_DIER)、控制寄存器(TIM5_CR1)。我們下面就簡(jiǎn)樸介紹下下這幾個(gè)寄存器。TIM5_PSC、TIM5_ARR、TIM5_CCR1這3個(gè)寄存器使用方法與前節(jié)中相似,我們就不在贅述,而在本實(shí)驗(yàn)中,捕獲/比較寄存器TIM5_CCMR1非常重要,該寄存器的各位描述以下圖所示:圖2.23TIMx_CCMR1各位描述我們使用的是TIM5捕獲/比較通道CH1,因此圖中只介紹[7:0]位。本次實(shí)驗(yàn)我們?cè)O(shè)立CC1S[1:0]=01,IC1PSC[1:0]=00,IC1F[3:0]=0000。接著我們?cè)賮?lái)看看捕獲/比較使能寄存器TIMx_CCER,本節(jié)用到了CC1E和CC1P兩位,描述以下圖所示:圖2.24TIMx_CCER最低兩位描述因此要使能通道CH1輸入捕獲,CC1E必須設(shè)立為1,而CC1P則能夠根據(jù)實(shí)際狀況設(shè)立。另一方面,我們?cè)倏纯碊MA/中斷使能寄存器(TIM5_DIER),由于我們使用的是通道CH1,因此我們僅介紹控制通道CH1的位,以下圖所示:圖2.25TIMx_DIER各位描述通過(guò)此圖我們懂得,我們需要設(shè)立CC1IE為1即可。然后,我們?cè)倏纯纯刂萍拇嫫鱐IMx_CR1,我們只用到了最低位,因此我們僅介紹位0的功效,TIMx_CR1寄存器各位描述及位0功效描述以下如所示:圖2.26TIMx_CR1寄存器各位描述及位0功效描述我們要使能計(jì)數(shù)器,因此位0設(shè)立為1。至此,我們所使用的寄存器一一介紹完畢,下面介紹怎么配備輸入/捕獲環(huán)節(jié):?jiǎn)?dòng)TIM5時(shí)鐘以及GPIOA時(shí)鐘。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);初始化TIM5,設(shè)立TIM5的psc和arr。TIM_TimeBaseStructure.TIM_Period=arr;TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);設(shè)立TIM5的輸入比較參數(shù),啟動(dòng)捕獲模式。TIM5_ICInitStructure.TIM_Channel=TIM_Channel_1; TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; TIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;TIM5_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; TIM5_ICInitStructure.TIM_ICFilter=0x00;//IC1F=0000TIM_ICInit(TIM5,&TIM5_ICInitStructure);設(shè)立TIM5的DIER寄存器,使能捕獲和更新中斷功效。TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);設(shè)立中斷分組并編寫(xiě)中斷服務(wù)函數(shù)NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);使能定時(shí)器TIM_Cmd(TIM5,ENABLE);我們懂得了如何設(shè)立TIM5的CH1為輸入捕獲模式,我們是在TIM5的中斷服務(wù)函數(shù)中采集持續(xù)時(shí)間t的,TIM5CH1_CAPTURE_STA為輸入捕獲狀態(tài),TIM5CH1_CAPTURE_VAL為輸入捕獲值,中斷服務(wù)函數(shù)以下所示:if((TIM5CH1_CAPTURE_STA&0X80)==0)//尚未成功捕獲 { if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET) { if(TIM5CH1_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了 {if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長(zhǎng)了 {TIM5CH1_CAPTURE_STA|=0X80;//標(biāo)記成功捕獲了一次 TIM5CH1_CAPTURE_VAL=0XFFFF; }elseTIM5CH1_CAPTURE_STA++;}} if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//捕獲1發(fā)生捕獲事件 {if(TIM5CH1_CAPTURE_STA&0X40) //捕獲到一種下降沿 {TIM5CH1_CAPTURE_STA|=0X80; //標(biāo)記成功捕獲到一次上升沿 TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5); TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0設(shè)立為上升沿捕獲 }else //尚未開(kāi)始,第一次捕獲上升沿 {TIM5CH1_CAPTURE_STA=0; //清空 TIM5CH1_CAPTURE_VAL=0; TIM_SetCounter(TIM5,0); TIM5CH1_CAPTURE_STA|=0X40; //標(biāo)記捕獲到了上升沿 TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //CC1P=1設(shè)立為下降沿捕獲}}}3、對(duì)采集的時(shí)間t進(jìn)行解決,判斷前方與否有障礙我們對(duì)采集時(shí)間t的解決也是在TIM5的中斷服務(wù)函數(shù)中的,我們根據(jù)因測(cè)量距離=(高電平持續(xù)時(shí)間t*340m/s)/2,得出只要高電平持續(xù)時(shí)間t<1500us,距離就不大于25cm,就會(huì)鑒定前方有障礙,其具體代碼以下: if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿 { temp=TIM5CH1_CAPTURE_STA&0X3F; temp*=65536;//溢出時(shí)間總和 temp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時(shí)間 TIM_Cmd(TIM2,DISABLE); if(temp<1500) {stopward();t++;flag++; if(t==1) {Midstate=temp; TIM_SetCompare2(TIM3,60);//舵機(jī)右轉(zhuǎn)} if(t==2){Leftstate=temp; TIM_SetCompare2(TIM3,250); //舵機(jī)左轉(zhuǎn) } if(t==3) {t=0; Rightstate=temp; TIM_SetCompare2(TIM3,150); rotate_Left();}} else { if(flag==0){farward_Low();} if(flag==1){turn_Left();} if(flag==2){turn_Right();} if(flag>=3) {flag=0;rotate_Left();} TIM_SetCompare2(TIM3,150);t=0;flag=0; } TIM_Cmd(TIM2,ENABLE); TIM5CH1_CAPTURE_STA=0;//啟動(dòng)下一次捕獲}}2.4循跡模塊設(shè)計(jì)這節(jié)要完畢的任務(wù)是使小車(chē)沿著黑帶運(yùn)動(dòng)。要想使小車(chē)沿著黑帶運(yùn)動(dòng),必須使小車(chē)感應(yīng)到黑跡在什么地方,然后讓小車(chē)的中央解決單元驅(qū)動(dòng)硬件電路完畢對(duì)應(yīng)的行為動(dòng)作。循跡模塊的設(shè)計(jì)就是使小車(chē)能精確的識(shí)別黑帶的軌跡。小車(chē)的中央解決模塊從循跡模塊獲得數(shù)據(jù),然后中央解決模塊根據(jù)采集的數(shù)據(jù)驅(qū)動(dòng)電機(jī)模塊完畢對(duì)應(yīng)的動(dòng)作。考慮到成本和操作,本實(shí)驗(yàn)使用的紅外探測(cè)器。2.4.1循跡模塊構(gòu)造及其原理紅外探測(cè)器(IR)是由紅外發(fā)射管、紅外接受管和部分電路構(gòu)成。要做到4路循跡,需要使用4個(gè)獨(dú)立的紅外探測(cè)器器件。我們使用的IR5是一種集成模塊,這個(gè)集成模塊由5個(gè)紅外探測(cè)器構(gòu)成。其中中間的1個(gè)IR探測(cè)器在本實(shí)驗(yàn)中并未使用。紅外循跡模塊實(shí)物圖如圖2.27所示:圖2.27紅外模塊正背面本實(shí)驗(yàn)使用的IR5集成模塊是由5個(gè)相似的IR探測(cè)器電路構(gòu)成的,因此我們只需要理解一種IR探測(cè)器的工作原理即可。我們懂得IR探測(cè)器是由紅外發(fā)射管、紅外接受管和部分電路構(gòu)成?;驹硎羌t外發(fā)射管發(fā)射紅外光經(jīng)地面反射,在黑色區(qū)域紅外光被吸取,在非黑色區(qū)域紅外光被反射,紅外接受管根據(jù)反射光的強(qiáng)度為比較器提供模擬量,從而輸出對(duì)應(yīng)的電平量。其單個(gè)IR探測(cè)器電路原理圖如圖2.28所示:圖2.28IR探測(cè)器電路原理圖根據(jù)原理圖詳解下IR探測(cè)器的工作原理:VCC為模塊提供電源,是IR探測(cè)器工作的前提條件,紅外發(fā)射管DF2發(fā)射紅外光達(dá)成“地面”,經(jīng)反射后紅外光會(huì)達(dá)成DS2紅外接受管,由于不同顏色的地面會(huì)對(duì)光的吸取有著不同的效果,因此發(fā)射后的光的強(qiáng)度也會(huì)不同,反射強(qiáng)度不同,LM339的5腳會(huì)輸入一種變化的電壓量,LM339是一種電壓較器,當(dāng)LM339的“+”端輸入信號(hào)不不大于“-”端的比較信號(hào)后,LM339的輸出端截止,在外部的上拉電源的作用下,使IR探測(cè)器的輸出端輸出+5v的電壓。同理,在“+”端電壓不大于“—”端電壓時(shí),LM339輸出端電壓飽和使IR探測(cè)器輸出為低電壓。因此能夠通過(guò)調(diào)節(jié)R2的電阻值,變化比較電壓的大小即“—”端電壓的大小,從而控制探測(cè)的距離。R4是整個(gè)正反饋電路的重要構(gòu)成部分,由于“+”輸入端電壓會(huì)經(jīng)常發(fā)生在比較電壓附近擾動(dòng)的現(xiàn)象,這些微小的擾動(dòng)都會(huì)造成輸出端的巨大變化,因此,我們采用正反饋的方式避免這種現(xiàn)象的發(fā)生。加入R4電阻,就成為人們所說(shuō)的“施密特觸發(fā)器”,其特性圖如圖2.29所示:圖2.29施密特觸發(fā)器特性圖當(dāng)輸入端的電壓發(fā)生轉(zhuǎn)化時(shí),只要在比較電壓值附近的干擾不超出du之值,輸出的電壓就不會(huì)變化。R4正反饋的引入,不僅提高了電路的解決速度,并且能夠免去由于寄生電路耦合而產(chǎn)生的自己震蕩。但是,在提高電路的解決速度的同時(shí),帶來(lái)的缺點(diǎn)就是分辨率減少,由于只要在du附近輸出的電壓值就不會(huì)變化。2.4.2循跡模塊電路設(shè)計(jì)IR5探測(cè)器的集成模塊的電路原理圖如圖2.30所示:圖2.30紅外循跡模塊電路圖2.4.3紅外循跡模塊程序設(shè)計(jì)根據(jù)電路原理圖,我們對(duì)循跡子程序進(jìn)行設(shè)計(jì),循跡子程序流程圖如圖2.31所示:圖2.31循跡子程序流程圖我們?cè)谘E程序設(shè)計(jì)中,重要工作為:1、配備管腳與紅外探測(cè)器的對(duì)應(yīng)關(guān)系當(dāng)紅外探測(cè)器模塊在黑帶上方時(shí),輸出為0。當(dāng)紅外探測(cè)器模塊在白色上方時(shí),輸出為1。因此我們采用中斷的方式進(jìn)行循跡,由于采用的是4路循跡,因此我們需要4個(gè)管腳與其一一對(duì)應(yīng),對(duì)應(yīng)關(guān)系以下表:表2-3管腳與紅外探測(cè)器位置對(duì)應(yīng)關(guān)系表管腳名稱(chēng)紅外探測(cè)器位置PE1左PE2最左PE3右PE4最右在配備好管腳與紅外位置關(guān)系之后,我們就需要進(jìn)行中斷初始化,中斷程序上文2.1.4節(jié)中已經(jīng)講過(guò),我們?cè)谶@里就不做介紹。2、編寫(xiě)中斷服務(wù)函數(shù)我們?cè)谥袛喑跏蓟螅托枰獙?xiě)中斷服務(wù)函數(shù)啦,我們就以PE1為例,當(dāng)PE1的值發(fā)生變化時(shí),我們就進(jìn)入中斷服務(wù)函數(shù),在中斷服務(wù)函數(shù)中判斷紅外探測(cè)器與否在黑帶上方,如果在,此時(shí)我們需要使小車(chē)向左轉(zhuǎn),如果不在黑帶上方,小車(chē)就繼續(xù)邁進(jìn)。其中斷服務(wù)函數(shù)代碼以下:#defineKEY3GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)voidEXTI1_IRQHandler(void){if(KEY3==0) {Right_Low();} EXTI_ClearITPendingBit(EXTI_Line1);}//去除LINE2上的中斷標(biāo)志位3.軟件調(diào)試每一章單獨(dú)分頁(yè)每一章單獨(dú)分頁(yè)上文提到了各個(gè)模塊的電路設(shè)計(jì)及其程序設(shè)計(jì),本章就根據(jù)各個(gè)模塊的電路設(shè)計(jì)進(jìn)行對(duì)應(yīng)的編程。我們使用keil3軟件進(jìn)行程序仿真,然后使用mcuscip軟件把我們得到的目的文獻(xiàn)燒到解決器中,即程序下載。3.1程序仿真RVMDK源自德國(guó)的KEIL公司,是RealViewMDK的簡(jiǎn)稱(chēng)。支持ARM7,ARM9,和最新的Cortrx-M3核解決器,自動(dòng)配備啟動(dòng)代碼,含有強(qiáng)大的軟件仿真功效,并且含有啟動(dòng)代碼小,性能高的優(yōu)點(diǎn),軟件keil3的操作主界面如圖3.1所示:圖3.1Keil主界面在程序仿真中,我們只能觀察PC7腳位的電平變化,來(lái)判斷與否滿(mǎn)足超聲波的發(fā)射條件,而對(duì)于超聲波發(fā)射到接受的高電平持續(xù)時(shí)間t,我們?cè)诔绦蚍抡嬷惺菬o(wú)法觀察到的。因此我們只能通過(guò)對(duì)硬件進(jìn)行測(cè)試,來(lái)完畢對(duì)整個(gè)產(chǎn)品設(shè)計(jì)的考核。PC7的軟件仿真成果以下圖所示:圖3.2PC7腳電平仿真圖3.2程序下載串口下載軟件使用mcuisp,該軟件屬于第三方軟件,由單片機(jī)在線(xiàn)編程網(wǎng)提供,該軟件啟動(dòng)界面如圖3.2所示:圖3.2mcuisp啟動(dòng)界面我們使用mcuisp軟件進(jìn)行程序下載,程序下載圖以下所示:圖3.3mcuisp程序下載圖4.系統(tǒng)測(cè)試在程序調(diào)試中,我們懂得PC7的電平變化已經(jīng)滿(mǎn)足了超聲波的發(fā)射條件,我們本節(jié)就是對(duì)硬件進(jìn)行測(cè)試,驗(yàn)證本次方案與否成功。小車(chē)實(shí)物圖以下所示圖4.1智能小車(chē)實(shí)物圖當(dāng)小車(chē)前方碰到障礙時(shí),小車(chē)舵機(jī)左轉(zhuǎn),觀察左側(cè)與否有障礙物,測(cè)試圖以下:圖4.2智能小車(chē)檢測(cè)障礙圖小車(chē)檢測(cè)到前方有障礙時(shí),舵機(jī)左轉(zhuǎn),檢測(cè)小車(chē)左方與否有障礙,如果無(wú),則小車(chē)左轉(zhuǎn),測(cè)試圖以下圖所示:圖4.3智能小車(chē)避障圖循跡模塊采用的是中斷的方式工作的,stm32微解決器通過(guò)采集紅外探測(cè)器的數(shù)據(jù),對(duì)電機(jī)發(fā)出不同的命令,下圖為智能小車(chē)在循跡過(guò)程中所拍攝的畫(huà)面:5.總結(jié)本文根據(jù)畢業(yè)設(shè)計(jì)開(kāi)題報(bào)告書(shū)所布置的任務(wù),制訂了具體的設(shè)計(jì)方案,并按照此方案逐步完畢了電路原理圖的設(shè)計(jì)以及軟件程序的設(shè)計(jì)。本文的重點(diǎn)是基于stm32微解決器為核心,添加其它外圍電路為輔助,并且加載必要的程序設(shè)計(jì),使小車(chē)智能化行動(dòng)。整個(gè)智能小車(chē)系統(tǒng)以stm32微解決器為核心,外圍電路涉及避障電路、循跡電路、電機(jī)驅(qū)動(dòng)電路等,這些外圍電路通過(guò)stm32微解決器結(jié)合起來(lái),使得各個(gè)模塊在確保工作精確性的同時(shí),提高了小車(chē)的智能化。論文首先分析了研究智能小車(chē)的研究意義,對(duì)于本次研究的必要性進(jìn)行了可行性分析。然后分析了國(guó)內(nèi)外的研究概況,最后再此基礎(chǔ)上提出了設(shè)計(jì)思路與程序流程,對(duì)于設(shè)計(jì)思路進(jìn)行了可行性的分析。接著分別介紹了各個(gè)模塊的硬件設(shè)計(jì)方案以及軟件設(shè)計(jì)方案。在硬件設(shè)計(jì)方案中涉及對(duì)各個(gè)硬件電路所采用的器件進(jìn)行分析和對(duì)硬件電路的設(shè)計(jì)分析,從而決定器件的使用方案,以及硬件電路圖的設(shè)計(jì)。而在軟件設(shè)計(jì)方案中,我們只分析軟流程件設(shè)計(jì),以擬定對(duì)應(yīng)的程序編碼。最后我們對(duì)軟件、硬件進(jìn)行測(cè)試,對(duì)于軟件測(cè)試,我們使用keil軟件進(jìn)行程序仿真,而對(duì)于硬件測(cè)試,我們使用mcuisp硬件調(diào)試工具進(jìn)行程序下載,驗(yàn)證了系統(tǒng)的穩(wěn)定性和實(shí)用性。在本方案中,由于受到所采購(gòu)的硬件模塊尺寸的影響,循跡模塊在進(jìn)行工作的時(shí)候,受到外部影響的因素很大。在本次實(shí)驗(yàn)設(shè)計(jì)中,由于循跡探頭的安裝距離小車(chē)車(chē)輪很近,當(dāng)循跡探頭采集數(shù)據(jù)傳輸?shù)紺PU時(shí),小車(chē)已經(jīng)向前行駛了一段時(shí)間。假設(shè)小車(chē)的轉(zhuǎn)彎時(shí)間為T(mén),小車(chē)的轉(zhuǎn)彎時(shí)的速度為V,我們要確保小車(chē)轉(zhuǎn)彎的路程不超出額定值S,那么就有公式VT<=S。要解決此問(wèn)題,有兩種方案可供選擇。減小轉(zhuǎn)彎時(shí)間T小車(chē)的轉(zhuǎn)彎時(shí)間T與小車(chē)的轉(zhuǎn)彎敏捷度成反比。在確保小車(chē)速度合適的狀況下,我們只有減少小車(chē)的轉(zhuǎn)彎時(shí)間來(lái)完畢對(duì)應(yīng)的行為動(dòng)作,即提高小車(chē)的轉(zhuǎn)彎敏捷度。小車(chē)的轉(zhuǎn)彎敏捷度與小車(chē)的車(chē)輪直徑有關(guān),具體來(lái)講就是:在車(chē)輪角速度一定的狀況下,車(chē)輪直徑越大,有公式V=ωR,車(chē)輪的線(xiàn)速度就越大,那么在單位時(shí)間內(nèi)有,小車(chē)的行駛距離就會(huì)變大。因此,小車(chē)的車(chē)輪直徑與轉(zhuǎn)彎敏捷度成反比,車(chē)輪直徑越大,敏捷度就越小,相反車(chē)輪直徑越小,敏捷度就越高。在本次實(shí)驗(yàn)中我們采用的車(chē)輪直徑稍大,從而造成小車(chē)轉(zhuǎn)彎的敏捷度大大下降。因此,我們能夠通過(guò)減少小車(chē)車(chē)輪的直徑大小來(lái)解決此問(wèn)題。增加轉(zhuǎn)彎額定值S在本次實(shí)驗(yàn)中,循跡探頭距小車(chē)的車(chē)輪距離太近,造成小車(chē)的額定值S過(guò)小,進(jìn)而造成小車(chē)在循跡工作時(shí)誤差較大。解決此問(wèn)題,我們能夠拉大車(chē)輪與循跡探頭的距離。上文提到的兩種辦法,又受到所采購(gòu)的器件的物理尺寸的影響。在本次實(shí)驗(yàn)中,器件的物理尺寸限制了小車(chē)轉(zhuǎn)彎敏捷度的最大值,因此本實(shí)驗(yàn)的循跡模塊不是很抱負(fù),但是只要我們采用上述的兩種辦法,一定能夠提高循跡模塊的執(zhí)行效率??偟膩?lái)說(shuō),設(shè)計(jì)方案是完善的,基本上達(dá)成了設(shè)計(jì)所規(guī)定的目的。致謝一種學(xué)期的學(xué)習(xí)和鍛煉,使我的畢業(yè)論文設(shè)計(jì)基本完畢。在這期間,我在所學(xué)的基礎(chǔ)知識(shí)之上,去接觸stm32,在接觸之初,我不停的碰到問(wèn)題,而我也懂得不經(jīng)一番寒徹骨,哪的梅香撲鼻來(lái)的道理,最后我克服了種種困難,不僅使自己的知識(shí)更加牢固,并且也鍛煉了自己的心性。固然以上全部成績(jī)的獲得都離不開(kāi)老師和同窗的協(xié)助。我首先要感謝的是我的母校,它為我提供了一種良好的學(xué)習(xí)環(huán)境,非常感謝學(xué)院領(lǐng)導(dǎo)對(duì)我們畢業(yè)設(shè)計(jì)有關(guān)工作精心合理的安排。固然,我的指導(dǎo)老師張健,我非常感謝他在我畢業(yè)設(shè)計(jì)的整個(gè)過(guò)程中始終予以的熱情指導(dǎo)和督促,對(duì)我提出的疑惑耐心地指點(diǎn),他的指點(diǎn)是我克服困難、完畢設(shè)計(jì)的重要因素,對(duì)我一種月的實(shí)習(xí)也產(chǎn)生了激勵(lì)和支持的作用。同時(shí)我還要感謝湯飛同窗、柳曉峰同窗的真誠(chéng)指點(diǎn),以及其它各位老師和同窗的不吝指教,使我度過(guò)了緊張而又充實(shí)的三個(gè)月。畢業(yè)設(shè)計(jì)的這三個(gè)月,我不僅收獲了知識(shí)、能力,也深刻的體會(huì)到了師情和友情的貴重,這段時(shí)光將成為我人生中少有的美妙回想,路漫漫其修遠(yuǎn)兮,吾將上下而求索,我會(huì)以此激勵(lì)自己繼續(xù)努力,爭(zhēng)取使自己的人生對(duì)社會(huì)產(chǎn)生些許主動(dòng)的價(jià)值!參考文獻(xiàn)[1]杜春雷.ARM體系構(gòu)造與編程[M].北京:清華大學(xué)出版社,-02-01[2]姚文詳,宋巖.ARMCortex-M3權(quán)威指南[M].北京:北京航空航天大學(xué)出版社,-07[3]范書(shū)瑞.Cortex-M3嵌入式解決器原理與應(yīng)用[M].北京:電子工業(yè)出版社,-01-01[4]李寧.基于MDK的STM32解決器開(kāi)發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,:1-260.[5]劉軍,張洋.原子教你玩STM32[M].北京:北京航空航天大學(xué)出版社,-05-01[6]彭剛,秦志強(qiáng).基于ARMCortex-M3的STM32系列[M].北京:電子工業(yè)出版社,-01[7]張自強(qiáng),晏英俊.基于stm32的步進(jìn)電機(jī)轉(zhuǎn)速控制實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)室科學(xué),-12,13(6):59-61[8]周柱,孟文,田環(huán)宇.基于stm32智能小車(chē)設(shè)計(jì)[J].技術(shù)與市場(chǎng),-06,18(6):1-2[9]李亞巨,樊東.基于stm32f103zet6的智能小車(chē)的制作[J].電子制作,-11,(19):52-53[10]趙志昊.智能小車(chē)的制作[J].科技傳輸,-11,(21):202-203[11]李婕.基于STM32的智能小車(chē)的制無(wú)線(xiàn)視頻監(jiān)控智能小車(chē)設(shè)計(jì)[D].蘭州:蘭州理工大學(xué)出版社,-4:1-56附錄附錄1voidTIM5_Cap_Init(u16arr,u16psc){ GPIO_InitTypeDefGPIO_InitStructure; TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //使能TIM5時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//PA0去除之前設(shè)立 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//PA0輸入 GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0下拉 //初始化定時(shí)器5TIM5 TIM_TimeBaseStructure.TIM_Period=arr;//設(shè)定計(jì)數(shù)器自動(dòng)重裝值 TIM_TimeBaseStructure.TIM_Prescaler=psc; //預(yù)分頻器 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//設(shè)立時(shí)鐘分割:TDTS=Tck_tim TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計(jì)數(shù)模式 TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);//根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位 //初始化TIM5輸入捕獲參數(shù) TIM5_ICInitStructure.TIM_Channel=TIM_Channel_1;//CC1S=01 選擇輸入端IC1映射到TI1上 TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; //上升沿捕獲 TIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//映射到TI1上 TIM5_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //配備輸入分頻,不分頻 TIM5_ICInitStructure.TIM_ICFilter=0x00;//IC1F=0000配備輸入濾波器不濾波 TIM_ICInit(TIM5,&TIM5_ICInitStructure); //中斷分組初始化 NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//TIM5中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//先占優(yōu)先級(jí)2級(jí) NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//從優(yōu)先級(jí)0級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道被使能 NVIC_Init(&NVIC_InitStructure);//根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器 TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷,允許CC1IE捕獲中斷 TIM_Cmd(TIM5,ENABLE); //使能定時(shí)器5}附錄2voidEXTIX_Init(void){ EXTI_InitTypeDefEXTI_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE); //使能復(fù)用功效時(shí)鐘//GPIOD.2中斷線(xiàn)以及中斷初始化配備下降沿觸發(fā) GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1); EXTI_InitStructure.EXTI_Line=EXTI_Line1; //左1 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); EXTI_InitStructure.EXTI_Line=EXTI_Line2; //最左 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器//GPIOD.3 中斷線(xiàn)以及中斷初始化配備下降沿觸發(fā)//右 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3); EXTI_InitStructure.EXTI_Line=EXTI_Line3; EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器//GPIOD.4 中斷線(xiàn)以及中斷初始化配備下降沿觸發(fā) //最右 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4); EXTI_InitStructure.EXTI_Line=EXTI_Line4; EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器 NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; //使能左1所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //搶占優(yōu)先級(jí)2, NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x06; //子優(yōu)先級(jí)3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn; //使能最左所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //搶占優(yōu)先級(jí)2, NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x04; //子優(yōu)先級(jí)2 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn; //使能右1所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //搶占優(yōu)先級(jí)2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x07; //子優(yōu)先級(jí)1 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器 NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn; //使能最右所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //搶占優(yōu)先級(jí)2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x05; //子優(yōu)先級(jí)0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論