嵌入式系統(tǒng)復(fù)習(xí)資料解讀_第1頁
嵌入式系統(tǒng)復(fù)習(xí)資料解讀_第2頁
嵌入式系統(tǒng)復(fù)習(xí)資料解讀_第3頁
嵌入式系統(tǒng)復(fù)習(xí)資料解讀_第4頁
嵌入式系統(tǒng)復(fù)習(xí)資料解讀_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章嵌入式系統(tǒng)導(dǎo)論嵌入式系統(tǒng)的概念:是以現(xiàn)代計算機技術(shù)為基礎(chǔ),以應(yīng)用為中心,可以根據(jù)系統(tǒng)或用戶需求(功能、可靠性、成本、體積、功耗、環(huán)境等),靈活裁剪軟硬件模塊的專用計算機系統(tǒng)。嵌入式系統(tǒng)的分類及分類依據(jù):嵌入式系統(tǒng)由硬件和軟件兩大部分組成,用于實現(xiàn)對其他設(shè)備的控制、監(jiān)視或管理等功能。前者是整個系統(tǒng)的物理基礎(chǔ),它提供軟件運行平臺和通信接口;后者實際控制系統(tǒng)的運行。硬件:嵌入式微處理器、外圍電路、外圍硬件設(shè)備。軟件:BootLoader、嵌入式操作系統(tǒng)、用戶的應(yīng)用程序等。幾種典型嵌入式操作系統(tǒng):(1)uC/OSII(2)uCLinux(3)WindowsCE(4)嵌入式Linux等任務(wù)調(diào)度:任務(wù)的調(diào)度有三種方式:可搶占式、不可搶占式和時間片輪轉(zhuǎn)?!静豢蓳屨际秸{(diào)度是指一個任務(wù)一旦獲得CPU就獨占其運行,除非由于某種原因使它決定放棄CPU的使用權(quán);可搶占式調(diào)度是基于任務(wù)優(yōu)先級的,當(dāng)前正在運行的任務(wù)可以隨時讓位給優(yōu)先級更高的處于就緒態(tài)的其他任務(wù);當(dāng)兩個或兩個以上任務(wù)有同樣的優(yōu)先級時,不同任務(wù)輪轉(zhuǎn)使用CPU,直到系統(tǒng)分配的CPU時間片用完,這就是時間片輪轉(zhuǎn)調(diào)度?!磕壳?,大多數(shù)嵌入式操作系統(tǒng)對不同優(yōu)先級的任務(wù)采用基于優(yōu)先級的可搶占式調(diào)度法,對相同優(yōu)先級的任務(wù)則米用時間片輪轉(zhuǎn)調(diào)度法。針對有內(nèi)存管理單元(MMU,MemoryManagementUnit)的處理器而設(shè)計的一些桌面操作系統(tǒng),如Windows.Linux,使用了虛擬存儲器的概念。計算機的發(fā)展:馮諾依曼架構(gòu):將指令和數(shù)據(jù)存放在同一存儲空間中,統(tǒng)一編址,指令和數(shù)據(jù)通過同一總線訪問。哈佛結(jié)構(gòu)(馮諾依曼架構(gòu)的擴展):主要特點是程序和數(shù)據(jù)存儲在不同的存儲空間中,即程序存儲器和數(shù)據(jù)存儲器是兩個相互獨立的存儲器,每個存儲器獨立編制、獨立訪問。CortexM3Cortex系列按嵌入式系統(tǒng)的典型應(yīng)用分類:Cortex-A:高性能(HighPerformance),[針對日益增長的運行Linux、WinCE、Symbian等操作系統(tǒng)在內(nèi)的消費者娛樂和無線產(chǎn)品設(shè)計與實現(xiàn)。】Cortex-M:微控制器類(Microcontroller),【針對應(yīng)用系統(tǒng)對功耗、成本敏感,同時對微處理器性能要求較高的工業(yè)領(lǐng)域(汽車、家電、醫(yī)療器械等)。】Cortex-R:【實時類(RealTime),針對實時性要求較高的領(lǐng)域,可以運行RTOS?!緾ortex-W:【W(wǎng)ireless】Cortex指令完全采用Thumb-2體系架構(gòu)。第2章Cortex-M3內(nèi)核原理Cortex-M3是ARM公司推出的新一代32位低成本、高性能通用微控制器內(nèi)核。Cortex-M3體系結(jié)構(gòu):Cortex-M3處理器主要由兩大部分組成:Cortex-M3內(nèi)核:中央處理器核心(Cortex-M3Core嵌套向量中斷控制器(NVIC)系統(tǒng)時鐘(SYSTICK)存儲器保護單元(MPU)總線調(diào)試系統(tǒng)AMBA總線:(1)AHB:AdvancedHighPerformanceBus,用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸和事務(wù)(ACID:原子性、一致性、隔離性和持久性)分割;(2)ASB:AdvancedSystemBus,也用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸,這是較老的系統(tǒng)總線格式,后來由AHB總線替代;(3)APB:AdvancedPeriPheralBus,用于較低性能外設(shè)的簡單連接,一般是接在AHB或ASB系統(tǒng)總線上的第二級總線。(4)Cortex-M3內(nèi)核是典型的32位處理器內(nèi)核:內(nèi)部數(shù)據(jù)路徑寬度為32位,寄存器寬度為32位,存儲器接口寬度也是32位,-Cortex-M3內(nèi)核擁有獨立的指令總線和數(shù)據(jù)總線,其尋址能力均為4G,且共享同一個存儲器空間,取指與數(shù)據(jù)訪問可同時進行。Cortex-M3寄存器:(1).低組寄存器(R0?R7)【所有指令均能訪問,字長為32位,復(fù)位后的初始值是隨機的。絕大多數(shù)16位Thumb指令只能訪問R0~R7?!浚?).高組寄存器(R8~R12)【只有很少的16位Thumb指令能訪問,32位指令則不受限制,復(fù)位后的初始值是隨機的。】(3).堆棧寄存器(R13)又稱“堆棧指針SP”【Cortex-M3處理器內(nèi)核有兩個堆棧,但這兩個寄存器不會同時生效,根據(jù)系統(tǒng)運行狀態(tài)進行堆棧切換,以保證程序運行的快速性、安全性等要求?!恐鞫褩V羔槪∕SP),或?qū)懽鱏P_main?!救笔《褩V羔槪蒓S內(nèi)核、異常服務(wù)例程以及所有需要特權(quán)訪問的應(yīng)用程序代碼來使用?!窟M程堆棧指針(PSP),或?qū)懽鱏P_process?!居糜诔R?guī)的應(yīng)用程序代碼(不處于異常服務(wù)例程中時)?!吭谙到y(tǒng)連接結(jié)構(gòu)中,通常借助AHB-APB橋?qū)崿F(xiàn)內(nèi)核內(nèi)部高速總線到外部低速總線的數(shù)據(jù)緩沖和轉(zhuǎn)換。Cortex-M3是一個32位處理器,支持4GB存儲空間,與ARM架構(gòu)相比,有很多優(yōu)點:預(yù)定義存儲器映射和總線配置;支持"位帶(bit-band)”操作;支持非對齊訪問和互斥訪問;支持小端和大端兩種存儲格位帶操作:概念:位帶操作,只適用于數(shù)據(jù)訪問,不適用于取指。通過位帶的功能,可以把多個布爾型數(shù)據(jù)打包在單一的字中,卻依然可以從位帶別名區(qū)中,像訪問普通內(nèi)存一樣地使用它們。位帶別名區(qū)中的訪問操作是原子的,消滅了傳統(tǒng)的“讀一改一寫”三步曲以及由此產(chǎn)生的被中斷的可能。為什么采用位帶操作?可以顯著提高位操作的效率和安全性,對許多底層軟件開發(fā)特別是操作系統(tǒng)和驅(qū)動程序具有重要意義。片內(nèi)外設(shè)區(qū)(Peripheral,0x40000000~0x5FFFFFFF,512MB)外部RAM區(qū)(ExternalRam,0x60000000~0x9FFFFFFF,256KB)外部設(shè)備區(qū)(ExternalDevice,0xA0000000~0xDFFFFFFF,768KB)(4)映射公式:bit_word_addr=bit_band_alias_base+(byte_offsetX32)+(bit_numberX4)-bit_word_addr是別名存儲器區(qū)中字的地址,它映射到某個目標(biāo)位。-bit_band_alias_base是別名區(qū)的基址,即起始地址。-byte_offset是包含目標(biāo)位的字節(jié)在位帶區(qū)里的序號。-bit_number是位帶區(qū)目標(biāo)位所在字節(jié)中的位置(0-7)。(5)例題:例1:位帶區(qū)SRAM地址為0x20000300的字節(jié)中的位2,其位帶別名區(qū)的映射地?【答案】?=0x22000000+(0x300*32)+(2*4).0x22006008=0x22000000+(0x300*32)+(2*4).?對0x22006008地址的寫操作和對SRAM中地址0x20000300字節(jié)的位2執(zhí)行“讀一改一寫”操作有著相同的效果。例2:地址?的別名字映射為0x200FFFFF的bit-band字節(jié)的位0:地址?的別名字映射為0x200FFFFF的bit-band字節(jié)的位7:地址?的別名字映射為0x20000000的bit-band字節(jié)的位0:地址?的別名字映射為0x20000000的bit-band字節(jié)的位7:【答案】地址0x23FFFFE0的別名字映射為0x200FFFFF的bit-band字節(jié)的位0:0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4地址0x23FFFFEC的別名字映射為0x200FFFFF的bit-band字節(jié)的位7:0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4地址0x22000000的別名字映射為0x20000000的bit-band字節(jié)的位0:0x22000000=0x22000000+(0*32)+0*4地址0x220001C的別名字映射為0x20000000的bit-band字節(jié)的位7:0x2200001C=0x22000000+(0*32)+7*4例2圖示:S2MBaliasregion|血二;卜卜卜卜卜相心.;卜11卜7〔心阡卜卜卜口(心泗心4心FFF心iy:"FFW

-怎樣利用“位帶操作”進行位帶區(qū)的“讀一改一寫”呢?例3:欲設(shè)置地址0x20000000中的比特2。不使用位帶功能讀取皈MODOOOO處前值到寄停箸中>16善存者的d寫回到OxWOOJJg。使用位帶功就讀取脆0。0_016善存者的d寫回到OxWOOJJg。使用位帶功就讀取脆0。0_0。0。處的值到內(nèi)畝繾沖區(qū)位蘇Bit?后.再把值與回睥。。。_。0。0【答案】WithoutBit-BandWithBit-BandLDRR0,=0x20000000;SetupaddressLDRR1,[R0];ReadORR.WR1,#0x4;ModifybitSTRR1,[R0];WritebackresultLDRR0,=0x22000008;SetupaddressMOVR1,#1;SetupdataSTRR1,[R0];Write假如在(位帶區(qū))地址0x20000000處的字為0x3355AACC,要求對bit2清零。【答案】-無位帶LDRR0,=0x20000000;建立地址LDRR1,[R0];ReadAND.WR1,#0xFFFFFFFB;bit2清零STRR1,[R0];writebackresult-有位帶LDRR0,=0x22000008;建立地址MoveR1,0;SetupDataSTRR1,[R0];writebackresult【解答】①讀取地址0x22000008。本次讀訪問將讀取0x20000000,并提取比特2,值為1。往地址0x22000008處寫0。本次操作將被映射成對地址0x20000000的“讀一改一寫”操作(原子操作),把比特2清0?,F(xiàn)在再讀取0x20000000,將返回0x3355AAC8(bit[2]已清零)。

工作模式-Cortex-M3支持兩種模式和兩個特權(quán)等級。異常handler代碼主應(yīng)用程序代碼異常handler代碼主應(yīng)用程序代碼處理模式(handlermode)用法錯誤線程模式(threadmode)線程模式(threadmode)特權(quán)級用戶級RESETCortex-M3處理器的工作模式和特權(quán)等級共有三種配合。線程模式+用戶級線程模式+特權(quán)級Handler模式+特權(quán)級中斷:中斷的概念:所謂中斷,是指CPU對系統(tǒng)內(nèi)、外發(fā)生的某個事件的一種響應(yīng)過程,或者說“一種機制”,即CPU暫時停止現(xiàn)行程序的執(zhí)行,自動轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序;當(dāng)處理結(jié)束后,再返回到被暫停的程序的斷點處,繼續(xù)執(zhí)行原來的程序。什么是中斷向量表?Cortex-M3擁有一張向量表,用于在發(fā)生中斷并作出響應(yīng)時,從表中查詢與中斷對應(yīng)的處理例程的入口地址向量。Cortex-M3內(nèi)核集成了中斷控制器——嵌套向量中斷控制器NVIC(NestedVectoredInterruptController)o中斷優(yōu)先級:Cortex-M3除配置優(yōu)先級外,還通過把256級優(yōu)先級分為搶占優(yōu)先級和亞優(yōu)先級支持最多128個搶占級。優(yōu)先級分組規(guī)定:亞優(yōu)先級至少是1位,因此搶占優(yōu)先級最多是7位,128級搶占優(yōu)先級。第3章STM32固件庫介紹CMSIS-外設(shè)訪問層的文件獨立于編譯器的文件:?Cortex-M3內(nèi)核及其設(shè)備文件(core_cm3.h+core_cm3.c)-訪問Cortex-M3內(nèi)核及其設(shè)備:NVIC,SysTick等-訪問Cortex-M3的CPU寄存器和內(nèi)核外設(shè)的函數(shù)?微控制器專用頭文件(device.h)-指定中斷號碼(與啟動文件一致)-外設(shè)寄存器定義(寄存器的基地址和布局)-控制微控制器其他特有的功能的函數(shù)(可選)?微控制器專用系統(tǒng)文件(system_device.c)-函數(shù)SystemInit,用來初始化微控制器-函數(shù)Sysem_ExtMemCtl,用來配置外部存儲器控制器。它位于文件startup_stm32f10x_xx.s/.c,在跳轉(zhuǎn)到main前調(diào)用-SystemFrequncy,該值代表系統(tǒng)時鐘頻率-微控制器的其他功能(可選)編譯器供應(yīng)商+微控制器專用啟動文件-編譯器啟動代碼(匯編或者C)(startup_device.s)-微控制器專用的中斷處理程序列表(與頭文件一致)-弱定義(Weak)的中斷處理程序默認函數(shù)(可以被用戶代碼覆蓋)CMSIS文件名的定義標(biāo)準core_cm3.hCortex-M3globaldeclarationsanddefinitions,staticfunctiondefinitionscore_cm3.cCortex-M3globaldefinitions-<device>.hTop-levelheaderfile(devicespecific).Tobeincludedbyapplicationcode.Includescore_cm3.handsystem_<device>.h-system_<device>.hDevicespecificdeclarations-system_<device>.cDevicespecificdefinitions,e.g.SystemInit()【我也不知道上面到底哪個是要考的-_-|||】第4章基于Cortex-M3的STM32F10X“最小系統(tǒng)”最小系統(tǒng):(1)“最小系統(tǒng)”的概念:在盡可能減少上層應(yīng)用的情況下,能夠使系統(tǒng)運行的最小化模塊配置。對于當(dāng)前的大多數(shù)微控制器而言,“最小系統(tǒng)”稱為“嵌入式核心控制模塊”似乎更貼切一些。(2)最小系統(tǒng)的組成:電源、②時鐘、③復(fù)位電路、④存儲系統(tǒng)、⑤調(diào)試系統(tǒng)?時鐘模塊一一通常經(jīng)ARM內(nèi)部鎖相環(huán)進行相應(yīng)的倍頻,以提供系統(tǒng)各模塊運行所需的時鐘頻率輸入Flash存儲模塊——存放啟動代碼、操作系統(tǒng)和用戶應(yīng)用程序代碼SDRAM模塊一一為系統(tǒng)運行提供動態(tài)存儲空間,是系統(tǒng)代碼運行的主要區(qū)域JTAG模塊一一實現(xiàn)對程序代碼的下載和調(diào)試UART模塊一一實現(xiàn)對調(diào)試信息的終端顯示?復(fù)位模塊一一實現(xiàn)對系統(tǒng)的復(fù)位(3)嵌入式最小系統(tǒng)的核心部分:Cortex-M3微處理器、FLASH和SDRAM模塊STM32F103處理器系統(tǒng)頻率為72MHz,處理器性能可達到90DMIPS,此時Cortex-M3功耗約14W左右。系統(tǒng)復(fù)位:系統(tǒng)復(fù)位將清除時鐘控制器CSR中的復(fù)位標(biāo)志和備用域寄存器之外的所有寄存器。STM32內(nèi)含復(fù)位電路支持,當(dāng)任意一個下列事件發(fā)生時都將引起系統(tǒng)自動復(fù)位:NRST引腳出現(xiàn)低電平(外部復(fù)位);看門狗計時器計時終止(WWDG復(fù)位);獨立看門狗計數(shù)終止(IWDG復(fù)位);軟件復(fù)位(SW復(fù)位);低功耗管理復(fù)位。可通過查詢控制/狀態(tài)寄存器RCC_CSR中的復(fù)位標(biāo)志來識別復(fù)位源。電壓調(diào)壓器電壓調(diào)壓器的三種操作模式:主模式(MR):又稱“運行模式(RunMode)”或“調(diào)節(jié)模式”,用于CPU正常的運行操作,以正常功耗模式,向內(nèi)核、內(nèi)存、外設(shè)供給1.8V電源。低功耗模式(LPR):又稱“停止(機)模式(StopMode)?”,當(dāng)CPU無任務(wù)需要處理時,以低功耗模式供1.8V電源,以保持SRAM、寄存器等的內(nèi)容。一般可以根據(jù)最低電源消耗、最快速啟動時間和可用的喚醒源等條件,選定最佳低功耗模式。掉電(關(guān)斷)模式:用于CPU"待機模式(StandbyMode)”,調(diào)壓器的輸出為高阻狀態(tài),停止內(nèi)核電路供電,調(diào)壓器處于零消耗狀態(tài),除待機電路和備份域外,寄存器和SRAM的內(nèi)容將丟失。有時,該模式被歸為“低功耗模式”的一種。GPIO模塊(1)GPIO(GeneralPurposeInputOutput,通用I/O)接口模塊,可以為CPU提供數(shù)字輸入輸出功能。(2)可以對通過軟件對GPIO接口進行靈活配置和操縱,包括:①輸入輸出的方向配置②引腳功能復(fù)用引腳的重新映射④是否可以申請中斷⑤PWM輸出等(3)STM32F10X系列產(chǎn)品的GPIO模塊,可以進行輸入輸出等功能的配置。共8種模式:①入浮空輸入:In_Floating②上拉入輸入:IPU(InPush_Up)下拉入輸入:IPD(InPush_Down)④入模擬輸入:AIN(AnalogIn)開漏出輸出:OUT_OD(OD:Open-Drain)推挽出輸出:OUT_PP(PP:Push-Pull)復(fù)用功能推挽出輸出:AF_PP⑧復(fù)用功能開漏出輸出:AF_OD(4)通過I/O端口配置方式降低功耗?:?如果需要減小I/O端曰的電流消耗,可以根據(jù)具體情況配置I/。端曰的狀態(tài):>輸入端11今配置為浮空輸入>帶外部上拉的輸出端II9配置為推挽輸出并輸出T>帶外部下拉的輸出端II今配置為推挽輸出并輸出O>未用的懸空端II今配置為推挽輸出并輸出T?:?未用的內(nèi)部外設(shè):>保持為關(guān)閉和默認的復(fù)位狀態(tài):ON=、人□不要進行重映射IpiLp□復(fù)位寄存器|UrRV?RCC_APB1RSTR和RCC_APB2RSTR|||\1>關(guān)閉對應(yīng)的時鐘OFF□時鐘使能寄存器:RCC_AHBENR、RCC_APB2ENRfnRCC_APB1ENRGPIO復(fù)用功能為了使不同器件封裝的外設(shè)I/O功能的數(shù)量達到最優(yōu),可以把一些復(fù)用功能重新映射到其他一些引腳上。這可以通過軟件配置相應(yīng)的寄存器來完成(參考AFIO寄存器描述)。這時,復(fù)用功能就不再映射到它們的原始引腳上了。GPIO的配置?先看GPIO.h文件typedefenum(GPIO_Speed_10MHz=1,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef;#defineIS_GPIO_SPEED(SPEED)(((SPEED)==GPIO_Speed_10MHz)||((SPEED)==GPIO_Speed_2MHz)||\((SPEED)==GPIO_Speed_50MHz))typedefenum(GPIO_Mode_AIN=0x0,GPIO_Mode_IN_FLOATING=0x04,GPIO_Mode_IPD=0x28,GPIO_Mode_IPU=0x48,GPIO_Mode_Out_OD=0x14,GPIO_Mode_Out_PP=0x10,GPIO_Mode_AF_OD=0x1C,GPIO_Mode_AF_PP=0x18}GPIOMode_TypeDef;#defineIS_GPIO_MODE(MODE)(((MODE)==GPIO_Mode_AIN)||((MODE)==GPIO_Mode_IN_FLOATING)||\((MODE)==GPIO_Mode_IPD)||((MODE)==GPIO_Mode_IPU)||\((MODE)==GPIO_Mode_Out_OD)||((MODE)==GPIO_Mode_Out_PP)||\((MODE)==GPIO_Mode_AF_OD)||((MODE)==GPIO_Mode_AF_PP))typedefstruct(uint16_tGPIO_Pin;/*!<SpecifiestheGPIOpinstobeconfigured.Thisparametercanbeanyvalueof@refGPIO_pins_define*/GPIOSpeed_TypeDefGPIO_Speed;/*!<Specifiesthespeedfortheselectedpins.Thisparametercanbeavalueof@refGPIOSpeed_TypeDef*/GPIOMode_TypeDefGPIO_Mode;/*!<Specifiestheoperatingmodefortheselectedpins.Thisparametercanbeavalueof@refGPIOMode_TypeDef*/}GPIO_InitTypeDef;typedefenum(Bit_RESET=0,Bit_SET}BitAction;voidGPIO_DeInit(GPIO_TypeDef*GPIOx);voidGPIO_AFIODeInit(void);voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);voidGPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct);uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);voidGPIO_PinLockConfig(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_EventOutputConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource);voidGPIO_EventOutputCmd(FunctionalStateNewState);voidGPIO_PinRemapConfig(uint32_tGPIO_Remap,FunctionalStateNewState);voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource);voidGPIO_ETH_MediaInterfaceConfig(uint32_tGPIO_ETH_MediaInterface);?再看GPIO.C文件voidGPIO_DeInit(GPIO_TypeDef*GPIOx)(/*Checktheparameters*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));if(GPIOx==GPIOA)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,DISABLE);}elseif(GPIOx==GPIOB)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,DISABLE);}elseif(GPIOx==GPIOC)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC,DISABLE);}elseif(GPIOx==GPIOD)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD,DISABLE);}elseif(GPIOx==GPIOE)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE,DISABLE);}elseif(GPIOx==GPIOF)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF,DISABLE);}else(if(GPIOx==GPIOG)(RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,DISABLE);}}}?最后看GPIO_test工程的main.c文件#include"stm32f10xlib.h"GPIO_InitTypeDefGPIO_InitStructure;ADC_InitTypeDefADC_InitStructure;DMA_InitTypeDefDMA_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;ErrorStatusHSEStartUpStatus;externvu32TimingDelay;/*Privatefunctionprototypes*/voidRCC_Configuration(void);voidNVIC_Configuration(void);voidGPIO_Configuration(void);voidDelay(vu32nTime);voidSysTick_Configuration(void);voidSetupLED(void);externvoidSetupADC(void);intmain(void)(/*ConfiguretheGPIOports*/GPIO_Configuration();for(;;)(GPIOC->ODR=0xfffffc4f;Delay(800);GPIOC->ODR=0xfffffc8f;Delay(800);GPIOC->ODR=0xfffffd0f;Delay(800);GPIOC->ODR=0xfffffe0f;Delay(800);}}voidGPIO_Configuration(void)(GPIO_InitTypeDefGPIO_InitStructure;/*ConfigurePC.asOutputpush-pull*/GPIO_InitStructure.GPIO_PinGPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);/*ConfigurePB9asinputfloating(EXTILine9)*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);}NVIC中斷程序配置-硬件中斷選擇:通過下面的過程來配置19個線路做為中斷源:(1)配置19個中斷線的屏蔽位((EXTI_IMR));(2)配置所選中斷線的觸發(fā)選擇位((EXTI_RTSR和EXTI_FTSR));(3)配置那些控制映像到外部中斷控制器(EXTI)的NVIC中斷通道的使能和屏蔽位,使得19個中斷線中的請求可以被正確地響應(yīng)。-硬件事件選擇:通過下面的過程,可以配置19個線路為事件源(1)配置19個事件線的屏蔽位((EXTI_EMR)(2)配置事件線的觸發(fā)選擇位((EXTI_RTSRandEXTI_FTSR)-軟件中斷/事件的選擇:19個線路可以被配置成軟件中斷/事件線。下面是產(chǎn)生軟件中斷的過程:配置19個中斷/事件線屏蔽位((EXTI_IMR,EXTI_EMR)設(shè)置軟件中斷寄存器的請求位((EXTI_SWIER)總中斷控制函數(shù).身在STM32固件庫中(stm32flOx_nvic.cfustm32flOx_nvic.h)定義了四個函數(shù)操作PRIMASKR和FAULTMASK位,改變CPU的當(dāng)前優(yōu)先級,從而達到控制所有中斷的目的。皆下面兩個函數(shù)等效于關(guān)閉總中斷:voidNVIC_SETPRIMASK(void):voidNVIC_SETFAULTMASK(void);宙下面兩個函數(shù)等效于開放總中斷:voidNVIC_RESETPRIMASK(void);voidNVIC_RESETFAULTMASK(void):宙注意事項國上面兩組函數(shù)要成對使用,不能交又伯管STM32中的中斷源很多,最好能夠安排好分頭控制,不建議這樣控制.在STM32F103中,三個不同的時鐘源可以用來驅(qū)動系統(tǒng)時鐘(SYSCLK):HSI晶振時鐘(高速內(nèi)部時鐘信號);HSE晶振時鐘(高速外部時鐘信號);PLL時鐘。內(nèi)部8個定時器,分三類:通用定時器(GeneralPurposeTimers):TIM2-TIM5基本定時器(BasicTimers):TIM6、TIM7高級定時器(AdvancedControlTimers)TIM1、TIM8(大容量STM32F103/107獨有)定時器可以作為計數(shù)器使用,區(qū)別在于:定時器使用微控制器的時鐘來計數(shù)計數(shù)器使用的是外部信號計數(shù)【從功能上來看:基本定時器是通用定時器的子集,通用定時器又是高級定時器的子集?!慷〞r器的計數(shù)模式:向上計數(shù)模式:從0遞增,計到TIMx_ARR計數(shù)器的自動裝載值,并產(chǎn)生計數(shù)溢出脈沖;向下計數(shù)模式:從TIMx_ARR計數(shù)器的自動裝載值遞減,計到0,并產(chǎn)生計數(shù)溢出脈沖;中心對稱計數(shù)模式:從0遞增,計到TIMx_ARR計數(shù)器的自動裝載值,并產(chǎn)生計數(shù)溢出脈沖;然后,從TIMx_ARR計數(shù)器的自動裝載值遞減,計到0,又產(chǎn)生計數(shù)溢出脈沖;之后又從0開始循環(huán)計數(shù)。定時器的設(shè)置:#include"stm32f10x_heads.h"#include"HelloRobot.h"voidTimx_Init(void);intmain(void)(BSP_Init();Timx_Init();//定時器初始化函數(shù)while(1);}voidTimx_Init(void)(TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_DeInit(TIM2);//復(fù)位TIM2定時器TIM_TimeBaseStructure.TIM_Period=35999;TIM_TimeBaseStructure.TIM_Prescaler=1999;TIM_TimeBaseStructure.TIM_ClockDivision=0x0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);TIM_ClearFlag(TIM2,TIM_FLAG_Update);/*ClearTIM2updatependingflag[清除TIM2溢出中斷標(biāo)志]*/TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);/*EnableTIM2Updateinterrupt[TIM2溢出中斷允許]*/TIM_Cmd(TIM2,ENABLE);/*TIM2enablecounter[允許tim2計數(shù)]*/在stm32f10x_it.c文件里,添加TIM2_IRQHandler(void)中斷函數(shù)即可實現(xiàn)中斷計時響應(yīng)。voidTIM2_IRQHandler(void)(if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==0)GPIO_SetBits(GPIOC,GPIO_Pin_13);elseGPIO_ResetBits(GPIOC,GPIO_Pin_13);TIM_ClearFlag(TIM2,TIM_FLAG_Update);/*ClearTIM2updatependingflag[清除TIM2溢出中斷標(biāo)志]*/}第5章STM32F10X主要模塊ADC:模擬/數(shù)字轉(zhuǎn)換(A/D變換)負責(zé)將連續(xù)的模擬信號變?yōu)閷?yīng)的離散數(shù)值表示,以方便CPU的處理,完成這一功能的部件因此也就被稱為模擬/數(shù)字轉(zhuǎn)換器ADC(AnalogtoDigitalConvertor)。ADC的A/D轉(zhuǎn)換方式:查詢式AD中斷式AD外部觸發(fā)式AD【查詢式AD:在查詢方式下,軟件可通過讀取ADC模塊轉(zhuǎn)換完畢引腳EOC的狀態(tài)或狀態(tài)寄存器中的轉(zhuǎn)換完成標(biāo)志位判斷本次A/D是否結(jié)束;若結(jié)束則從數(shù)據(jù)總線或數(shù)據(jù)寄存器中讀取A/D結(jié)

溫馨提示

  • 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

提交評論