




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
ARMCortex-M3嵌入式控制技術(shù)
——基于STM32F103RCT6
STM32F103硬件系統(tǒng)與KEILMDK工程第一章
嵌入式系統(tǒng)概述1嵌入式系統(tǒng)范例2嵌入式系統(tǒng)概念3ARM發(fā)展歷程及應用領域4嵌入式操作系統(tǒng)5μC/OS-II與μC/OS-III6
小結(jié)1.1嵌入式系統(tǒng)范例普遍認可的嵌入式系統(tǒng)的定義是:“以應用為中心,以計算機技術(shù)為基礎,軟硬件可裁剪,滿足應用系統(tǒng)對功能、可靠性、成本、體積和功耗等嚴格要求的專用計算機系統(tǒng)”4實例:飯水機的整個控制系統(tǒng)是一種典型的嵌入式系統(tǒng),其核心是STM32F103RCT6等微控制器芯片,這里用STM32F103表示,通過各種外部設備和傳感器實現(xiàn)飲水機的智能控制,如右圖所示1.2嵌入式系統(tǒng)概念數(shù)字技術(shù)和軟件技術(shù)是嵌入式系統(tǒng)的核心技術(shù),其中,數(shù)字技術(shù)包括數(shù)字信號處理技術(shù)和數(shù)字化芯片技術(shù),軟件技術(shù)包括芯片級的程序設計技術(shù)和操作系統(tǒng)級的程序設計技術(shù)。嵌入式系統(tǒng)與ARM的關(guān)系廣義上,凡是嵌入到應用系統(tǒng)中的電子系統(tǒng)都可以統(tǒng)稱為嵌入式系統(tǒng),即使是通用的計算機系統(tǒng),如果被嵌入在特定的應用系統(tǒng)中,也可被稱為嵌入式系統(tǒng)狹義上,嵌入式系統(tǒng)除了具有硬件和軟件之外,還要求硬件系統(tǒng)具有體積小、重量輕、功耗低、成本低、可靠性高、可升級等特點,要求軟件系統(tǒng)具有體積小、可裁剪性、健壯性、專用性、實時性等特點從狹義上講,嵌入式系統(tǒng)硬件往往是以ARM芯片為核心的硬件平臺,嵌入式系統(tǒng)軟件為基于芯片級開發(fā)的無操作系統(tǒng)匯編或C語言實時性軟件,或者是基于嵌入式實時操作系統(tǒng)開發(fā)的圖形界面應用程序6嵌入式系統(tǒng)與ARM的關(guān)系ARM是指ARM公司設計的基于RISC(精簡指令集計算機)架構(gòu)的32位高性能微處理器,一般采用哈佛總線結(jié)構(gòu),具有高速指令緩存和數(shù)據(jù)緩存,指令長度固定且多級流水執(zhí)行,具有MMU(存儲器管理單元)和AMBA(高級微處理器總線結(jié)構(gòu))總線接口等狹義上,嵌入式系統(tǒng)除了具有硬件和軟件之外,還要求硬件系統(tǒng)具有體積小、重量輕、功耗低、成本低、可靠性高、可升級等特點,要求軟件系統(tǒng)具有體積小、可裁剪性、健壯性、專用性、實時性等特點7嵌入式系統(tǒng)與嵌入式操作系統(tǒng)的關(guān)系嵌入式操作系統(tǒng)也具有桌面操作系統(tǒng)的特點,即管理硬件資源、調(diào)度軟件進程、處理軟件中斷等,嵌入式操作系統(tǒng)通常包括硬件驅(qū)動軟件、系統(tǒng)內(nèi)核、設備驅(qū)動接口、文件系統(tǒng)、圖形界面、網(wǎng)絡通信協(xié)議、USB驅(qū)動協(xié)議等。流行的嵌入式操作系統(tǒng)有:WindowsCE嵌入式LinuxμC/OS-IIVxWorks嵌入式系統(tǒng)是面向特定應用和環(huán)境、集成硬件和軟件的單板機,嵌入式系統(tǒng)的硬件資源有限,突出地表現(xiàn)在其具有較小容量的RAM和ROM空間,通過外擴SD卡等存儲介質(zhì)擴展存儲空間;直接基于ARM芯片開發(fā)的匯編或C語言實時性程序為嵌入式系統(tǒng)定制多任務、實時的嵌入式操作系統(tǒng)8嵌入式系統(tǒng)=ARM硬件系統(tǒng)+嵌入式操作系統(tǒng)+操作系統(tǒng)級應用軟件系統(tǒng)嵌入式系統(tǒng)=ARM硬件系統(tǒng)+芯片級應用軟件系統(tǒng)嵌入式系統(tǒng)研發(fā)特點9嵌入式系統(tǒng)研發(fā)需要具備電子類和軟件類兩方面的專門知識,是一門交叉組合型學科。嵌入式系統(tǒng)研發(fā)可分為四類:嵌入式系統(tǒng)的硬件平臺設計,需要根據(jù)應用環(huán)境選擇合適的ARM芯片,滿足處理速度和存儲深度的要求,同時,需要兼顧性價比和芯片特點與生存周期等因素基于ARM芯片的芯片級匯編或C語言程序設計,要求設計者對ARM芯片工作原理和內(nèi)部結(jié)構(gòu)有較好的認識和理解,這類程序包括系統(tǒng)初始化程序和特定功能的算法程序,需要對匯編語言和指令以及C語言編程有一定的基礎嵌入式操作系統(tǒng)的定制和驅(qū)動程序的開發(fā),這類研發(fā)已經(jīng)完全商業(yè)化基于嵌入式操作系統(tǒng)開發(fā)用戶應用程序,特別是開發(fā)具有良好圖形界面的用戶應用程序,是對設計者的一個挑戰(zhàn)?;诓煌那度胧讲僮飨到y(tǒng),開發(fā)應用程序的方式有很大的不同1.3ARM發(fā)展歷程及應用領域版本典型微處理器類型特點ARMv1~ARMv4(1990年ARM公司成立)已退市早期的版本中只有ARMv4,目前在某些ARM7和StrongARM處理器中可見,可以被視為32位尋址的32位指令集體系結(jié)構(gòu)ARMv4T(1995年)ARM7TDMI、ARM7TDMI-S、ARM920T、ARM922T支持16位的Thumb指令集,比32位的ARM指令集節(jié)省約35%的存儲空間ARMv5TE(1999年)ARM946E-S、ARM966E-S、ARM968E-S、ARM996HS增加了ARM與Thumb狀態(tài)切換的指令,增強了DSP類型指令,尤其是在語音數(shù)字信號處理方面提高了70%以上的性能ARMv5TEJ(2000年)ARM7EJ-S、ARM926EJ-S、ARM1026EJ-S添加了Java加速技術(shù)ARMv6(2001年)ARM1176JZ(F)-S改進了異常處理,更好地支持多處理器指令,增加了支持SIMD(單指令多數(shù)據(jù))的多媒體指令,對視頻和音頻解碼性能提高近4倍ARMv6T2ARM1156T2(F)-S支持Thumb-2技術(shù)ARMv7Cortex-A8、Cortex-A9、Cortex-R4(F)支持NEON技術(shù),使得DSP和多媒體處理性能提高4倍,支持向量浮點運算,為下一代3D圖像和游戲硬件服務ARMv7-MCortex-M3優(yōu)化了微控制器,低功耗ARM7TDMI內(nèi)核結(jié)構(gòu)ARM9微處理器系列ARM9E內(nèi)核結(jié)構(gòu)ARM10E微處理器系列ARM11內(nèi)核結(jié)構(gòu)1.4嵌入式操作系統(tǒng)14嵌入式操作系統(tǒng)是嵌入式系統(tǒng)的操作系統(tǒng),通常被設計得非常緊湊有效,拋棄了運行在它們之上的特定應用程序所不需要的各種功能。嵌入式操作系統(tǒng)負責嵌入式系統(tǒng)的全部軟、硬件資源的分配和調(diào)度工作,控制協(xié)調(diào)并發(fā)活動,且能通過裝卸某些軟件模塊以實現(xiàn)系統(tǒng)所要求的功能。實時系統(tǒng)是對邏輯和時序要求非常嚴格的系統(tǒng),如果邏輯和時序出現(xiàn)偏差,將會引起嚴重后果。即實時系統(tǒng)是必須能在確定的時間內(nèi)執(zhí)行特定功能,并能對外部的異步事件做出響應的計算機系統(tǒng),實時系統(tǒng)對響應時間有嚴格要求。實時多任務操作系統(tǒng)是指具有多任務調(diào)度和資源管理功能的實時系統(tǒng),即所謂的嵌入式操作系統(tǒng),它往往具有以下特點:實時性,即在確定的時間內(nèi)執(zhí)行特定功能和對中斷做出響應。體積小,一般為幾KB到幾百KB。可裁剪,即嵌入式操作系統(tǒng)采用模塊化設計,可根據(jù)需要選擇特定的功能模塊。健壯性,即具有極強的運行穩(wěn)定性??梢浦残裕纯梢赃\行于多種嵌入式系統(tǒng)平臺上。可固化性,即嵌入式操作系統(tǒng)可固化在嵌入式系統(tǒng)的Flash芯片內(nèi)。提供設備驅(qū)動和應用程序接口,即用戶可以借助嵌入式操作系統(tǒng)使用和管理系統(tǒng)資源。提供圖形用戶界面和網(wǎng)絡功能。有些嵌入式操作系統(tǒng)提供了友好的圖形用戶界面(GUI)和網(wǎng)絡支持。WindowsCE優(yōu)點:15具有美觀的圖形用戶界面,而且該界面與桌面Windows系統(tǒng)一脈相承,使得操作直觀簡單。開發(fā)基于WindowsCE的應用程序相對簡單,因為WindowsCE的API函數(shù)集是桌面Windows系統(tǒng)API函數(shù)的子集,熟悉桌面Windows程序設計的程序員可以很快地掌握WindowsCE應用程序的設計方法,所以,WindowsCE應用程序的開發(fā)成本較低。WindowsCE的文件管理功能非常強大,支持桌面Windows系統(tǒng)下的FAT、FAT32等文件系統(tǒng)。WindowsCE的可移植性較好。WindowsCE下的設備驅(qū)動程序開發(fā)相對容易。WindowsCE的電源管理功能較好,主要體現(xiàn)在WindowsPhone上。WindowsCE的進程管理和中斷處理機制較好。WindowsCE支持桌面Windows系統(tǒng)的眾多文檔格式,例如Word和Excel等,這種兼容性方便桌面Windows用戶在WindowsCE設備上處理文檔和數(shù)據(jù)。VxWorks特點:16可靠性極高。VxWorks通過了Do-178B、ARINC653和IEC61508等平臺嚴格的安全性驗證,因而它主要應用于軍事、航空、航天等對安全性和實時性要求極高的場合。穩(wěn)定性和可靠性高是VxWorks最受歡迎的特點。實時性好。實時性是指能夠在限定時間內(nèi)執(zhí)行完規(guī)定功能并對外部異步事件做出響應的能力。VxWorks系統(tǒng)實時性極好,系統(tǒng)本身開銷很少,進程調(diào)度、進程間通信、中斷處理等系統(tǒng)程序精煉有效,造成的任務切換延時很短,提供了優(yōu)先級搶先式和時間片輪換方式多任務調(diào)度,使硬件系統(tǒng)發(fā)揮最好的實時性。例如,美國的F-16戰(zhàn)斗機、B-2隱形轟炸機和愛國者導彈,甚至1997年的火星探測器上也使用了VxWorks系統(tǒng)??刹眉粜院?。VxWorks內(nèi)核只有8KB,其他系統(tǒng)模塊可根據(jù)需要定制,使得VxWorks系統(tǒng)具有靈活的可裁剪性能,既可用于極小型單片系統(tǒng),也可用于大規(guī)模網(wǎng)絡系統(tǒng)。VxWorks的存儲腳本(MemoryFootprint)可以指定系統(tǒng)運行內(nèi)存空間大小(這里的存儲腳本可理解為基于VxWorks的應用程序可執(zhí)行代碼)。開發(fā)環(huán)境友好?;趫D形化的集成開發(fā)環(huán)境WindRiverStudio,可開展基于VxWorks和WindRiverLinux系統(tǒng)應用的工程開發(fā)。WindRiverStudio是一個完備的設計、調(diào)試、仿真和工程集成解決方案。嵌入式Linux特點:17嵌入式Linux是完全開源的,因此它廣泛應用于高校教學。研究嵌入式Linux代碼的專家、學者遠比其他操作系統(tǒng)都多,而且Internet上的資源豐富,也有大量的圖書、資料,使得學習Linux系統(tǒng)的代價最小。嵌入式Linux是免費的,不涉及任何版權(quán)和專利。這一點被商界所看重。因此,大部分嵌入式產(chǎn)品在初期都使用過嵌入式Linux版本。嵌入式Linux被很多團體和組織二次開發(fā)后,形成具有獨立知識產(chǎn)權(quán)的嵌入式操作系統(tǒng),所以,嵌入式Linux變種系統(tǒng)非常多,如WindRiverLinux和μCLinux等。嵌入式Linux與QT相結(jié)合,使嵌入式Linux具有良好的圖形人機界面,甚至可以和WindowsCE相媲美,而且QT目前也是開源的。嵌入式Linux的移植能力強,不需要微控制器具有MMU功能,其變種形式幾乎可應用于所有主流嵌入式系統(tǒng)中。嵌入式Linux對外設的驅(qū)動能力很強,驅(qū)動接口程序設計相對容易,網(wǎng)絡上有大量常用設備的驅(qū)動代碼可供參考借鑒。嵌入式Linux在內(nèi)核、文件系統(tǒng)、網(wǎng)絡支持等方面均有突出的特點。最新的Linux內(nèi)核,具有200多萬行源代碼,可支持32個CPU,實時性顯著提高(但嚴格意義上不是實時操作系統(tǒng)),采用了更有效的任務調(diào)度器,增加了對多種嵌入式處理器的支持,在多媒體和網(wǎng)絡通信方面也有很大提高。1.5μC/OS-II特點:18μC/OS-II具有優(yōu)秀的可移植性。μC/OS-II的絕大部分源代碼由C語言寫成,只有一小部分與處理器相關(guān)的移植代碼使用匯編語言編寫,匯編語言代碼量壓縮到最低限度。μC/OS-II系統(tǒng)可固化在嵌入式系統(tǒng)的Flash中。μC/OS-II系統(tǒng)可裁剪。通過μC/OS-II系統(tǒng)的OS_CFG.H配置文件可以有選擇地使用μC/OS-II系統(tǒng)功能組件,μC/OS-II的可裁剪性是靠條件編譯實現(xiàn)的。μC/OS-II系統(tǒng)是可搶先型的實時內(nèi)核,即μC/OS-II總是執(zhí)行所有處于就緒狀態(tài)下優(yōu)先級最高的任務。μC/OS-II系統(tǒng)提供了信號量、互斥信號量、事件標志組、消息郵箱、消息隊列等多種服務組件,提供了用于時間管理和內(nèi)存管理的函數(shù),使用這些組件可方便地在任務間進行通信和同步。μC/OS-II系統(tǒng)具有很高的安全性和可靠性。1.5μC/OS-III特點:19μC/OS-III支持ARM7、ARM9、Cortex-M、Nios-II、PowerPC、Coldfire、Microblaze、SHx、M16C、M32C和Blackfin等微處理器。μC/OS-III支持無限多個任務,支持時間片輪換調(diào)度,不同任務的優(yōu)先級可以相同,優(yōu)先級號取值不受限制。由于μC/OS-III的任務個數(shù)不受限制,與任務相關(guān)的信號量、互斥信號量、事件標志組、消息隊列、定時器、內(nèi)存分區(qū)等的個數(shù)也不受限制,并且μC/OS-III允許受監(jiān)視的任務堆棧的空間可擴展,在使用時需要指定堆棧的安全空間大小,當堆棧使用的空間超過安全空間大小時向系統(tǒng)報警,這樣可有效地保護應用程序,不至于因堆棧訪問越界而使系統(tǒng)癱瘓。μC/OS-III支持多個任務具有相同的優(yōu)先級,當相同優(yōu)先級的幾個任務同時就緒時,μC/OS-III為每個任務分配用戶指定的CPU時間片,每個任務可定義它自己的時間片。μC/OS-III對中斷響應時間是確定的,進入臨界區(qū)的轉(zhuǎn)換時間(即關(guān)中斷時間)幾乎為0個時鐘周期。沒有裁剪的μC/OS-III系統(tǒng)約為24KB,最小配置的μC/OS-III系統(tǒng)只有6KB,內(nèi)核服務組件有10類,相關(guān)的應用程序接口(API)函數(shù)有80個。μC/OS應用領域:20汽車電子方面:發(fā)動機控制、防抱死系統(tǒng)(ABS)、全球定位系統(tǒng)(GPS)等;辦公用品:傳真機、打印機、復印機、掃描儀等;通信電子:交換機、路由器、調(diào)制解調(diào)器、智能手機等;過程控制:食品加工、機械制造等;航空航天:飛機控制系統(tǒng)、噴氣式發(fā)動機控制等;消費電子:MP3/MP4/MP5播放器、機頂盒、洗衣機、電冰箱、電視機等;機器人和武器制導系統(tǒng)等。第二章
STM32F103微控制器目錄STM32F103概述STM32F103RCT6管腳定義STM32F103架構(gòu)STM32F103存儲器STM32F103片內(nèi)外設STM32F103異常與中斷本章小結(jié)ARM(AdvancedRISCMachine,高級精簡指令集機器)也是ARM公司的注冊商標。目前,ARM公司主推的具有知識產(chǎn)權(quán)的內(nèi)核為Cortex-M系列,意法半導體獲得了Cortex-M系列內(nèi)核的授權(quán),推出了32位STM32微控制器。1STM32F1系列均集成了Cortex-M3內(nèi)核(所謂的內(nèi)核就是指傳統(tǒng)意義上的中央處理單元(CPU),包含運算器、控制器和總線陣列)。不失一般性,本書以具體的STM32F103RCT6型號芯片為例展開論述。本章內(nèi)容參考了STM32F103數(shù)據(jù)手冊和用戶參考手冊。2.1STM32F103概述2STM32F103RCT6芯片的主要特性如下:(1)集成了32位的ARMCortex-M3內(nèi)核,最高工作頻率可達72MHz,計算能力為1.25DMIPS/MHz(Dhrystone2.1),具有單周期乘法指令和硬件除法器;(2)具有512KB片內(nèi)FLASH存儲器和48KB片內(nèi)SRAM存儲器;(3)內(nèi)部集成了8MHz晶體振蕩器,可外接4~16MHz時鐘源;(4)2.0~3.6V單一供電電源,具有上電復位功能(POR);(5)具有睡眠、停止、待機等三種低功耗工作模式;(6)64管腳LQFP封裝(薄型四邊引線扁平封裝),適合學生手工焊裝;(7)內(nèi)部集成了11個定時器:4個16位的通用定時器,2個16位的可產(chǎn)生PWM波控制電機的定時器,2個16位的可驅(qū)動DAC的定時器,2個加窗的看門狗定時器和1個24位的系統(tǒng)節(jié)拍定時器(24位減計數(shù));3STM32F103概述4(8)2個12位的DAC和3個12位的ADC(16通道);(9)集成了內(nèi)部溫度傳感器和實時時鐘RTC;(10)具有51根高速通用輸入輸出口(GPIO),可從其中任選16根作為外部中斷輸入口,幾乎全部GPIO可承受5V輸入(PA0~PA7、PB0~PB1、PB5、PC0~PC5和PC13~PC15除外);(11)集成了13個外部通信接口:2個I2C、3個SPI(18Mbps,其中復用2個I2S)、1個CAN(2.0B)、5個UART、1個USB2.0設備和1個并行SDIO;(12)具有12通道的DMA控制器,支持定時器、ADC、DAC、SDIO、I2S、SPI、I2C和UART外設。(13)具有96位的全球唯一編號;(14)工作溫度為-40~85℃。STM32F103概述2.2STM32F103RCT6管腳定義5由左圖可知,芯片STM32F103RCT6包括3個16位的通用目的輸入/輸出口(GPIO),依次稱為PA、PB、PC,以及1個3位的GPIO口PD,幾乎每個GPIO口都復用了其他的功能。芯片STM32F103RCT6大部分引腳名稱的具體含義和用法在后面章節(jié)中介紹,其余的部分請參考STM32F103數(shù)據(jù)手冊和參考手冊。6STM32F103RCT6管腳定義2.3STM32F103架構(gòu)78STM32F103架構(gòu)9STM32F103架構(gòu)2.4STM32F103存儲器10STM32F103RCT6芯片是32位的微控制器,可尋址存儲空間大小為232=4GB,分為8個512MB的存儲塊,存儲塊0的地址范圍為0x0~0x1FFFFFFF。內(nèi)FLASH映射到地址空間0x08000000~0x0807FFFF(512kB),實際上只有低端256kB空間有效;系統(tǒng)存儲器(SystemMemory)映射到地址空間0x1FFFF000~0x1FFFF7FF(2kB),用戶選項字節(jié)(OptionBytes)映射到地址空間0x1FFFF800~0x1FFFF80F(16B)。同時,地址范圍0x0~0x7FFFF,根據(jù)啟動模式要求,可以作為FLASH或系統(tǒng)存儲器的別名訪問空間,例如,BOOT0=0時,片內(nèi)FLASH同時映射到地址空間0x0~0x7FFFF和地址空間0x08000000~0x0807FFFF,即地址空間0x0~0x7FFFF是FLASH存儲器(對于STM32F103RCT6而言,只有0x0~0x3FFFF有效)。除這些之外,其他的空間是保留的。11STM32F103存儲器盡管STM32F103RCT6微控制器具有兩個APB總線,且這兩個總線上的外設訪問速度不同,但是,芯片存儲空間中并沒有區(qū)別這兩個外設的訪問空間,而是把全部APB外設映射到存儲塊2中,每個外設的寄存器占據(jù)1kB大小的空間,如下表所示。除了表中的地址空間外,存儲塊2中其他空間是保留的。12STM32F103存儲器STM32F103RCT6芯片不支持訪問外部靜態(tài)存儲器,即無靜態(tài)存儲器(FSMC)服務,所以存儲塊3~6都是保留的。存儲塊7被Cortex-M3內(nèi)核的內(nèi)部外設占用。存儲區(qū)使用小端(Little-Endian)模式存儲,對于一個32位的字存儲區(qū),可存入字(32位)、半字(16位)或字節(jié)(8位)數(shù)據(jù),存入字數(shù)據(jù)時,字數(shù)據(jù)的低字節(jié)存入字存儲區(qū)的低地址,字數(shù)據(jù)的高字節(jié)存入字存儲區(qū)的高地址。13STM32F103存儲器2.5STM32F103片內(nèi)外設14STM32F103RCT6微控制器片內(nèi)具有多種高速總線,其中,指令總線,連接FLASH存儲器指令接口和Cortex-M3內(nèi)核;數(shù)據(jù)總線,連接FLASH存儲器數(shù)據(jù)接口和Cortex-M3內(nèi)核;系統(tǒng)總線,通過總線陣列與DMA、AHB和APB總線相連接;DMA總線連接DMA控制器和總線陣列;高性能總線通過AHB-APB橋與高級外設總線相連接,AHB總線與總線陣列相連接。復雜而高效的總線系統(tǒng)是STM32F103RCT6高性能的基本保障。15STM32F103片內(nèi)外設STM32F103RCT6微控制器的片內(nèi)外設有CRC(循環(huán)冗余校驗)計算單元、復位與時鐘管理單元、通用目的和替換功能輸入輸出口(GPIO和AFIO)單元、ADC、DAC、DMA控制器、高級控制定時器TIM1和TIM8、定時器、實時時鐘(RTC)、獨立看門狗(IWDG)定時器、窗口看門狗(WWDG)定時器、SDIO、USB設備、CAN總線、串行外設接口SPI、I2C接口、通用同步異步串行口USART、芯片唯一身份號寄存器(96位長)等。STM32F103RCT6芯片共有8個定時器,其中,TIM1和TIM8稱為高級控制定時器,TIM2~TIM5稱為通用定時器,TIM6和TIM7稱為基本定時器,如下表所示。16STM32F103片內(nèi)外設除了上述的片內(nèi)功能模塊外,STM32F103RCT6還具有與外部進行數(shù)據(jù)通信的外設模塊,這些模塊需要專用的通信時序和協(xié)議。2.6STM32F103異常與中斷17STM32F103RCT6微控制器具有10個異常和60個中斷,中斷優(yōu)先級為16級。異常與中斷的地址范圍為0x0~0x012C,如下表所示。18STM32F103異常與中斷19STM32F103異常與中斷20STM32F103異常與中斷21STM32F103異常與中斷22STM32F103異常與中斷2.7本章小結(jié)23本章詳細介紹了STM32F103RCT6微控制器的特點、引腳定義、內(nèi)部架構(gòu)、時鐘系統(tǒng)、存儲器配置等,簡要介紹了STM32F103RCT6微控制器的片內(nèi)外設以及異常與中斷管理等。
本章內(nèi)容是全書的硬件基礎,芯片的存儲器、片內(nèi)外設和中斷系統(tǒng)合稱為芯片的三要素,需要認真學習和掌握。建議在本章學習的基礎上,深入閱讀STM32F103芯片用戶手冊和參考手冊,達到全面掌握STM32F103RCT6微控制器硬件知識的目的,這需要一個月甚至更久的時間。在充分學習了STM32F103微控制器硬件知識之后,才能進一步學習并設計制作第3章基于STM32F103RCT6芯片的硬件學習平臺。本章小結(jié)thankyouARMCortex-M3嵌入式控制技術(shù)
——基于STM32F103RCT6
STM32F103硬件系統(tǒng)與KEILMDK工程第三章
STM32F103學習平臺1STM32F103核心電路2電源電路與按鍵電路3
LED與蜂鳴器驅(qū)動電路4串口通信電路5FLASH與EEPROM電路6溫濕度傳感器電路7LCD屏接口電路8JTAG與復位電路9聲碼器電路3.1STM32F103核心電路本書使用的計算機配置為IntelCoreI9-13900K處理器、32GB內(nèi)存、1TB硬盤、32寸液晶顯示屏和Windows11操作系統(tǒng),現(xiàn)有流行的計算機配置均可實現(xiàn)本書的學習與實驗工作。STM32F103學習實驗平臺:STM32F103RCT6學習實驗板實現(xiàn)了以下功能:52集成電源指示LED燈;具有復位按鍵;具有1個串口,可與計算機串口相連;支持SWD串行仿真調(diào)試;具有2個GPIO口直接相連的用戶按鍵輸入;具有3個GPIO口驅(qū)動的LED燈和1個蜂鳴器;具有ZLG7289B芯片驅(qū)動的8個LED燈、16個按鍵和1個四合一七段數(shù)碼管(帶時間顯示);具有1個DS18B20溫度傳感器;具有1個240×320點陣彩色TFT型LCD屏,帶有電阻式觸摸屏;支持1個ADC輸入口;具有1個128KB的EEPROM存儲器AT24C128;具有1個64Mb的Flash存儲器W25Q64;具有SYN6288聲碼器;+5V單電源供電。STM32F103RCT6核心電路533.2電源電路與按鍵電路3.3LED與蜂鳴器驅(qū)動電路JTAG電路和復位電路可視為STM32F103RCT6微控制器的最小系統(tǒng),即STM32F103RCT6微控制器的最小系統(tǒng)應包括電源電路、用戶按鍵電路、LED燈指示電路、復位電路(可內(nèi)部復位)、晶體振蕩器電路(可省略)和相應的STM32F103RCT6芯片核心電路。3.4串口通信TM32F103RCT6芯片的PA2和PA3通過網(wǎng)標TXD232和RXD232與芯片ST3232的T2IN和R2OUT相連接。ST3232電平轉(zhuǎn)換芯片支持2路串口,圖中僅使用了一路,J1為DB9接頭,通過串口線與計算機的串口相連實現(xiàn)異步串行通信。3.5FLASH與EEPROM電路EEPROM芯片AT24C128電路FLASH芯片W25Q64電路3.6溫度傳感器電路溫度傳感器DS18B20接口電路3.7復位電路、JTAG和ADC電路SWD串行調(diào)試只需要占用數(shù)據(jù)和時鐘兩個端口JTAG接口J5通過網(wǎng)標SWDIO和SWCLK與STM32F103RCT6芯片的SWDIO(PA13)和SWCLK(PA14)管腳相連接。3.8ZLG7289B電路TM32F103RCT6學習板上集成了一片ZLG7289B芯片,通過ZLG7289B可以驅(qū)動多個用戶按鍵和LED燈。一片ZLG7289B最多可同時驅(qū)動64個按鍵和64個LED燈,在STM32F103RCT6學習板上,使用ZLG7289B驅(qū)動了16個按鍵、8個LED燈和1個四合一七段數(shù)碼管。ZLG7289B電路-I3.8ZLG7289B電路ZLG7289B電路-IIZLG7289B電路-III3.8ZLG7289B電路ZLG7289B電路-IVZLG7289B電路-VZLG7289B模塊與STM32F103RCT6間有5個連接,即圖3-2中的網(wǎng)標7289INT、7289CLK、7289CS、7289DIO和USER_D3D4,占用了STM32F103RCT6的5個GPIO口,這里依次使用了PA12、PA11、PA8、PA13和PB103.9LCD屏接口電路STM32F103RCT6學習板上集成了一塊240×320像素分辨率TFT型LCD屏和一塊電阻式觸摸屏,其與STM32F103RCT6的電路連接如圖所示。3.10聲碼器電路STM32F103RCT6學習板集成了一塊SYN6288聲碼器,通過串口向其發(fā)送文本信息,聲碼器實現(xiàn)TTS(TexttoSpeech:文本轉(zhuǎn)化為語音)變換,其電路原理如圖所示。3.11參考電路板使用AltiumDesigner繪制了PCB圖,并制作了STM32F103RCT6學習板,選取了一塊沒有焊裝器件的電路板在繪圖所示電路板時,請注意:66電源線、地線的寬度應在20mil以上;信號線寬度在6mil以上,且長度不應超過7cm;過孔的外徑應大于24mil,內(nèi)徑應大于12mil,內(nèi)外徑差值不少于12mil;接插件應根據(jù)實際器件的針腳粗細設計內(nèi)徑,一般接插件的內(nèi)徑應為0.9mm;在PCB布局、布線完成后,應覆銅,且應使模擬地和數(shù)字地的銅皮在一點相連接;電阻和電容建議選用0805貼片封裝(除少數(shù)電解電容外);電路板上的標號應按從左向右或從下向上的方向擺放。thankyou第四章
LED燈控制與KEILMDK工程框架目錄STM32F103通用目的輸入輸出口STM32F103庫函數(shù)用法KeilMDK工程框架LED燈閃爍實例本章小結(jié)本章將介紹STM32F103RCT6微控制器的通用目的輸入/輸出口(GPIO)及其相關(guān)的寄存器,闡述STM32F103庫函數(shù)訪問GPIO口的方法,講述KeilMDK集成開發(fā)環(huán)境的應用技巧和工程框架設計,最后借助LED燈的閃爍實例詳細說明GPIO口的具體操作方法。而庫函數(shù)類型程序設計方法本質(zhì)上也是采用了寄存器類型程序設計方法,但是STM32芯片開發(fā)商(意法半導體)設計了訪問各種寄存器的庫函數(shù),使得應用STM32F103RCT6微控制器的程序開發(fā)人員通過調(diào)用庫函數(shù)實現(xiàn)相應的外設控制功能,而無需關(guān)心片上外設相關(guān)的寄存器及其地址。2STM32F103RCT6微控制器有兩種程序設計方法,即寄存器類型程序設計方法和庫函數(shù)類型程序設計方法。寄存器類型程序設計方法類似于傳統(tǒng)的單片機程序設計方法,借助于芯片的寄存器地址訪問寄存器,通過訪問寄存器實現(xiàn)相應的控制功能。4.1STM32F103通用目的輸入輸出口34STM32F103RCT6微控制器具有3個16位的GPIO口,記為Px(x=A,B,C),以及1個3位的GPIO口,記為PD,共占用了51個引腳,每根GPIO端口引腳的內(nèi)部結(jié)構(gòu)如下圖所示。STM32F103通用目的輸入輸出口5由上圖中的3個“開關(guān)”和“輸出控制”可知,GPIO端口具有以下工作模式:(1)輸入懸空(開關(guān)1和開關(guān)2均打開);(2)輸入上拉有效(開關(guān)1閉合、開關(guān)2打開);(3)輸入上拉和下拉均有效模式(開關(guān)1和開關(guān)2均閉合);(4)模擬輸入(開關(guān)1和開關(guān)2均打開、開關(guān)3關(guān)閉);(5)輸出開漏方式(當輸出高電平時,“輸出控制”關(guān)閉P-MOS管和N-MOS管;當輸出低電平時,“輸入控制”關(guān)閉P-MOS管并打開N-MOS管);STM32F103通用目的輸入輸出口6(6)輸出推挽方式(當輸出高電平時,“輸出控制”打開P-MOS管并關(guān)閉N-MOS管;當輸出低電平時,“輸出控制”關(guān)閉P-MOS管并打開N-MOS管);(7)替換功能輸入(開關(guān)1、開關(guān)2和開關(guān)3均關(guān)閉);(8)替換功能推挽輸出(當輸出高電平時,“輸出控制”打開P-MOS管并關(guān)閉N-MOS管;當輸出低電平時,“輸出控制”關(guān)閉P-MOS管并打開N-MOS管)。(9)替換功能開漏輸出(當輸出高電平時,“輸出控制”關(guān)閉P-MOS管和N-MOS管;當輸出低電平時,“輸出控制”關(guān)閉P-MOS管并打開N-MOS管)STM32F103通用目的輸入輸出口7每個GPIO口具有7個寄存器,即2個32位的配置寄存器(GPIOx_CRL和GPIOx_CRH)、2個32位的數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR),1個32位的置位/清零寄存器(GPIOx_BSRR)、1個16位的清零寄存器(GPIOx_BRR)和1個32位的配置鎖定寄存器(GPIOx_LCKR),這里x=A,B,C,D。端口配置寄存器GPIOx_CRL和GPIOx_CRH,分別如下面兩張圖所示:GPIO寄存器832位的端口置位/清零寄存器GPIOx_RSRR(偏移地址0x10,復位值為0x0),可以單獨置位或清零某個GPIO管腳。GPIOx_RSRR高16位的每位記為BRy(y=0,1,...,15),低16位的每位記為BSz(z=0,1,...,15),如下圖所示。GPIO寄存器9配置鎖定寄存器GPIOx_LCKR(偏移地址0x18,復位值為0x0),用于鎖定配置寄存器GPIOx_CRL和GPIOx_CRH的值,如下圖所示。GPIO寄存器10APB2外設復位寄存器RCC_APB2RSTR(復位值為0x0)和APB2外設時鐘有效寄存器RCC_APB2ENR(復位值為0x0)分別如下面兩張圖所示。GPIO寄存器11AFIO寄存器的基地址為0x40010000,STM32F103RCT6共包括7個AFIO寄存器(復位值均為0x0),即事件控制寄存器AFIO_EVCR(偏移地址0x0)、替換功能重映射寄存器AFIO_MAPR(偏移地址0x04)、外部中斷配置寄存器AFIO_EXTICR1(偏移地址0x08)、外部中斷配置寄存器AFIO_EXTICR2(偏移地址0x0C)、外部中斷配置寄存器AFIO_EXTICR3(偏移地址0x10)、外部中斷配置寄存器AFIO_EXTICR4(偏移地址0x14)和替換功能重映射寄存器AFIO_MAPR2(偏移地址0x1C)。下面依次詳細介紹這些寄存器各位的含義。AFIO寄存器12事件控制寄存器AFIO_EVCR,如下表所示。AFIO寄存器13替換功能重映射寄存器AFIO_MAPR如下表所示。AFIO寄存器14外部中斷配置寄存器AFIO_EXTICR1、AFIO_EXTICR2、AFIO_EXTICR3和AFIO_EXTICR4的含義如下表所示。AFIO寄存器4.2STM32F103庫函數(shù)用法1516了解了STM32F103RCT6的GPIO寄存器,就可以操作GPIO口了。例如,令PB5(即GPIOB的第5腳)輸出高電平,可以使用語句“GPIOB->ODR|=(1uL<<5);”或“GPIOB->BSRR=(1uL<<5);”實現(xiàn)。這里的GPIOB是定義在文件stm32f10x.h中的結(jié)構(gòu)體指針,如右面的程序段所示。STM32F103庫函數(shù)用法17事實上,文件stm32f10x.h中宏定義了STM32F103RCT6微控制器的各種片內(nèi)外設的寄存器結(jié)構(gòu)體指針,可以直接使用。文件stm32f10x.h是由KeilMDK自動產(chǎn)生的。如果不使用stm32f10x.h文件中的寄存器結(jié)構(gòu)體指針,則需要自行定義各個寄存器,例如,對于地址為0x40010C0C的寄存器GPIOB_ODR,如下面的程序段所示。STM32F103庫函數(shù)用法18除了寄存器類型程序外,STM32F103還支持一種抽象的程序類型,稱為借助庫函數(shù)的工程程序,簡稱庫函數(shù)類型程序。庫函數(shù)相關(guān)的文件如下表所示。STM32F103庫函數(shù)用法19庫函數(shù)全部的文件都是開源的C語言代碼,常量定義和函數(shù)聲明位于.h文件中,函數(shù)體位于.c文件中。例如,在stm32f10x_gpio.h中有以下宏定義語句和函數(shù)聲明:STM32F103庫函數(shù)用法而在相應的stm32f10x_gpio.c文件中有以下函數(shù):4.3KeilMDK工程框架2021本書使用了KeilMDKv5.39集成開發(fā)環(huán)境(官網(wǎng)),是截止本書收官時的最新版本,本書中的全部工程都可以使用于KeilMDKv5.39及其后續(xù)版本。KeilMDK工程框架22KeilMDK工程框架23KeilMDK工程框架24KeilMDK工程框架25KeilMDK工程框架4.4LED燈閃爍實例2627在STM32F103RCT6學習板上集成了3個LED燈,下如圖所示。由圖可知,LED燈D9由PB2控制,LED燈D10由PD2控制,LED燈D11由PB7控制。下面介紹LED燈閃爍控制的工程設計實例。LED燈閃爍實例28對于STM32F103RCT6學習板而言,將下面的程序段中的函數(shù)替換系統(tǒng)文件system_stm32f10x.c中的同名函數(shù)SetSysClockTo72,將芯片的工作時鐘調(diào)整到64MHz。LED燈閃爍實例29LED燈閃爍實例“工程管理器”中的分組名與子文件夾的名稱是相同的,但是二者沒有聯(lián)系,分組名可以使用各種符號和漢字。30下面依次介紹工程PRJ01中的各個文件。LED燈閃爍實例31LED燈閃爍實例32LED燈閃爍實例33LED燈閃爍實例由下圖所示,工程PRJ01上電復位后,首先執(zhí)行位于文件system_stm32f10x.c中的SystemInit函數(shù),用于將STM32F103RCT6的時鐘由8MHz調(diào)整到64MHz;然后轉(zhuǎn)到main函數(shù)執(zhí)行;進入到main函數(shù)后,首先調(diào)用LEDInit函數(shù)初始化LED燈的控制;接著進入無限循環(huán)體,依次循環(huán)執(zhí)行“LED燈D9亮、D10滅、D11亮——延時約1秒——LED燈D9滅、D10亮、D11滅——延時約1秒”。其中,各個LED燈的亮和滅是由main函數(shù)調(diào)用led.c文件中的LED函數(shù)實現(xiàn)的,延時函數(shù)Delay位于主文件main.c中,由for循環(huán)實現(xiàn)。34LED燈閃爍實例本小節(jié)借助調(diào)用庫函數(shù)的方式實現(xiàn)工程PRJ01的功能。在工程“PRJ01”基礎上新建工程“PRJ02”,保存在目錄“D:\STM32F103RCT6PRJ”下,此時的工程“PRJ02”與工程“PRJ01”完全相同。35LED燈閃爍實例這里添加了宏定義常量USE_STDPERIPH_DRIVER是因為在文件stm32f10x.h中有以下語句:由于庫函數(shù)文件是針對STM23F10x全系列的微控制器,宏定義常量STM32F10X_HD表示僅使得那些與STM32F103RCT6相關(guān)的常量和函數(shù)有效。36LED燈閃爍實例37LED燈閃爍實例相對于工程PRJ01中的文件,工程PRJ02只需要修改led.c文件,如下面的程序段所示:38LED燈閃爍實例39LED燈閃爍實例這里的類型GPIO_InitTypeDef定義在庫函數(shù)頭文件stm32f10x_gpio.h中,如下所示:4.5本章小結(jié)4041本章小結(jié)本章介紹了STM32F103RCT6微控制器的GPIO口結(jié)構(gòu)及其寄存器,同時,也討論了替換功能AFIO的寄存器以及復位與時鐘控制模塊中與GPIO口相關(guān)的寄存器。然后,闡述了庫函數(shù)的用法,并討論了寄存器類型的工程與庫函數(shù)類型的工程的區(qū)別。最后,介紹了KeilMDK工程框架,以LED燈閃爍為例,詳細介紹了寄存器類型工程和庫函數(shù)類型工程的程序設計方法。對于庫函數(shù)類型工程,需要初學者有一個長時間的適應過程,需要花一定的時間學習庫函數(shù)文件和頭文件。thankyouARMCortex-M3嵌入式控制技術(shù)
——基于STM32F103RCT6
STM32F103硬件系統(tǒng)與KEILMDK工程第五章
按鍵與中斷處理
本章將介紹嵌套向量中斷控制器NVIC的工作原理,闡述STM32F103RCT6微控制器外部輸入中斷的工作原理。接著,以用戶按鍵為例,詳細解釋NVIC中斷的寄存器類型和庫函數(shù)類型的程序設計方法。然后,介紹ZLG7289B芯片驅(qū)動LED燈、按鍵和數(shù)碼管的原理和程序設計方法1NVIC中斷工作原理2GPIO外部輸入中斷3
用戶按鍵中斷實例4ZLG7289B按鍵、LED燈和數(shù)碼管5.1NVIC中斷工作原理嵌套向量中斷控制器NVIC相關(guān)的中斷管理工作主要有開放中斷、關(guān)閉中斷、設置中斷請求標志、讀中斷請求標志、清除中斷請求標志和配置中斷優(yōu)先級等。嵌套向量中斷控制器NVIC的寄存器有ISER0、ISER1、ICER0、ICER1、ISPR0、ISPR1、ICPR0、ICPR1、IABR0、IABR1、IPR0~IPR14和STIRNVIC寄存器序號地址寄存器名稱描述10xE000E100ISER0中斷開放寄存器ISER0[0]~ISER0[31]、ISER1[0]~ISER1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1開放中斷0xE000E104ISER120xE000E180ICER0中斷關(guān)閉寄存器ICER0[0]~ICER0[31]、ICER1[0]~ICER1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1關(guān)閉中斷0xE000E184ICER130xE000E200ISPR0中斷設置請求狀態(tài)寄存器ISPR0[0]~ISPR0[31]、ISPR1[0]~ISPR1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1請求中斷0xE000E204ISPR140xE000E280ICPR0中斷清除請求狀態(tài)寄存器ICPR0[0]~ICPR0[31]、ICPR1[0]~ICPR1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1清中斷標志0xE000E284ICPR150xE000E300IABR0中斷活躍位寄存器(只讀)IABR0[0]~IABR0[31]、IABR1[0]~IABR1[27]依次對應中斷號為0~59的中斷,各位讀出1,表示相應中斷活躍0xE000E304IABR160xE000E400~0xE000E438IPR0~IPR14中斷優(yōu)先級寄存器共有16個優(yōu)先級,優(yōu)先級號從0~15,優(yōu)先級號0表示的優(yōu)先級最高,優(yōu)先級號15表示的優(yōu)先級最低70xE000EF00STIR軟件觸發(fā)中斷寄存器第[8:0]位域有效,寫入0~59中的某一中斷號,則觸發(fā)相應的中斷中斷優(yōu)先級配置寄存器每個IPR寄存器用于設置4個NVIC中斷的優(yōu)先級,32位的IPR寄存器的4個字節(jié)的低4位均無效,只有高4位有效,故可以設置的優(yōu)先級號為0~15。根據(jù)圖5-1,如果設置EXTI2中斷的優(yōu)先級號為10,則需要將IPR2的第[7:4]位域設為10。當兩個中斷具有不同的優(yōu)先級號時,優(yōu)先級號小的中斷優(yōu)先級高;當兩個中斷具有相同的優(yōu)先級號時,中斷號小的中斷優(yōu)先級高。異常號4~15的優(yōu)先級配置寄存器可配置優(yōu)先級的異常的優(yōu)先級號由3個系統(tǒng)手柄優(yōu)先級寄存器(SHPR1~3)設置,其地址依次為0xE000ED18、0xE000ED1C和0xE000ED20序號異常號異常名稱位域配置名稱寄存器14MemManage[7:0]PRI_4SHPR125BusFault[15:8]PRI_536UsageFault[23:16]PRI_647保留[31:24]PRI_758保留[7:0]PRI_8SHPR269保留[15:8]PRI_9710保留[23:16]PRI_10811SVCall[31:24]PRI_11912DebugMonitor[7:0]PRI_12SHPR31013保留[15:8]PRI_131114PendSV[23:16]PRI_141215SysTick[31:24]PRI_155.2GPIO外部輸入中斷根據(jù)寄存器AFIO_EXTICR1~4(見第4章表4-3),可從GPIO口中選擇16個管腳配置為16個外部中斷的輸入端,如圖5-2所示。注意:對于STM32F103RCT6芯片,只有PA、PB、PC和PD[2:0]有效,其余管腳無效。EXTI模塊共有19根線路,除了外部中斷EXTI0~EXTI15外,還有EXTI16、EXTI17和EXTI18,這三根線路分別與PVD輸出、RTC報警事件和USB喚配事件相連接。EXTI模塊有共6個寄存器,即中斷屏蔽寄存器EXTI_IMR、事件屏蔽寄存器EXTI_EMR、上升沿觸發(fā)選擇寄存器EXTI_RTSR、下降沿觸發(fā)選擇寄存器EXTI_FTSR、軟件觸發(fā)事件寄存器EXTI_SWIER和中斷請求寄存器EXTI_PR。EXTI模塊寄存器的基地址為0x40010400。5.3用戶按鍵中斷實例STM32F103RCT6微控制器的PA6和PA7依次借助網(wǎng)絡標號USER_BUT1和USER_BUT2與按鍵S18和S19相連接;PB1與網(wǎng)絡標號USER_BELL相連接,控制蜂鳴器B2的開啟與關(guān)閉。本節(jié)擬設計工程,實現(xiàn)如下功能:(1)S18按鍵作為外部中斷EXTI6輸入端,當按下S18按鍵時,點亮LED燈D11;(2)S19按鍵作為外部中斷EXTI7輸入端,當按下S19按鍵時,熄滅LED燈D11。同時,如果蜂鳴器原來是開啟的,則關(guān)閉蜂鳴器;否則,開啟蜂鳴器。5.3.1寄存器類型工程實例在工程PRJ01的基礎上,新建工程“PRJ03”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ03”下,此時的工程PRJ03與工程PRJ01完全相同?,F(xiàn)在,修改main.c和includes.h文件,并新建bsp.c、bsp.h、beep.c、beep.h、key.c、key.h、exti.c和exti.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ03\BSP”下),然后,將bsp.c、beep.c、key.c和exti.c文件添加到“BSP”分組下,建設好的工程如圖所示。代碼:122代碼:123代碼:124工程PRJ03的工作流程工程PRJ03運行到主函數(shù)main后,執(zhí)行BSPInit函數(shù)初始化LED燈、按鍵、蜂鳴器和外部中斷等外設,然后進行無限循環(huán)體,執(zhí)行LED燈D9和D10的循環(huán)閃爍功能。工程PRJ03中有1個中斷服務函數(shù),當按鍵S18被按下時,執(zhí)行EXTI9_5_IRQHandler中斷服務函數(shù),點亮LED燈D11;當按鍵S19被按下時,也觸發(fā)執(zhí)行EXTI9_5_IRQHandler中斷服務函數(shù),熄滅LED燈D11,同時,使蜂鳴器切換工作狀態(tài)5.3.2庫函數(shù)類型工程實例本小節(jié)討論的工程與第5.3.1節(jié)的工程PRJ03實現(xiàn)的功能完全相同,這里使用庫函數(shù)方式進行工程設計。在工程PRJ02的基礎上,新建工程“PRJ04”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ04”下,此時的工程PRJ04與工程PRJ02完全相同,需要做的修改為:(1)修改文件main.c和includes.h;(2)新建文件bsp.c、bsp.h、key.c、key.h、beep.c、beep.h、exti.c和exti.h,新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ04\BSP”下;(3)將bsp.c、key.c、beep.c和exti.c文件添加到工程管理器的“BSP”分組下;(4)將位于目錄“D:\STM32F103RCT6PRJ\PRJ04\STM32F10x_FWLib\src”下的庫文件stm32f10x_exti.c添加到工程管理器的“LIB”分組下。建設好的工程PRJ04如圖所示。代碼:127代碼:128代碼:1295.4.1ZLG7289B工作原理嵌入式控制系統(tǒng)中最常用的部件是按鍵和七段數(shù)碼管,用作系統(tǒng)的輸入設備和輸出設備,ZLG7289B為專用于驅(qū)動按鍵和數(shù)碼管的芯片。一片ZLG7289B可同時驅(qū)動64個按鍵和8個七段數(shù)碼管(即64個LED燈)。STM32F103RCT6學習板上集成了一片ZLG7289B芯片,驅(qū)動了16個按鍵、8個LED燈和一個四合一七段數(shù)碼管,電路原理圖參考第3.8節(jié)。ZLG7289B芯片管腳布局如圖所示“數(shù)碼管段選信號”是指用于驅(qū)動七段數(shù)碼管中的某個段的控制信號,一般連接到數(shù)碼管的8個段控制管腳的某一腳上(8個段控制管腳為a、b、c、d、e、f、g和小數(shù)點dp);“數(shù)碼管字選信號”也常被稱為“數(shù)碼管位選信號”,是指用于驅(qū)動多合一數(shù)碼管中單個數(shù)碼管的控制信號,一般連接到數(shù)碼管的公共有效端,由于ZLG7289B只能驅(qū)動共陰式數(shù)碼管,所以數(shù)碼管字選信號連接到單個數(shù)碼管的陰極公共端管腳號管腳名作用1RTCC電源,一般直接與VCC相連2VCC電源,2.7~6V3NC懸空4GND接地5NC懸空6CS片選信號,低電平有效,輸入7CLK串行數(shù)據(jù)位時鐘信號,下降沿有效,輸入8DIO串行數(shù)據(jù)輸入輸出口,雙向9INT按鍵中斷請求信號,下降沿有效,輸出10~17KR0~KR7鍵盤行信號0~7,同時也用作數(shù)碼管段選信號,依次為g、f、e、d、c、b、a和dp18~25KC0~KC7鍵盤列信號0~7,同時也用作數(shù)碼管字選信號0~726OSC2晶振輸出信號27OSC1晶振輸入信號28RST復位信號,低有效ZLG7289B訪問時序。(a)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令;(b)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令+單字節(jié)數(shù)據(jù);(c)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令(0x15),然后讀出單字節(jié)按鍵值,這里第一個指令字節(jié)必須為0x15七段數(shù)碼管各個段的顯示位置序號指令字節(jié)數(shù)據(jù)字節(jié)含義10xA4無清除顯示內(nèi)容20xBF無使全部LED燈閃爍30xA0無數(shù)碼管顯示左移40xA1無數(shù)碼管顯示右移50xA2無數(shù)碼管顯示循環(huán)左移60xA3無數(shù)碼管顯示循環(huán)右移70x80+k(dp<<7)|(d3d2d1d0)k為數(shù)碼管位置號,取0~7(在圖3-12中僅有4個數(shù)碼管,即網(wǎng)標DIG0對應著0,DIG1對應著1,DIG2對應著2,DIG3對應3);dp=0表示小數(shù)點熄滅,dp=1表示小數(shù)點點亮;d3d2d1d0四位為0000b~1001b對應著顯示0~9,為1010b顯示“-”為1011b~1110b分別顯示E、H、L和P,為1111b無顯示80xC8+k(dp<<7)|(d3d2d1d0)k和dp的含義同上,d3d2d1d0為0000b~1111b時分別對應著顯示0~9、A、B、C、D、E和F90x90+k(dp<<7)|(abcdefg)k和dp的含義同上,a、b、c、d、e、f、g對應著數(shù)碼管的各段,為1時亮,為0時滅100x88d7d6d5d4d3d2d1d0di對應著第i個數(shù)碼管,為0時閃爍,為1時不閃爍110x98d7d6d5d4d3d2d1d0di對應著第i個數(shù)碼管,為1時正常顯示,為0時消隱120xE000d5d4d3d2d1d0將數(shù)碼管視為64個LED燈,d5d4d3d2d1d0表示6位地址,從000000b~111111b,表示64個LED燈的地址,每個數(shù)碼管內(nèi),點亮順度為“g、f、e、d、c、b、a、dp”,地址000000b對應著KR0和KC0相交的LED燈,000001b對應著KR1和KC0相交的LED燈,依此類推130xC000d5d4d3d2d1d0第12條指令為段點亮指令,這里為段熄滅指令,數(shù)據(jù)字節(jié)的含義同上140x15讀出單字節(jié)數(shù)據(jù)讀出的單字節(jié)數(shù)據(jù)包含按鍵值,鍵碼從0~63(0x00~0x3F),無效值為0xFF,鍵碼0對應著KC0與KR0相交的按鍵,鍵碼1對應著KC0與KR1相交的按鍵,依此類推鍵名鍵碼鍵名鍵碼鍵名鍵碼鍵名鍵碼S162S558S954S1350S261S657S1053S1449S360S756S1152S1548S459S863S1251S1655ZLG7289B驅(qū)動的按鍵鍵碼5.4.2寄存器類型工程實例本節(jié)將創(chuàng)建工程PRJ05,其在工程PRJ03基礎上新添加的功能為:(1)四合一數(shù)碼管每個顯示管均周期性從0顯示至9,且顯示小數(shù)點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應的LED燈Di-8。在工程PRJ03的基礎上,新建工程“PRJ05”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ05”下,此時的工程PRJ05與工程PRJ03完全相同?,F(xiàn)在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,將zlg7289.c文件添加到“BSP”分組下,建設好的工程如圖所示。5.4.2寄存器類型工程實例本節(jié)將創(chuàng)建工程PRJ05,其在工程PRJ03基礎上新添加的功能為:(1)四合一數(shù)碼管每個顯示管均周期性從0顯示至9,且顯示小數(shù)點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應的LED燈Di-8。在工程PRJ03的基礎上,新建工程“PRJ05”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ05”下,此時的工程PRJ05與工程PRJ03完全相同?,F(xiàn)在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,將zlg7289.c文件添加到“BSP”分組下,建設好的工程如圖所示。代碼:137代碼:138代碼:139代碼:140代碼:141代碼:142代碼:1435.4.2庫函數(shù)類型工程實例本小節(jié)將要討論的工程PRJ06與第5.4.2節(jié)的工程PRJ05實現(xiàn)的功能完全相同,這里使用庫函數(shù)方式進行工程設計。需要強調(diào)指出的是,寄存器類型工程與庫函數(shù)類型工程不是對立的,一個工程文件,既可以包含寄存器類型的代碼,也可以包含庫函數(shù)類型的代碼。在工程PRJ04的基礎上,新建工程“PRJ06”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ06”下,此時的工程PRJ06與工程PRJ04完全相同,需要做的修改為:(1)修改文件main.c、includes.h和bsp.c;(2)新建文件zlg7289.c和zlg7289.h文件,新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ06\BSP”下;(3)將zlg7289.c文件添加到工程管理器的“BSP”分組下。建設好的工程PRJ06如圖所示。代碼:145代碼:146代碼:147代碼:148代碼:149thankyou第六章
定時器目錄系統(tǒng)節(jié)拍定時器看門狗定時器實時時鐘通用定時器本章小結(jié)本章將介紹STM32F103RCT6片內(nèi)定時器的結(jié)構(gòu)和用法,按照從簡單到復雜的順序依次介紹系統(tǒng)節(jié)拍定時器、看門狗定時器、實時時鐘和通用定時器,其中,系統(tǒng)節(jié)拍定時器是Cortex-M3內(nèi)核的定時器組件,主要用于為嵌入式實時操作系統(tǒng)提供時鐘節(jié)拍(一般取為100Hz)。STM32F103RCT6具有8個定時器,其中定時器1和定時器8為高級定時器、定時器2~5為通用定時器、定時器6和定時器7稱為基本定時器,本章將主要介紹通用定時器,且以定時器2為例。16.1系統(tǒng)節(jié)拍定時器23系統(tǒng)節(jié)拍定時器SysTick屬于Cortex-M3內(nèi)核的組件,是一個24位的減計數(shù)器,常用于產(chǎn)生100Hz的定時中斷(即系統(tǒng)節(jié)拍定時器異常),用作嵌入式實時操作系統(tǒng)μC/OS-II等的時鐘節(jié)拍,系統(tǒng)節(jié)拍定時器的結(jié)構(gòu)如下圖所示。系統(tǒng)節(jié)拍定時器工作原理4了解STCTRL、STRELOAD、STCURR和STCALIB這4個寄存器的內(nèi)容,即可掌握系統(tǒng)節(jié)拍定時器的工作原理。這4個寄存器的內(nèi)容如下表所示。系統(tǒng)節(jié)拍定時器工作原理5根據(jù)上述對系統(tǒng)節(jié)拍定時器的分析,可知設計一個定時頻率為100Hz(即定時周期為10ms)的系統(tǒng)時鐘節(jié)拍定時器,可采用以下語句;(1)配置STCTRL為(1uL<<1)|(1uL<<2),即關(guān)閉系統(tǒng)節(jié)拍定時器并開放系統(tǒng)節(jié)拍定時器中斷,同時設置系統(tǒng)時鐘為系統(tǒng)節(jié)拍定時器時鐘源。此時對于STM32F103RCT6微控制器使用內(nèi)部8MHz時鐘源而言,系統(tǒng)時鐘為64MHz,芯片手冊上明確說明:將系統(tǒng)時鐘經(jīng)AHB預分頻器后的32MHz信號的8分頻值用作系統(tǒng)節(jié)拍定時器的輸入時鐘信號(見圖2-3),但實際測試發(fā)現(xiàn),系統(tǒng)節(jié)拍定時器的輸入時鐘信號仍然是32MHz,即沒有所謂的8分頻器。(2)向STCURR寄存器寫入任意值,例如寫入0,清除STCURR的值,同時清除STCTRL的COUNTFLAG標志;(3)向STRELOAD寄存器寫入320000-1,即十六進制數(shù)0x4E1FF。(4)配置STCTRL的第0位為1(其余位保持不變),啟動系統(tǒng)節(jié)拍定時器。系統(tǒng)節(jié)拍定時器工作原理6系統(tǒng)節(jié)拍定時器相關(guān)的寄存器定義在CMSIS庫頭文件core_cm3.h中,如下面的程序段所示。系統(tǒng)節(jié)拍定時器工作原理7在CMSIS庫頭文件core_cm3.h中還定義了一個初始化系統(tǒng)節(jié)拍定時器的函數(shù),如下面的程序段所示。系統(tǒng)節(jié)拍定時器工作原理8系統(tǒng)節(jié)拍定時器異常一般用作嵌入式實時操作系統(tǒng)的時鐘節(jié)拍,也可以用作普通的定時中斷處理。這里使用系統(tǒng)節(jié)拍定時器實現(xiàn)LED1燈D9的閃爍功能,其寄存器類型的工程實現(xiàn)步驟如下:(1)在工程PRJ05的基礎上,新建工程“PRJ07”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ07”下,此時的工程PRJ07與工程PRJ05完全相同。(2)新建文件systick.c和systick.h,這兩個文件保存在目錄“D:\STM32F103RCT6PRJ\PRJ07\BSP”下,其代碼分別如下面的程序段所示。系統(tǒng)節(jié)拍定時器實例9系統(tǒng)節(jié)拍定時器實例10系統(tǒng)節(jié)拍定時器實例11系統(tǒng)節(jié)拍定時器實例12將systick.c文件添加到工程管理器的BSP分組下,建設好的工程PRJ07如下圖所示。系統(tǒng)節(jié)拍定時器實例13由圖可知,在工程PRJ07中,主函數(shù)main主要完成了系統(tǒng)的外設初始化工作,同時,工程PRJ07保留了工程PRJ05中的全部功能,并添加了系統(tǒng)節(jié)拍定時器功能。由于配置了系統(tǒng)節(jié)拍定時器的工作頻率為100Hz,所以,定時異常每觸發(fā)100次相當于延時準確的1秒。通過添加靜態(tài)計數(shù)變量,使得系統(tǒng)節(jié)拍定時器異常服務函數(shù)實現(xiàn)了每隔1秒使LED燈D9狀態(tài)切換一次的功能。系統(tǒng)節(jié)拍定時器實例14系統(tǒng)節(jié)拍定時器的庫函數(shù)類型工程的建設過程為:在工程PRJ06的基礎上,新建工程PRJ08,保存在保存在目錄“D:\STM32F103RCT6PRJ\PRJ08”下,此時的工程PRJ08與工程PRJ06完全相同,需要做的修改為:(1)修改文件main.c、includes.h和bsp.c;(2)新建文件systick.c和systick.h,如程序段6-3和程序段6-4所示,保存在目錄“D:\STM32F103RCT6PRJ\PRJ07\BSP”下,并將文件systick.c添加到工程管理器的BSP分組下。系統(tǒng)節(jié)拍定時器實例6.2看門狗定時器1516STM32F103RCT6微控制中有兩個看門狗,即獨立看門狗和窗口看門狗。本書僅介紹復雜一些的窗口看門狗??撮T狗定時器工作原理17在本小節(jié)中,擬把看門狗定時器WWDG用作普通的定時器,實現(xiàn)每隔約1秒LED燈D10閃爍的功能。在工程07的基礎上,新建工程09,保存在目錄“D:\STM32F103RCT6PRJ\PRJ09”下,此時的工程PRJ09與工程PRJ07完全相同。然后,執(zhí)行以下的步驟:(1)修改main.c文件,使得main函數(shù)不再控制LED燈的閃爍。(2)新建文件wwdog.c和wwdog.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ09\BSP”下??撮T狗定時器寄存器類型實例18看門狗定時器寄存器類型實例19文件wwdog.h是文件wwdog.c對應的頭文件,用于聲明wwdog.c中定義的函數(shù),這里第6行聲明了WWDOGInit函數(shù)??撮T狗定時器寄存器類型實例(3)在includes.h文件的末尾添加語句“#include"wwdog.h"”,即在總的包括頭文件中包括文件wwdog.h。20(4)在bsp.c文件的BSPInit函數(shù)中,添加對函數(shù)WWDOGInit的調(diào)用,如下面的程序段所示??撮T狗定時器寄存器類型實例21(5)將wwdog.c文件添加到工程管理器的“BSP”分組下。完成后的工程PRJ09如下圖所示??撮T狗定時器寄存器類型實例22在工程PRJ08的基礎上,新建工程“PRJ10”,保存在“D:\STM32F103RCT6PRJ\PRJ10”目錄下,此時的工程PRJ10與工程PRJ08完全相同。然后,進行如下的步驟:(1)新建文件wwdog.c和wwdog.h。這兩個文件保存在目錄“D:\STM32F103RCT6PRJ\PRJ10\BSP”下??撮T狗定時器庫函數(shù)類型實例23看門狗定時器庫函數(shù)類型實例對比前面wwdog.c文件程序段中的看門狗中斷服務函數(shù)WWDG_IRQHandler,這里的第22行為喂狗,即設置看門狗計數(shù)器的值為0x72;第33行調(diào)用WWDG_ClearFlag清零看門狗中斷標志。24(2)修改main.c文件,在前一個工程段代碼的基礎上,刪除第13~15行,即main函數(shù)不再控制LED燈的閃爍。(3)在includes.h文件的末尾,添加語句“#include"wwdog.h"”,即在總的包括頭文件中包括頭文件wwdog.h。(4)修改bsp.c文件,在bsp.c文件中的BSPInit函數(shù)中,添加語句“WWDOGInit();”,用于初始化窗口看門狗定時器。(5)添加目錄“D:\STM32F103RCT6PRJ\PRJ10\STM32
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肇慶市實驗中學高中歷史一:第2課屹立于世界民族之林-新中國外交(第2課時)教案
- 新疆科信職業(yè)技術(shù)學院《外國文學一》2023-2024學年第二學期期末試卷
- 新疆農(nóng)業(yè)職業(yè)技術(shù)學院《動物藥理學》2023-2024學年第二學期期末試卷
- 新疆維吾爾塔城地區(qū)2024-2025學年四下數(shù)學期末復習檢測模擬試題含解析
- 2025-2030年中國RF同軸電纜投資市場分析及發(fā)展戰(zhàn)略研究咨詢報告
- 2025-2030年中國B2B電子商務市場運行新形勢與投資前景報告
- 邢臺學院《編程與實踐》2023-2024學年第二學期期末試卷
- 2025-2030年中國N甲基哌嗪行業(yè)投資價值研究報告
- 2025-2030年中國TPMS市場競爭格局規(guī)劃分析研究報告
- 2025年廠級職工安全培訓考試試題附參考答案【基礎題】
- RPA財務機器人開發(fā)與應用 課件 6.1 RPA網(wǎng)銀付款機器人
- 軟件開發(fā)中介服務協(xié)議范本
- 云南省昆明市2025屆高三年級第二次聯(lián)考+物理試卷
- 企業(yè)宣傳與品牌形象設計手冊
- 別墅設備維護方案
- DL∕T 1917-2018 電力用戶業(yè)擴報裝技術(shù)規(guī)范
- 山東省臨沂市莒南縣2023-2024學年七年級下學期期末數(shù)學試題
- 九宮數(shù)獨200題(附答案全)
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 食材配送投標方案技術(shù)標
- 泌尿科一科一品匯報課件
評論
0/150
提交評論