




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 1章 嵌入式系統(tǒng)導(dǎo)論1. 嵌入式系統(tǒng)的概念: 是以現(xiàn)代計(jì)算機(jī)技術(shù)為基礎(chǔ),以應(yīng)用為中心,可以根據(jù)系統(tǒng)或用戶需求(功能、 可靠性、成本、體積、功耗、環(huán)境等),靈活裁剪軟硬件模塊的專用計(jì)算機(jī)系統(tǒng)2. 嵌入式系統(tǒng)的分類(lèi)及分類(lèi)依據(jù): 嵌入式系統(tǒng)由硬件和軟件兩大部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或 管理等功能。前者是整個(gè)系統(tǒng)的物理基礎(chǔ),它提供軟件運(yùn)行平臺(tái)和通信接口; 后者實(shí)際控制系統(tǒng)的運(yùn)行。硬件:嵌入式微處理器、 外圍電路、 外圍硬件設(shè)備。 軟件: BootLoader 、嵌入式操作系統(tǒng)、用戶的應(yīng)用程序等。3. 幾種典型嵌入式操作系統(tǒng): (1) uC/OS II(2)uCLinux(3)Wind
2、ows CE ( 4)嵌入式 Linux 等4. 任務(wù)調(diào)度: 任務(wù)的調(diào)度有三種方式: 可搶占式、不可搶占式和時(shí)間片輪轉(zhuǎn)?!静豢蓳屨际秸{(diào)度是指一個(gè)任務(wù)一旦獲得CPU就獨(dú)占其運(yùn)行,除非由于某種原因使它決定放棄CPU的使用權(quán);可搶占式調(diào)度是基于任務(wù)優(yōu)先級(jí)的,當(dāng)前正在運(yùn)行的任務(wù)可以隨時(shí)讓位給 優(yōu)先級(jí)更高的處于就緒態(tài)的其他任務(wù);當(dāng)兩個(gè)或兩個(gè)以上任務(wù)有同樣的優(yōu)先級(jí)時(shí),不同任務(wù)輪轉(zhuǎn)使用CPU直到系統(tǒng)分配的CPU時(shí)間片用完,這就是時(shí)間片輪轉(zhuǎn)調(diào)度?!?目前,大多數(shù)嵌入式操作系統(tǒng)對(duì)不同優(yōu)先級(jí)的任務(wù)采用基于優(yōu)先級(jí)的可搶占式 調(diào)度法,對(duì)相同優(yōu)先級(jí)的任務(wù)則采用時(shí)間片輪轉(zhuǎn)調(diào)度法。5. 針對(duì)有內(nèi)存管理單元(MMU Memo
3、ry Management Unit)的處理器而設(shè)計(jì)的一 些桌面操作系統(tǒng),如 Windows、Linux ,使用了虛擬存儲(chǔ)器的概念。6. 計(jì)算機(jī)的發(fā)展: 馮諾依曼架構(gòu):將指令和數(shù)據(jù)存放在同一存儲(chǔ)空間中,統(tǒng)一編址,指令和數(shù)據(jù) 通過(guò)同一總線訪問(wèn)。哈佛結(jié)構(gòu)(馮諾依曼架構(gòu)的擴(kuò)展) :主要特點(diǎn)是程序和數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空 間中,即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是兩個(gè)相互獨(dú)立的存儲(chǔ)器,每個(gè)存儲(chǔ)器獨(dú)立 編制、獨(dú)立訪問(wèn)。 CortexM37. Cortex 系列 按嵌入式系統(tǒng)的典型應(yīng)用分類(lèi) : Cortex-A :高性能( High Performance ),【針對(duì)日益增長(zhǎng)的運(yùn)行 Linux 、WinCE、 Sy
4、mbian 等操作系統(tǒng)在內(nèi)的消費(fèi)者娛樂(lè)和無(wú)線產(chǎn)品設(shè)計(jì)與實(shí)現(xiàn)。 】 Cortex-M :微控制器類(lèi)( Microcontroller ),【針對(duì)應(yīng)用系統(tǒng)對(duì)功耗、成本 敏感,同時(shí)對(duì)微處理器性能要求較高的工業(yè)領(lǐng)域(汽車(chē)、家電、醫(yī)療器械等) 。】 Cortex-R :【實(shí)時(shí)類(lèi)( Real Time ),針對(duì)實(shí)時(shí)性要求較高的領(lǐng)域,可以運(yùn)行 RTOS?!?Cortex-W :【 Wireless 】Cortex指令完全采用Thumb-2體系架構(gòu)。19 / 18第2章 Cortex-M3 內(nèi)核原理1. Cortex-M3是ARM公司推出的新一代32位低成本、高性能通用微控制器內(nèi)核。2. Cortex-M3體
5、系結(jié)構(gòu):Cortex-M3處理器主要由兩大部分組成 : Cortex-M3 內(nèi)核:中央處理器核心(Cortex-M3 Core嵌套向量中斷控制器(NVIC)系統(tǒng)時(shí)鐘(SYSTICK)存儲(chǔ)器保護(hù)單元(MPU)總線 調(diào)試系統(tǒng)3. AMBA 總線:(1)AHB : Advaneed High Performanee Bus,用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸和事務(wù)(ACID:原子性、一致性、隔離性和持久性)分割;(2)ASB: Advaneed System Bus,也用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸,這是較老的系統(tǒng)總線格式,后來(lái)由AHB總線替代;APB: Advaneed
6、 Peripheral Bus,用于較低性能外設(shè)的簡(jiǎn)單連接,一般是接在AHB或 ASB系統(tǒng)總線上的第二級(jí)總線。4. Cortex-M3內(nèi)核是典型的32位處理器內(nèi)核: 內(nèi)部數(shù)據(jù)路徑寬度為32位, 寄存器寬度為32位, 存儲(chǔ)器接口寬度也是32位,? Cortex-M3內(nèi)核擁有獨(dú)立的指令總線和數(shù)據(jù)總線,其尋址能力均為4G且共享同一個(gè)存儲(chǔ)器空間,取指與數(shù)據(jù)訪問(wèn)可同時(shí)進(jìn)行。5. Cortex-M3 寄存器:(1) 低組寄存器(R0R7【所有指令均能訪問(wèn),字長(zhǎng)為 32位,復(fù)位后的初 始值是隨機(jī)的。絕大多數(shù)16位Thumb指令只能訪問(wèn)R0R7?!浚?).高組寄存器(R8R12【只有很少的16位Thumb指令
7、能訪問(wèn),32位指 令則不受限制,復(fù)位后的初始值是隨機(jī)的?!浚?) .堆棧寄存器(R13)又稱“堆棧指針SP'【Cortex-M3處理器內(nèi)核有兩 個(gè)堆棧,但這兩個(gè)寄存器不會(huì)同時(shí)生效,根據(jù)系統(tǒng)運(yùn)行狀態(tài)進(jìn)行堆棧切換,以保證程序運(yùn)行的快速性、安全性等要求。】 主堆棧指針(MSP),或?qū)懽鱏P_main【缺省堆棧指針,它由OS內(nèi)核、 異常服務(wù)例程以及所有需要特權(quán)訪問(wèn)的應(yīng)用程序代碼來(lái)使用。】 進(jìn)程堆棧指針(PSP ),或?qū)懽鱏P_process。【用于常規(guī)的應(yīng)用程序代碼 (不處于異常服務(wù)例程中時(shí))06. 在系統(tǒng)連接結(jié)構(gòu)中,通常借助 AHB-APB橋?qū)崿F(xiàn)內(nèi)核內(nèi)部高速總線到外部低速 總線的數(shù)據(jù)緩沖和轉(zhuǎn)
8、換。7. Cortex-M3是一個(gè)32位處理器,支持4GB存儲(chǔ)空間, 與ARM架構(gòu)相比,有 很多優(yōu)點(diǎn):(1) 預(yù)定義存儲(chǔ)器映射和總線配置;(2) 支持“位帶(bit - band ) ”操作;( 3)支持非對(duì)齊訪問(wèn)和互斥訪問(wèn);( 4)支持小端和大端兩種存儲(chǔ)格8. 位帶操作:( 1)概念: 位帶操作,只適用于數(shù)據(jù)訪問(wèn),不適用于取指。通過(guò)位帶的功能, 可以把多個(gè)布爾型數(shù)據(jù)打包在單一的字中,卻依然可以從位帶別名區(qū)中,像訪 問(wèn)普通內(nèi)存一樣地使用它們。位帶別名區(qū)中的訪問(wèn)操作是原子的,消滅了傳統(tǒng) 的“讀改寫(xiě)”三步曲以及由此產(chǎn)生的被中斷的可能。( 2)為什么采用位帶操作?可以顯著提高位操作的效率和安全性,對(duì)
9、許多底層軟件開(kāi)發(fā)特別是操作系統(tǒng)和 驅(qū)動(dòng)程序具有重要意義。( 3)片內(nèi)外設(shè)區(qū)( Peripheral , 0x400000000x5FFFFFFF, 512MB)外部 RAM區(qū)(External Ram ,0x600000000x9FFFFFFF, 256KB )外部設(shè)備區(qū)( External Device , 0xA00000000xDFFFFFFF, 768KB )( 4)映射公式:bit_word_addr =bit_ba nd_alias_base + (byte_offsetx 32) + (bit_ nu mberX 4)-bit_word_addr 是別名存儲(chǔ)器區(qū)中字的地址,它映射
10、到某個(gè)目標(biāo)位。-bit_band_alias_base是別名區(qū)的基址,即起始地址。-byte_offset是包含目標(biāo)位的字節(jié)在位帶區(qū)里的序號(hào)。-bit_number是位帶區(qū)目標(biāo)位所在字節(jié)中的位置(0-7 )。(5)例題:例 1 :位帶區(qū)SRAM6址為0x20000300的字節(jié)中的位2,其位帶別名區(qū)的映射地?【答案】? = 0x22000000 + (0x300*32) + (2*4). 0x22006008 = 0x22000000 + (0x300*32) + (2*4).對(duì)0x22006008地址的寫(xiě)操作和對(duì) SRAM中地址0x20000300字節(jié)的位2執(zhí)行 “讀-改-寫(xiě)”操作有著相同的效
11、果。例2 :(1) 地址?的別名字映射為0x200FFFFF的bit-band 字節(jié)的位0:(2) 地址?的別名字映射為0x200FFFFF的bit-band 字節(jié)的位7:(3) 地址?的別名字映射為0x20000000的bit-band 字節(jié)的位0:(4) 地址?的別名字映射為0x20000000的bit-band 字節(jié)的位7:【答案】(1) 地址0x23FFFFE0的別名字映射為0x200FFFFF的bit-band 字節(jié)的位0: 0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4(2) 地址0X23FFFFEC的別名字映射為0x200FFFFF的bit-band
12、 字節(jié)的位7: 0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4(3) 地址0x22000000的別名字映射為0x20000000的bit-band 字節(jié)的位0: 0x22000000=0x22000000+(0*32)+0*4(4) 地址0x220001C的別名字映射為 0x20000000的bit-band 字節(jié)的位7: 0x2200001C=0x22000000+(0*32)+7*4例2圖示:?怎樣利用“位帶操作”進(jìn)行位帶區(qū)的“讀一改一寫(xiě)”呢? 例3 :欲設(shè)置地址0x20000000中的比特2。處前僵到寄存器中的值寫(xiě)回 到OxZOW gg催用位再功龍后 r S
13、ffifl00x2000.0000i$BV0x2OOO 0000 it的值到內(nèi)硏績(jī)沖鉉With Bit-Ba nd不僮用包帶功能【答案】Without Bit-Ba ndLDRR0,=0x20000000;Setup address LDR R0, =0x22000008; Setup address LDR R1, R0 ; ReadMOV R1, #1 ; Setup dataORR.W R1, #0x4 ; Modify bit STR R1, R0 ; WriteSTR R1, R0 ;Write back result例4 :假如在(位帶區(qū))地址 0x20000000處的字為0x33
14、55AACC要求對(duì)bit2 清零?!敬鸢浮?無(wú)位帶LDR R0, =0x20000000 ;建立地址LDR R1, R0 ; ReadAND.W R1, #0xFFFFFFFB ; bit2 清零STR R1, R0 ; write back result?有位帶LDR R0, =0x22000008 ;建立地址Move R1,0 ; Setup DataSTR R1, R0 ; write back result【解答】 讀取地址0x22000008。本次讀訪問(wèn)將讀取 0x20000000,并提取比 特2,值為1。 往地址0x22000008處寫(xiě)0。本次操作將被映射成對(duì)地址 0x200000
15、00的“讀 改寫(xiě)” 操作(原子操作),把比特2清0。 現(xiàn)在再讀取0x20000000,將返回0x3355AAC8(bit2已清零)。9. 工作模式? Cortex-M3支持兩種模式和兩個(gè)特權(quán)等級(jí)。特權(quán)級(jí)用戶級(jí)處理模式(handler mode)用法錯(cuò)誤線程模式(thread mode )線程模式(thread mode ):u異常handler代碼主應(yīng)用程序代碼RESETCortex-M3處理器的工作模式和特權(quán)等級(jí)共有三種配合 線程模式+用戶級(jí) 線程模式+特權(quán)級(jí) Han dler模式+特權(quán)級(jí)10. 中斷:(1) 中斷的概念:所謂中斷,是指 CPU寸系統(tǒng)內(nèi)、外發(fā)生的某個(gè)事件的一種響 應(yīng)過(guò)程,或者
16、說(shuō)“一種機(jī)制”,即CPU暫時(shí)停止現(xiàn)行程序的執(zhí)行,自動(dòng)轉(zhuǎn)去執(zhí)行 預(yù)先安排好的處理該事件的服務(wù)子程序;當(dāng)處理結(jié)束后,再返回到被暫停的程 序的斷點(diǎn)處,繼續(xù)執(zhí)行原來(lái)的程序。(2) 什么是中斷向量表?Cortex-M3擁有一張向量表,用于在發(fā)生中斷并作出響應(yīng)時(shí),從表中查詢與中斷 對(duì)應(yīng)的處理例程的入口地址向量。(3) Cortex - M3內(nèi)核集成了中斷控制器一一嵌套向量中斷控制器NVIC(Nested Vectored In terrupt Con troller)。(4) 中斷優(yōu)先級(jí):Cortex-M3除配置優(yōu)先級(jí)外,還通過(guò)把 256級(jí)優(yōu)先級(jí)分為搶占優(yōu)先級(jí)和亞優(yōu)先 級(jí)支持最多128個(gè)搶占級(jí)。優(yōu)先級(jí)分組
17、規(guī)定:亞優(yōu)先級(jí)至少是1位,因此搶占優(yōu)先級(jí)最多是7位,128級(jí) 搶占優(yōu)先級(jí)。第3章STM32固件庫(kù)介紹1. CMSIS-外設(shè)訪問(wèn)層的文件(1) 獨(dú)立于編譯器的文件:? Cortex-M3 內(nèi)核及其設(shè)備文件(core_cm3.h + core_cm3.c)-訪問(wèn)Cortex-M3內(nèi)核及其設(shè)備:NVIC, SysTick等-訪問(wèn)Cortex-M3的CPU寄存器和內(nèi)核外設(shè)的函數(shù)?微控制器專用頭文件(device.h)-指定中斷號(hào)碼(與啟動(dòng)文件一致)-外設(shè)寄存器定義(寄存器的基地址和布局)-控制微控制器其他特有的功能的函數(shù)(可選)?微控制器專用系統(tǒng)文件(system_device.c)-函數(shù)System
18、Init ,用來(lái)初始化微控制器-函數(shù)Sysem_ExtMemCt,用來(lái)配置外部存儲(chǔ)器控制器。它位于文件startup_stm32f10x_xx.s /.c ,在跳轉(zhuǎn)到 main 前調(diào)用-SystemFrequncy,該值代表系統(tǒng)時(shí)鐘頻率-微控制器的其他功能(可選)(2) 編譯器供應(yīng)商+微控制器專用啟動(dòng)文件-編譯器啟動(dòng)代碼(匯編或者C)(startup_device.s)-微控制器專用的中斷處理程序列表(與頭文件一致)-弱定義(Weak)的中斷處理程序默認(rèn)函數(shù)(可以被用戶代碼覆蓋)2. CMSIS文件名的定義標(biāo)準(zhǔn)-core_cm3.hCortex-M3 global declarations a
19、nd definitions,static functiondefi niti ons-core_cm3.cCortex-M3 global defi nitions-<device>.hTop-level header file (device specific).To be in cluded by applicati on code.In cludes core_cm3.h and system_<device>.h-system_<device>.hDevice specific declarati ons-system_<device>
20、.cDevice specific defi niti ons, e.g. System In it()【我也不知道上面到底哪個(gè)是要考的-_-|】第4章 基于Cortex-M3的STM32F10X “最小系統(tǒng)”1. 最小系統(tǒng):(1)“最小系統(tǒng)”的概念:在盡可能減少上層應(yīng)用的情況下,能夠使系統(tǒng)運(yùn)行 的最小化模塊配置。對(duì)于當(dāng)前的大多數(shù)微控制器而言,“最小系統(tǒng)”稱為“嵌入式核心控制模塊”似乎更貼切一些。(2)最小系統(tǒng)的組成: 電源、時(shí)鐘、復(fù)位電路、存儲(chǔ)系統(tǒng)、調(diào)試系統(tǒng)?時(shí)鐘模塊一一通常經(jīng)ARM內(nèi)部鎖相環(huán)進(jìn)行相應(yīng)的倍頻,以提供系統(tǒng)各模塊 運(yùn)行所需的時(shí)鐘頻率輸入? Flash存儲(chǔ)模塊存放啟動(dòng)代碼、操作系統(tǒng)
21、和用戶應(yīng)用程序代碼? SDRAM模塊一一為系統(tǒng)運(yùn)行提供動(dòng)態(tài)存儲(chǔ)空間, 是系統(tǒng)代碼運(yùn)行的主要區(qū) 域? JTAG模塊一一實(shí)現(xiàn)對(duì)程序代碼的下載和調(diào)試? UART模塊一一實(shí)現(xiàn)對(duì)調(diào)試信息的終端顯示?復(fù)位模塊一一實(shí)現(xiàn)對(duì)系統(tǒng)的復(fù)位(3)嵌入式最小系統(tǒng)的核心部分:Cortex-M3微處理器、FLASH和SDRAM模塊2. STM32F103處理器系統(tǒng)頻率為 72MHz處理器性能可達(dá)到90DMIPS此時(shí)Cortex-M3 功耗約 14W左右。3. 系統(tǒng)復(fù)位:系統(tǒng)復(fù)位將清除時(shí)鐘控制器 CSR中的復(fù)位標(biāo)志和備用域寄存器之外的所有寄存 器。STM32內(nèi)含復(fù)位電路支持,當(dāng)任意一個(gè)下列事件發(fā)生時(shí)都將引起系統(tǒng)自動(dòng)復(fù) 位:
22、NRST引腳出現(xiàn)低電平 (外部復(fù)位); 看門(mén)狗計(jì)時(shí)器計(jì)時(shí)終止(WWDGS位); 獨(dú)立看門(mén)狗計(jì)數(shù)終止(IWDG復(fù)位); 軟件復(fù)位(SW復(fù)位); 低功耗管理復(fù)位。可通過(guò)查詢控制/狀態(tài)寄存器RCC_CS中的復(fù)位標(biāo)志來(lái)識(shí)別復(fù)位源。4. 電壓調(diào)壓器電壓調(diào)壓器的三種操作模式 : 主模式(MR ):又稱“運(yùn)行模式(Run Mode )”或“調(diào)節(jié)模式”,用于CPU正常的運(yùn)行操作,以正常功耗模式,向內(nèi)核、內(nèi)存、外設(shè)供給1.8V電源。 低功耗模式(LPR):又稱“停止(機(jī))模式(Stop Mode )? ”,當(dāng)CPU 無(wú)任務(wù)需要處理時(shí),以低功耗模式供1.8V電源,以保持SRAM寄存器等的內(nèi)容。 一般可以根據(jù)最低電
23、源消耗、最快速啟動(dòng)時(shí)間和可用的喚醒源等條件,選定最佳低功耗模式。 掉電(關(guān)斷)模式:用于 CPU“待機(jī)模式 (Standby Mode )”,調(diào)壓器的 輸出為高阻狀態(tài),停止內(nèi)核電路供電,調(diào)壓器處于零消耗狀態(tài),除待機(jī)電路和備份域外,寄存器和SRAM勺內(nèi)容將丟失。有時(shí),該模式被歸為“低功耗模式”的一種。5. GPIO模塊(1) GPIO( Ge neral Purpose In put Output,通用 I/O )接口模塊,可以為 CPU 提供數(shù)字輸入輸出功能。(2) 可以對(duì)通過(guò)軟件對(duì)GPIO接口進(jìn)行靈活配置和操縱,包括: 輸入輸出的方向配置引腳功能復(fù)用 引腳的重新映射是否可以申請(qǐng)中斷PWM俞出
24、等(3) STM32F10系列產(chǎn)品的GPIO模塊,可以進(jìn)行輸入輸出等功能的配置。共種模式:入浮空輸入下拉入輸入 開(kāi)漏出輸出 推挽出輸出In_Floating 上拉入輸入:IPU (In Push_Up)IPD (In Push_Down) 入模擬輸入:AIN (Analog In)OUT_OD (OD: Ope n-Drai n)OUT_PP (PP: Push-Pull)復(fù)用功能推挽出輸出:AF_PP復(fù)用功能開(kāi)漏出輸出:AF_OD(4)通過(guò)I/O端口配置方式降低功耗桔如果需要減小I/O端口的電流消耗,可以恨據(jù)具體 悄況配置I/O端I I的狀態(tài):輸入端U T配呂1為浮宇輸入帶外部上拉的輸出端【
25、I 9配置為推挽輸出井輸出T帶外部下拉的輸擊端I I今配置為推挽輸山并輸出OI未用的懸空瑞口今配置為推挽輸出井輸jirr*未用的內(nèi)部外設(shè):保持為斤閉和飲認(rèn)的復(fù)位狀態(tài):不要進(jìn)抒重映射豆位寄心:RCC_APBlRSTRfllRCC_APB2RSTR關(guān)閉對(duì)應(yīng)的時(shí)鐘時(shí)鐘使能寄仔器:RCC_AHBENR. RCC_APB2ENRfflRCC_APB1 ENR(5) GPIO復(fù)用功能為了使不同器件封裝的外設(shè) I/O 功能的數(shù)量達(dá)到最優(yōu),可以把一些復(fù)用功能重 新映射到其他一些引腳上。 這可以通過(guò)軟件配置相應(yīng)的寄存器來(lái)完成 (參考 AFIO 寄存器描述)。這時(shí),復(fù)用功能就不再映射到它們的原始引腳上了。6. G
26、PIO的配置?先看GPIO.h文件typedef enumGPIO_Speed_10MHz = 1,GPIO_Speed_2MHz,GPIO_Speed_50MHzGPIOSpeed_TypeDef;#define IS_GPIO_SPEED(SPEED) (SPEED) =GPIO_Speed_10MHz) | (SPEED) = GPIO_Speed_2MHz) | (SPEED) = GPIO_Speed_50MHz)typedef enum GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPI
27、O_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18GPIOMode_TypeDef;#define IS_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
28、) = GPIO_Mode_Out_PP) | (MODE) = GPIO_Mode_AF_OD) | (MODE) = GPIO_Mode_AF_PP)typedef structuint16_t GPIO_Pin;/*!< Specifies the GPIO pins to be configured.This parameter can be any value of ref GPIO_pins_define */GPIOSpeed_TypeDef GPIO_Speed;/*!< Specifies the speed for the selected pins.This
29、parameter can be a value of ref GPIOSpeed_TypeDef */GPIOMode_TypeDef GPIO_Mode;/*!< Specifies the operating modefor the selected pins. This parameter can be a value of ref GPIOMode_TypeDef */GPIO_InitTypeDef;typedef enum Bit_RESET = 0, Bit_SET BitAction;void GPIO_DeInit(GPIO_TypeDef* GPIOx);void
30、GPIO_AFIODeInit(void);void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);uint8_t GPIO_ReadOutputDataBit(GPI
31、O_TypeDef*GPIOx,uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal);void GPIO_Write(GPIO
32、_TypeDef* GPIOx, uint16_t PortVal);void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);void GPIO_EventOutputCmd(FunctionalState NewState);void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);v
33、oid GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);? 再看 GPIO.C 文件void GPIO_DeInit(GPIO_TypeDef* GPIOx)/* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx);if (GPIOx = GPIOA)RCC_APB2PeriphResetCmd(
34、RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);else if (GPIOx = GPIOB)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);else if (GPIOx = GPIOC)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2Pe
35、riphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); else if (GPIOx = GPIOD)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE); else if (GPIOx = GPIOE)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DIS
36、ABLE); else if (GPIOx = GPIOF)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE); elseif (GPIOx = GPIOG)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE); ? 最后看 GPIO_test 工程的 main.c 文件#in
37、clude "stm32f10x_lib.h"GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; ErrorStatus HSEStartUpStatus; extern vu32 TimingDelay;/* Private function prototypes */void RCC_Configuration(void);void NV
38、IC_Configuration(void); void GPIO_Configuration(void);void Delay(vu32 nTime);void SysTick_Configuration(void);void SetupLED (void) ; extern void SetupADC (void);int main(void)/* Configure the GPIO ports */ GPIO_Configuration();for(;) GPIOC->ODR = 0xfffffc4f;Delay(800);GPIOC->ODR = 0xfffffc8f;D
39、elay(800);GPIOC->ODR = 0xfffffd0f;Delay(800);GPIOC->ODR = 0xfffffe0f;Delay(800);void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure PC. as Output push-pull */GPIO_InitStructure.GPIO_Pin GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_
40、Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure PB9 as input floating (EXTI Line9) */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure);7. NVIC 中
41、斷程序配置? 硬件中斷選擇:通過(guò)下面的過(guò)程來(lái)配置 19 個(gè)線路做為中斷源:( 1)配置 19 個(gè)中斷線的屏蔽位( (EXTI_IMR) );( 2)配置所選中斷線的觸發(fā)選擇位( (EXTI_RTSR 和 EXTI_FTSR) );(3)配置那些控制映像到外部中斷控制器 (EXTI) 的 NVIC 中斷通道的使能和屏 蔽位,使得 19 個(gè)中斷線中的請(qǐng)求可以被正確地響應(yīng)。? 硬件事件選擇:通過(guò)下面的過(guò)程,可以配置 19 個(gè)線路為事件源( 1)配置 19 個(gè)事件線的屏蔽位( (EXTI_EMR)(2)配置 事件線的觸發(fā)選擇位( (EXTI_RTSR and EXTI_FTSR)? 軟件中斷 / 事件
42、的選擇: 19 個(gè)線路可以被配置成軟件中斷 / 事件線。下面是產(chǎn) 生軟件中斷的過(guò)程:(1) 配置19 個(gè)中斷/事件線屏蔽位(EXTIMR, EXTI_EMR)(2) 設(shè)置軟件中斷寄存器的請(qǐng)求位(EXTI_SWIER)總中斷控制函數(shù)STM 321| (T/-4-111 fstm32fl 0x_nvic.c fiJ$tm32fl Ox_nvic.h) 定義了四個(gè)函數(shù)操作PRIMASKf和FAULTMAS肓立,改 變CPU白勺當(dāng)前優(yōu)先級(jí),從珂達(dá)到控制所有中斷的冃的»卜市兩個(gè)函數(shù)等效于關(guān)閉總中斷:void NVIC_SETPRIMASK (void) t void NVIC_SETFAULT
43、MASK(voxd);»卜'面兩個(gè)函數(shù)等效F開(kāi)放總中斷;void NVICRESETPRIMASKvoid)?void NVIC RESETFAULTMASK(void);»注意事項(xiàng)*STM32ttt中晰源很埶雖好能夠安排好分頭控* 不建議這樣 控制°上而兩殂惟數(shù)耍成對(duì)使用*不能交叉使用8. 在STM32F10沖,三個(gè)不同的時(shí)鐘源可以用來(lái)驅(qū)動(dòng)系統(tǒng)時(shí)鐘 (SYSCLK) HSI晶振時(shí)鐘(高速內(nèi)部時(shí)鐘信號(hào)); HSE晶振時(shí)鐘(高速外部時(shí)鐘信號(hào)); PLL時(shí)鐘。9. 內(nèi)部8個(gè)定時(shí)器,分三類(lèi): 通用定時(shí)器(Ge neral Purpose Timers ): TI
44、M2-TIM5 基本定時(shí)器(Basic Timers ): TIM6、TIM7 高級(jí)定時(shí)器(AdvancedControl Timers) TIM1、TIM8(大容量 STM32F103/107 獨(dú)有)10. 定時(shí)器可以作為計(jì)數(shù)器使用,區(qū)別在于:定時(shí)器使用微控制器的時(shí)鐘來(lái)計(jì)數(shù)計(jì)數(shù)器使用的是外部信號(hào)計(jì)數(shù)從功能上來(lái)看:基本定時(shí)器是通用定時(shí)器的子集,通用定時(shí)器又是高級(jí)定時(shí) 器的子集。】11. 定時(shí)器的計(jì)數(shù)模式: 向上計(jì)數(shù)模式:從0遞增,計(jì)到TIMx_ARR計(jì)數(shù)器的自動(dòng)裝載值,并產(chǎn)生計(jì)數(shù)溢出脈沖; 向下計(jì)數(shù)模式:從TIMx_ARR+數(shù)器的自動(dòng)裝載值遞減,計(jì)到 0,并產(chǎn)生計(jì)數(shù)溢出脈沖; 中心對(duì)稱計(jì)數(shù)模式
45、:從0遞增,計(jì)到TIMx_ARR+數(shù)器的自動(dòng)裝載值,并產(chǎn) 生計(jì)數(shù)溢出脈沖;然后,從TIMx_ARR+數(shù)器的自動(dòng)裝載值遞減,計(jì)到0,又產(chǎn) 生計(jì)數(shù)溢出脈沖;之后又從0開(kāi)始循環(huán)計(jì)數(shù)。12. 定時(shí)器的設(shè)置:#include "stm32f10x_heads.h"#include "HelloRobot.h" void Timx_Init(void);int main(void)BSP_Init();Timx_Init();/ 定時(shí)器初始化函數(shù) while (1) ;void Timx_Init(void) TIM_TimeBaseInitTypeDef TIM_
46、TimeBaseStructure; TIM_DeInit(TIM2);/ 復(fù)位 TIM2 定時(shí)器 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_C
47、learFlag(TIM2, TIM_FLAG_Update);/* Clear TIM2 update pending flag 清除 TIM2 溢出中斷標(biāo)志 */ TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);/* Enable TIM2 Update interrupt TIM2 溢出中斷允許 */ TIM_Cmd(TIM2, ENABLE);/* TIM2 enable counter 允許 tim2 計(jì)數(shù) */在 stm32f10x_it.c 文件里,添加 TIM2_IRQHandler ( void )中斷函數(shù)即可實(shí) 現(xiàn)中斷計(jì)時(shí)響應(yīng)。void TIM2_IRQHandler(void) if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 減肥產(chǎn)品節(jié)日促銷(xiāo)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 動(dòng)漫類(lèi)書(shū)籍企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 2025年度高端餐飲服務(wù)員工勞動(dòng)合同管理協(xié)議
- 二零二五年度網(wǎng)紅店鋪品牌授權(quán)與轉(zhuǎn)讓合同
- 典籍司機(jī)服務(wù)合同
- 2025年度酒店大堂綠植花卉租賃與更新協(xié)議
- 二零二五年度合同糾紛調(diào)解結(jié)果合同處理樣板
- 鐵合金企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 二零二五年度新型工人與包工頭勞務(wù)關(guān)系合同
- 2025年度環(huán)保凈化設(shè)備銷(xiāo)售代理合作協(xié)議
- 2024解析:第十二章滑輪-基礎(chǔ)練(解析版)
- 《社會(huì)應(yīng)急力量建設(shè)基礎(chǔ)規(guī)范 第2部分:建筑物倒塌搜救》知識(shí)培訓(xùn)
- 國(guó)有企業(yè)管理人員處分條例培訓(xùn)2024
- 浙江省寧波市2025屆高三上學(xué)期一??荚嚁?shù)學(xué)試卷 含解析
- 代理記賬業(yè)務(wù)內(nèi)部規(guī)范(三篇)
- 腰椎間盤(pán)突出癥課件(共100張課件)
- 委托調(diào)解民事糾紛協(xié)議書(shū)合同
- 中醫(yī)四季養(yǎng)生之道課件
- 消防安全教育主題班會(huì)課件
- 《無(wú)機(jī)化學(xué)》課件-第6章 分子結(jié)構(gòu)和晶體結(jié)構(gòu)
- 7.1.2 直觀圖的畫(huà)法-【中職專用】高一數(shù)學(xué)教材配套課件(高教版2021·基礎(chǔ)模塊下冊(cè))
評(píng)論
0/150
提交評(píng)論