




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