版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)的分類及分類依據(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) Windows CE(
2、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)分配的CPUM間片用完,這就是時(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 Memory Management Un
3、it)的處理器而設(shè)計(jì)的一 些桌面操作系統(tǒng),如 Windows Linux ,使用了虛擬存儲(chǔ)器的概念。6 .計(jì)算機(jī)的發(fā)展:馮諾依曼架構(gòu):將指令和數(shù)據(jù)存放在同一存儲(chǔ)空間中,統(tǒng)一編址,指令和數(shù)據(jù) 通過同一總線訪問。哈佛結(jié)構(gòu)(馮諾依曼架構(gòu)的擴(kuò)展):主要特點(diǎn)是程序和數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空 問中,即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是兩個(gè)相互獨(dú)立的存儲(chǔ)器,每個(gè)存儲(chǔ)器獨(dú)立 編制、獨(dú)立訪問。CortexM37 .Cortex 系列按嵌入式系統(tǒng)的典型應(yīng)用分類:Cortex-A :高性能(High Performance ),【針對(duì)日益增長(zhǎng)的運(yùn)行 Linux、WinCESymbian等操作系統(tǒng)在內(nèi)的消費(fèi)者娛樂和無線產(chǎn)品設(shè)計(jì)與
4、實(shí)現(xiàn)。】Cortex-M :微控制器類(Microcontroller ),【針對(duì)應(yīng)用系統(tǒng)對(duì)功耗、成本敏感,同時(shí)對(duì)微處理器性能要求較高的工業(yè)領(lǐng)域(汽車、家電、醫(yī)療器械等)1Cortex-R :【實(shí)時(shí)類(Real Time ),針對(duì)實(shí)時(shí)性要求較高的領(lǐng)域,可以運(yùn)行RTOS】 Cortex-W : Wireless Cortex指令完全采用Thumb-2體系架構(gòu)。第2章 Cortex-M3 內(nèi)核原理1 .Cortex-M3是AR您司推出白新一代32位低成本、高性能通用微控制器內(nèi)核。2 .Cortex-M3體系結(jié)構(gòu):Cortex-M3處理器主要由兩大部分組成 : Cortex-M3 內(nèi)核:中央處理器核
5、心(Cortex-M3 Core嵌套向量中斷控制器(NVIC )系統(tǒng)時(shí)鐘(SYSTICK )存儲(chǔ)器保護(hù)單元(MPU)總線調(diào)試系統(tǒng)3 .AMBA 總線:(l)AHB : Advanced High Performance Bus ,用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸和事務(wù)(ACID):原子性、一致性、隔離性和持久性)分割;(2)ASB: Advanced System Bus,也用于高性能系統(tǒng)模塊的連接,支持突發(fā)模式數(shù)據(jù)傳輸,這是較老的系統(tǒng)總線格式,后來由 AHB總線替 代;(3)APB: Advanced PeriPheral Bus ,用于較低性能外設(shè)的簡(jiǎn)單連接,一般是接在AHB
6、mE 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ù)訪問可同時(shí)進(jìn)行。5 .Cortex-M3 寄存器:(1) .低組寄存器(R0R7【所有指令均能訪問,字長(zhǎng)為 32位,復(fù)位后的初 始值是隨機(jī)的。 絕大多數(shù)16位Thumb指令只能訪問R0R7 (2) .高組寄存器(R8R12【只有很少的16位Thumb指令能訪問,32位指 令則不受限制,復(fù)位后的初始值是隨機(jī)的。】(3) .堆
7、棧寄存器(R13)又稱“堆棧指針SP'【Cortex-M3處理器內(nèi)核有兩 個(gè)堆棧,但這兩個(gè)寄存器不會(huì)同時(shí)生效,根據(jù)系統(tǒng)運(yùn)行狀態(tài)進(jìn)行堆棧切換,以 保證程序運(yùn)行的快速性、安全性等要求?!恐鞫褩V羔?MSP ),或?qū)懽鱏P_mak【缺省堆棧指針,它由OS內(nèi)核、 異常服務(wù)例程以及所有需要特權(quán)訪問的應(yīng)而程序代碼來使用?!窟M(jìn)程堆棧指針(PSP ),或?qū)懽鱏P_process?!居糜诔R?guī)的應(yīng)用程序代碼 (不處于異常服務(wù)例程中時(shí))16 .在系統(tǒng)連接結(jié)構(gòu)中,通常借助 AHB-APBff實(shí)現(xiàn)內(nèi)核內(nèi)部高速總線到外部低速 總線的數(shù)據(jù)緩沖和轉(zhuǎn)換。7 .Cortex-M3是一個(gè)32位處理器,支持4GB存儲(chǔ)空間,
8、與ARM架構(gòu)相比,有 很多優(yōu)點(diǎn):(1)預(yù)定義存儲(chǔ)器映射和總線配置;(2)支持“位帶(bit - band ) ”操作;(3)支持非對(duì)齊訪問和互斥訪問;(4)支持小端和大端兩種存儲(chǔ)格8 .位帶操作:(1)概念:位帶操作,只適用于數(shù)據(jù)訪問,不適用于取指。通過位帶的功能, 可以把多個(gè)布爾型數(shù)據(jù)打包在單一的字中,卻依然可以從位帶別名區(qū)中,像訪 問普通內(nèi)存一樣地使用它們。位帶別名區(qū)中的訪問操作是原子的,消滅了傳統(tǒng) 的“讀一改一寫”三步曲以及由此產(chǎn)生的被中斷的可能。(2)為什么采用位帶操作?可以顯著提高位操作的效率和安全性,對(duì)許多底層軟件開發(fā)特別是操作系統(tǒng)和 驅(qū)動(dòng)程序具有重要意義。(3)片內(nèi)外設(shè)區(qū)(Per
9、ipheral , 0x400000000x5FFFFFFF, 512MB外部 RAM區(qū)(External Ram , 0x600000000x9FFFFFFF, 256KB )外部設(shè)備區(qū)(External Device , 0xA00000000xDFFFFFFF 768KB )(4)映射公式:bit_word_addr =bit_band_alias_base + (byte_offsetx 32) + (bit_numberX4)- bit_word_addr 是別名存儲(chǔ)器區(qū)中字的地址,它映射到某個(gè)目標(biāo)位。- bit_band_alias_base是別名區(qū)的基址,即起始地址。- byte
10、_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地址的寫操作和對(duì) SRAMfr地址0x20000300字節(jié)的位2執(zhí)行“讀-改-寫”操作有著相同的效果。例2 :(1)地址?的別名字映射為0x200FFFFF的bit-band 字節(jié)的位0:(2
11、)地址?的別名字映射為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的另I名字映射為0x200FFFFF勺bit-band 字節(jié)的位7:0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4(3)地址0x
12、22000000的別名字映射為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ū)的“讀一改一寫”呢?例3 :欲設(shè)置地址0x20000000中的比特2。不使用植帶功能讀的??谛盏闹档郊拇嫫髦兄刀鍿5的bit工他雪存罌的(寫回到0x2000 MOO使用位帚功靛讀置6(2000 000。處的值到內(nèi)陽媼沖區(qū)位置如0后,苒把值With
13、out Bit-BandLDRR0,=0x20000000;Setup addressWith Bit-BandLDR R0, =0x22000008; Setup address【答案】LDR R1, R0 ; ReadMOV R1, #1 ; Setup dataORR.W R1, #0x4 ; Modify bit STR R1, R0 ; Write STR R1, R0 ;Write back result例4 :假如在(位帶區(qū))地址 0x20000000處的字為0x3355AACC要求對(duì)bit2 清零?!敬鸢浮?無位帶LDR R0, =0x20000000 ;建立地址LDR R1,
14、 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。本次讀訪問將讀取 0x20000000,并提取比 特2,值為1。往地址0x22000008處寫00本次操作將被映射成對(duì)地址 0x20000000的“讀 一改寫” 操作(原子操作),把比特2清0?,F(xiàn)在再讀取0x20000000,將返回0x3355AAC8(bi
15、t2已清零)。9 .工作模式處理模式(handler mode)用法錯(cuò)誤線程模式(thread mode )線程模式(thread mode )特權(quán)級(jí)用戶級(jí)rr? Cortex-M3支持兩種模式和兩個(gè)特權(quán)等級(jí)。異常handler代碼主應(yīng)用程序代碼RESETCortex-M3處理器的工作模式和特權(quán)等級(jí)共有三種配合線程模式+用戶級(jí)線程模式+特權(quán)級(jí)Handler模式+特權(quán)級(jí)10 .中斷:(1)中斷的概念:所謂中斷,是指 CPU寸系統(tǒng)內(nèi)、外發(fā)生的某個(gè)事件的一種響 應(yīng)過程,或者說“一種機(jī)制”,即CPU®時(shí)停止現(xiàn)行程序的執(zhí)行,自動(dòng)轉(zhuǎn)去執(zhí)行 預(yù)先安排好的處理該事件的服務(wù)子程序;當(dāng)處理結(jié)束后,再返回
16、到被暫停的程 序的斷點(diǎn)處,繼續(xù)執(zhí)行原來的程序。(2)什么是中斷向量表?Cortex-M3擁有一張向量表,用于在發(fā)生中斷并作出響應(yīng)時(shí),從表中查詢與中斷 對(duì)應(yīng)的處理例程的入口地址向量。(3) Cortex - M3內(nèi)核集成了中斷控制器一一嵌套向量中斷控制器NVIC(Nested Vectored Interrupt Controller) 。(4)中斷優(yōu)先級(jí):Cortex-M3除配置優(yōu)先級(jí)外,還通過把 256級(jí)優(yōu)先級(jí)分為搶占優(yōu)先級(jí)和亞優(yōu)先 級(jí)支持最多128個(gè)搶占級(jí)。優(yōu)先級(jí)分組規(guī)定:亞優(yōu)先級(jí)至少是 1位,因此搶占優(yōu)先級(jí)最多是7位,128級(jí) 搶占優(yōu)先級(jí)。第3章STM3凋件庫介紹1 .CMSIS-外設(shè)訪
17、問層的文件 (1)獨(dú)立于編譯器的文件: ? Cortex-M3 內(nèi)核及其設(shè)備文件(core_cm3.h + core_cm3.c)-訪問Cortex-M3內(nèi)核及其設(shè)備:NVIC, SysTick等-訪問Cortex-M3的CPUS存器和內(nèi)核外設(shè)的函數(shù)?微控制器專用頭文件(device.h)-指定中斷號(hào)碼(與啟動(dòng)文件一致)-外設(shè)寄存器定義(寄存器的基地址和布局)-控制微控制器其他特有的功能的函數(shù)(可選)?微控制器專用系統(tǒng)文件(system_device.c)-函數(shù)SystemInit ,用來初始化微控制器-函數(shù)Sysem_ExtMemCtl用來配置外部存儲(chǔ)器控制器。它位于文件 startup_s
18、tm32f10x_xx.s /.c,在跳轉(zhuǎn)到 main 前調(diào)用-SystemFrequncy,該值代表系統(tǒng)時(shí)鐘頻率-微控制器的其他功能(可選)(2)編譯器供應(yīng)商+微控制器專用啟動(dòng)文件-編譯器啟動(dòng)代碼(匯編或者C)(startup_device.s)-微控制器專用的中斷處理程序列表(E頭文件一致)-弱定義(Weak)的中斷處理程序默認(rèn)函數(shù)(可以被用戶代碼覆蓋)2 .CMSIS文件名的定義標(biāo)準(zhǔn)-core_cm3.hCortex-M3 global declarations and definitions, static function definitions -core_cm3.cCortex-
19、M3 global definitions-<device>.hTop-level header file (device specific).To be included by application code.Includes core_cm3.h and system_<device>.h-system_<device>.hDevice specific declarations-system_<device>.cDevice specific definitions, e.g. SystemInit() 【我也不知道上面到底哪個(gè)是要考的-
20、_-| 1第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)ARMft部鎖相環(huán)進(jìn)行相應(yīng)的倍頻,以提供系統(tǒng)各模塊 運(yùn)行所需的時(shí)鐘頻率輸入? Flash存儲(chǔ)模塊一一存放啟動(dòng)代碼、操作系統(tǒng)和用戶應(yīng)用程序代碼? SDRAM模塊一一為系統(tǒng)運(yùn)行提供動(dòng)態(tài)存儲(chǔ)空間, 是系統(tǒng)代碼運(yùn)行的主要區(qū) 域? JTAG模塊一一實(shí)現(xiàn)對(duì)程序代碼
21、的下載和調(diào)試? UART模塊一一實(shí)現(xiàn)對(duì)調(diào)試信息的終端顯示?復(fù)位模塊一一實(shí)現(xiàn)對(duì)系統(tǒng)的復(fù)位(3)嵌入式最小系統(tǒng)的核心部分:Cortex-M3微處理器、FLASH和SDRAMK塊2 . STM32F103處理器系統(tǒng)頻率為 72MHz處理器性能可達(dá)到 90DMIPS止匕時(shí) Cortex-M3功耗約14W左右。3 .系統(tǒng)復(fù)位:系統(tǒng)復(fù)位將清除時(shí)鐘控制器 CSR中的復(fù)位標(biāo)志和備用域寄存器之外的所有寄存 器。STM3次含復(fù)位電路支持,當(dāng)任意一個(gè)下列事件發(fā)生時(shí)都將引起系統(tǒng)自動(dòng)復(fù)NRST引腳出現(xiàn)低電平 (外部復(fù)位);看門狗計(jì)時(shí)器計(jì)時(shí)終止(WWDGS位);獨(dú)立看門狗計(jì)數(shù)終止(IWDG復(fù)位);軟件復(fù)位(SW復(fù)位);低
22、功耗管理復(fù)位??赏ㄟ^查詢控制/狀態(tài)寄存器RCC_CSR的復(fù)位標(biāo)志來識(shí)別復(fù)位源。4 .電壓調(diào)壓器電壓調(diào)壓器的三種操作模式:主模式(MR ):又稱“運(yùn)行模式 (Run Mode )”或“調(diào)節(jié)模式”,用于 CPUE常的運(yùn)行操作,以正常功耗模式,向內(nèi)核、內(nèi)存、外設(shè)供給1.8V電源。低功耗模式(LPR ):又稱“停止(機(jī))模式(Stop Mode) ? ”,當(dāng)CPU 無任務(wù)需要處理時(shí),以低功耗模式供1.8V電源,以保持SRAM寄存器等的內(nèi)容。 一般可以根據(jù)最低電源消耗、最快速啟動(dòng)時(shí)間和可用的喚醒源等條件,選定最 佳低功耗模式。 掉電(關(guān)斷)模式:用于 CPU“待機(jī)模式 (Standby Mode )”,
23、調(diào)壓器的 輸出為高阻狀態(tài),停止內(nèi)核電路供電,調(diào)壓器處于零消耗狀態(tài),除待機(jī)電路和 備份域外,寄存器和SRAM勺內(nèi)容將丟失。有時(shí),該模式被歸為“低功耗模式”的一種。5 .GPIO模塊(1) GPIO (General Purpose Input Output,通用 I/O)接口模塊,可以為 CPU 提供數(shù)字輸入輸出功能。(2)可以對(duì)通過軟件對(duì)GPIO接口進(jìn)行靈活配置和操縱,包括:輸入輸出的方向配置引腳功能復(fù)用引腳的重新映射是否可以申請(qǐng)中斷PWM俞出等(3) STM32F10XC歹產(chǎn)品的GPIO莫塊,可以進(jìn)行輸入輸出等功能的配置。共 8 種模式: 入浮空輸入:In_Floating 上拉入輸入:IP
24、U (In Push_Up) 下拉入輸入:IPD (In Push_Down) 入模擬輸入:AIN (Analog In) 開漏出輸出:OUT_OD (OD: Open-Drain) 推挽出輸出:OUT_PP (PP: Push-Pull)復(fù)用功能推挽出輸6 : AF_PP復(fù)用功能開漏出輸出:AF_OD(4)通過I/O端口配置方式降低功耗腳的處理. .如果需要減小I/。端【I的電流消耗,可以根據(jù)具體 情況配置12端11的狀態(tài):A輸入端分配置為浮空輸入帶外部上拉的輸出端口分配置為推挽輸出并輸出T帶外部下拉的輸出端I I今配苴為推挽輸出并輸出O未用的懸空端口配置為推挽輸出并輸出T未用的內(nèi)部外設(shè):保
25、持為關(guān)閉和默認(rèn)的復(fù)位狀態(tài): 不要進(jìn)行求映射 復(fù)位者存器RCC_APBlRSTRf|RCC_APB2RSTR關(guān)閉對(duì)應(yīng)的時(shí)鐘 時(shí)鐘使能寄存器:RCC_AHBENR. RCC_APB2ENRRCC_APB1 ENR5 5) GPIO復(fù)用功能為了使不同器件封裝的外設(shè)I/O功能的數(shù)量達(dá)到最優(yōu),可以把一些復(fù)用功能重 新映射到其他一些引腳上。這可以通過軟件配置相應(yīng)的寄存器來完成(參考AFIO 寄存器描述)。這時(shí),復(fù)用功能就不再映射到它們的原始引腳上了。6 .GPIO的配置?先看GPIO.h文件typedef enum(GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz,GPIO_Spe
26、ed_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,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode
27、_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) = GPIO_Mode_Out_PP) | (MODE) = GPIO_Mode_AF_OD) | (MODE) = GPIO_Mode_AF_PP
28、)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 parameter can be a value of ref GPIOSpeed_TypeDef */ GPIOMode_TypeDef GPIO_M
29、ode;/*!< 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 GPIO_AFIODeInit(void);void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GP
30、IO_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(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);uint16_t GPIO_ReadOutputData(GPIO_TypeDef
31、* 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_TypeDef* GPIOx, uint16_t PortVal);void GPIO_PinLockConfig(GPIO_TypeDef* GPIO
32、x, uint16_t GPIO_Pin);void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_tGPIO_PinSource);void GPIO_EventOutputCmd(FunctionalState NewState);void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState);void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_tGPIO_PinSource);void GP
33、IO_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(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
34、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_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); else if (GPIOx = GPIOD) (RCC_APB2Peri
35、phResetCmd(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, DISABLE); else if (GPIOx = GPIOF) (RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF,
36、 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 "stm32f10x_lib.h"GPIO_InitTypeDef GPIO_InitStructure;ADC_Ini
37、tTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;ErrorStatus HSEStartUpStatus;extern vu32 TimingDelay;/* Private function prototypes */void RCC_Configuration(void);void NVIC_Configuration(void);void GPIO_Configuration(void);void Delay(vu32 nTime);void
38、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;Delay(800);GPIOC->ODR = 0xfffffd0f;Delay(800);GPIOC->ODR = 0xfffffe0f;Delay
39、(800);void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure PC. as Output push-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, &
40、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中斷程序配置?硬件中斷選擇:通過下面的過程來配置 19個(gè)線路做為中斷源:(1)配置19 個(gè)中斷線的屏蔽位(EXTI_IMR);(2)配置所選中斷線的觸發(fā)選擇位(EXTI_
41、RTSR和EXTI_FTSR);(3)配置那些控制映像到外部中斷控制器(EXTI)的NVIC中麗!道的使能和屏蔽位,使得19個(gè)中斷線中的請(qǐng)求可以被正確地響應(yīng)。?硬件事件選擇:通過下面的過程,可以配置19個(gè)線路為事件源(1)配置19 個(gè)事件線的屏蔽位(EXTI_EMR)(2)配置 事件線的觸發(fā)選擇位(EXTI_RTSR and EXTI_FTSR)?軟件中斷/事件的選擇:19個(gè)線路可以被而置成軟件中斷/事件線。下面是產(chǎn) 生軟件中斷的過程:(1) 配置19 個(gè)中斷/事件線屏蔽位(EXTI_IMR, EXTI_EMR)(2)設(shè)置軟件中斷寄存器的請(qǐng)求位(EXTI_SWIER)總中斷控制函數(shù) STM32
42、1| f111 fstm32flOx_nvic.cOx_nvic.h)定義了四個(gè)函數(shù)操作PRIMASI?它和FAULTMAS曲,茂 變CPU的當(dāng)前優(yōu)先級(jí),從而達(dá)到控制所仃中斷的1=1的士»卜而兩個(gè)函數(shù)等效于關(guān)閉總中斷:void NVIC_SETPRIMASK (void): void NVIC_SETFAULTMASK (void) ?»卜面兩個(gè)函數(shù)等效于開放總中斷:void NVIC RESETPRIMASK (void) ?void NVIC RESETFAULTMASK(void);注意事項(xiàng)上面兩組函數(shù)要成對(duì)使用,不能支叉使用, 5TM32中的中斷源很多,最好能夠安排
43、好分頭控.|不建議這樣|控制口8 .在STM32F103K 三個(gè)不同的時(shí)鐘源可以用來驅(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í)器,分三類: 通用定時(shí)器(General Purpose Timers ): TIM2-TIM5基本定時(shí)器(Basic Timers ): TIM6、TIM7 高級(jí)定時(shí)器(AdvancedControl Timers) TIM1、TIM8(大容量 STM32F103/107 獨(dú)有)10 .定時(shí)器可以作為計(jì)數(shù)器使用,區(qū)別在于:定時(shí)器使用微控制器的時(shí)鐘來計(jì)數(shù) 計(jì)數(shù)器使用的是外部信號(hào)計(jì)數(shù)
44、【從功能上來看:基本定時(shí)器是通用定時(shí)器的子集,通用定時(shí)器又是高級(jí)定時(shí) 器的子集。】11 .定時(shí)器的計(jì)數(shù)模式:向上計(jì)數(shù)模式:從0遞增,計(jì)到TIMx_AR研數(shù)器的自動(dòng)裝載值,并產(chǎn)生計(jì)數(shù)溢出脈沖; 向下計(jì)數(shù)模式:從TIMx_AR初數(shù)器的自動(dòng)裝載值遞減,計(jì)到 0 ,并產(chǎn)生計(jì)數(shù)溢出脈沖;中心對(duì)稱計(jì)數(shù)模式:從0遞增,計(jì)到TIMx_AR初數(shù)器的自動(dòng)裝載值,并產(chǎn) 生計(jì)數(shù)溢出脈沖;然后,從TIMx_AR初數(shù)器的自動(dòng)裝載值遞減,計(jì)到0 ,又產(chǎn) 生計(jì)數(shù)溢出脈沖;之后又從0開始循環(huán)計(jì)數(shù)。12 .定時(shí)器的設(shè)置:#include "stm32f10x_heads.h"#include "He
45、lloRobot.h"void Timx_Init(void);int main(void)BSP_Init();Timx_Init();/定時(shí)器初始化函數(shù)while (1) ;void Timx_Init(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_DeInit(TIM2);/ 復(fù)位 TIM2 定時(shí)器TIM_TimeBaseStructure.TIM_Period = 35999;TIM_TimeBaseStructure.TIM_Prescaler = 1999;TIM_TimeBaseStructure.TIM
46、_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);TIM_ClearFlag(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_13)=0)GPIO_SetBits(GPIOC, GP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版龍門吊租賃及吊裝作業(yè)風(fēng)險(xiǎn)分擔(dān)協(xié)議3篇
- 二零二五年四人共同經(jīng)營民宿的合伙協(xié)議書
- 二零二五年度出租車車輛租賃與智能駕駛技術(shù)研發(fā)合同3篇
- 二零二五年度展會(huì)現(xiàn)場(chǎng)搭建及展品運(yùn)輸合同3篇
- 2025年度高空作業(yè)安全防護(hù)施工合同范本4篇
- 二零二五年度城市綠化養(yǎng)護(hù)承包合同范本8篇
- 2025年度電動(dòng)汽車充電樁安全檢測(cè)與維護(hù)服務(wù)合同3篇
- 2025年新媒體營銷活動(dòng)合作協(xié)議范本2篇
- 2025年度泥瓦工勞務(wù)分包合同工期延誤責(zé)任協(xié)議
- 2025版農(nóng)業(yè)機(jī)械銷售訂購合同(年度版)3篇
- 2024年合肥市廬陽區(qū)中考二模英語試題含答案
- 質(zhì)檢中心制度匯編討論版樣本
- 藥娘激素方案
- 提高靜脈留置使用率品管圈課件
- GB/T 10739-2023紙、紙板和紙漿試樣處理和試驗(yàn)的標(biāo)準(zhǔn)大氣條件
- 《心態(tài)與思維模式》課件
- C語言程序設(shè)計(jì)(慕課版 第2版)PPT完整全套教學(xué)課件
- 行業(yè)會(huì)計(jì)比較(第三版)PPT完整全套教學(xué)課件
- 高考英語語法填空專項(xiàng)訓(xùn)練(含解析)
- 危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化課件
- 《美的歷程》導(dǎo)讀課件
評(píng)論
0/150
提交評(píng)論