STM32微控制器原理及應(yīng)用PPT完整全套課件_第1頁
STM32微控制器原理及應(yīng)用PPT完整全套課件_第2頁
STM32微控制器原理及應(yīng)用PPT完整全套課件_第3頁
STM32微控制器原理及應(yīng)用PPT完整全套課件_第4頁
STM32微控制器原理及應(yīng)用PPT完整全套課件_第5頁
已閱讀5頁,還剩339頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

STM32單片機(jī)原理及應(yīng)用主講人:

第1章-概述第2章-STM32體系結(jié)構(gòu)第3章-通用并行結(jié)構(gòu)GPIO第4章-通用同步異步收發(fā)器接口USART第5章定時器第6章模數(shù)轉(zhuǎn)換器ADC第7章直接存儲器存取DMA第8章內(nèi)部集成電路總線接口I2C第一章概述(了解)教學(xué)基本內(nèi)容:單片微型處理器、嵌入式系統(tǒng)、ARM處理器、μC/OS-II系統(tǒng)本章主要教學(xué)要求:了解MCU是什么、嵌入式系統(tǒng)的組成、ARM系統(tǒng)的基本型號、μC/OS-II操作系統(tǒng)的功能第一節(jié)單片微型處理器概述第二節(jié)嵌入式系統(tǒng)簡介第三節(jié)ARM處理器概述第四節(jié)μC/OS-II系統(tǒng)第一節(jié)單片微型處理器概述單片微型計(jì)算機(jī),簡稱“單片機(jī)”(SingleChipMicrocomputer),也稱為“MCU”(MicroController,微控制器)。單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器(CentralProcessingUnit,CPU)、隨機(jī)存儲器(RandomAccessMemory,RAM)、只讀存儲器(Read-OnlyMemory,ROM)、多種輸入/輸出口和中斷系統(tǒng)等功能集成到一塊硅片上構(gòu)成的一個小而完善的微型計(jì)算機(jī)系統(tǒng)。右圖為單片機(jī)結(jié)構(gòu)框圖。單片微型處理器跟單片機(jī)類似,微處理器只是計(jì)算機(jī)系統(tǒng)里的核心部件,而單片機(jī)是一個完整的計(jì)算機(jī)系統(tǒng),核心部件由控制單元、計(jì)算邏輯單元和寄存器單元等部分組成。組成單片微處理器的各部分模塊中央處理器CPU:CPU是由運(yùn)算器、控制器、寄存器及它們之間的總線結(jié)構(gòu)組成。完成數(shù)據(jù)的計(jì)算、指令的執(zhí)行等工作,是單片機(jī)的核心。存儲器(Memory):在單片機(jī)里,存儲器分為兩種,即RAM和ROM。RAM用于保存代碼執(zhí)行過程中的暫存變量,掉電丟失,可以類比計(jì)算機(jī)中的內(nèi)存;ROM保存單片機(jī)的代碼,掉電不丟失,類比計(jì)算機(jī)中的硬盤。輸入/輸出I/O:為了與外界信息交換或者控制外圍器件,單片機(jī)常常配有各種輸入輸出系統(tǒng),如通用I/O(GPIO)口、并行總線、各種串行總線等等,這些資源有些也稱為外設(shè),CPU主內(nèi),其余主外。中斷裝置和中斷處理程序統(tǒng)稱為中斷系統(tǒng)。中斷系統(tǒng)是單片機(jī)的重要組成部分。中斷是CPU對系統(tǒng)發(fā)生的某個事件作出的一種反應(yīng)。引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發(fā)生中斷時被打斷程序的暫停點(diǎn)成為斷點(diǎn)。CPU暫?,F(xiàn)行程序而轉(zhuǎn)為響應(yīng)中斷請求的過程稱為中斷響應(yīng)。處理中斷源的程序稱為中斷處理程序。CPU執(zhí)行有關(guān)的中斷處理程序稱為中斷處理。而返回斷點(diǎn)的過程稱為中斷返回。中斷的實(shí)現(xiàn)實(shí)行軟件和硬件綜合完成,硬件部分叫做硬件裝置,軟件部分稱為軟件處理程序。單片機(jī)的發(fā)展單片機(jī)自誕生以來,以其性能穩(wěn)定、低電壓、低功耗、經(jīng)久耐用,體積小、性價比高、控制能力強(qiáng)、易于擴(kuò)展等優(yōu)點(diǎn),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。從上世紀(jì)80年代,先后出現(xiàn)了4位單片機(jī)、8位單片機(jī)、16位單片機(jī)、32位單片機(jī),在這幾類單片機(jī)里最受追捧的是8位單片機(jī),在相當(dāng)長的一段時間里是單片機(jī)應(yīng)用的主流,目前仍然和32位單片機(jī)一樣占據(jù)著較大的市場份額。隨著科學(xué)技術(shù)的進(jìn)步與發(fā)展,單片機(jī)的運(yùn)算能力越來越強(qiáng),存儲空間越來越大,外設(shè)也越來越豐富。單片機(jī)與單片微型處理器之間的區(qū)別越來越小。作為初學(xué)者,單片機(jī)與微型處理器沒有太大的區(qū)別,現(xiàn)在進(jìn)行研發(fā)計(jì)算時更注重其應(yīng)用和特性方面。第二節(jié)嵌入式系統(tǒng)簡介嵌入式系統(tǒng):嵌入式系統(tǒng)是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專用計(jì)算機(jī)系統(tǒng)”,根據(jù)英國電氣工程師協(xié)會的定義,嵌入式系統(tǒng)為控制、監(jiān)視或輔助設(shè)備、機(jī)器或用于工廠運(yùn)作的設(shè)備。嵌入式系統(tǒng)是以應(yīng)用為中心,以現(xiàn)代計(jì)算機(jī)技術(shù)為基礎(chǔ),能夠根據(jù)用戶需求(功能、可靠性、成本、體積、功耗、環(huán)境等靈活裁剪軟硬件模塊的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)是以應(yīng)用為中心,以現(xiàn)代計(jì)算機(jī)技術(shù)為基礎(chǔ),能夠根據(jù)用戶需求(功能、可靠性、成本、體積、功耗、環(huán)境等)靈活裁剪軟硬件模塊的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的真正發(fā)展是在微處理器問世以后。嵌入式系統(tǒng)發(fā)展的三個階段:第一階段:嵌入技術(shù)的早期階段。嵌入式系統(tǒng)以功能簡單的專用計(jì)算機(jī)或單片機(jī)為核心的可編程控制器形式存在,具有監(jiān)測、伺服、設(shè)備指示等功能。這種系統(tǒng)大部分應(yīng)用于各類工業(yè)控制和飛機(jī)、導(dǎo)彈等武器裝備中。第二階段:以高端嵌入式CPU和嵌入式操作系統(tǒng)為標(biāo)志。這--階段系統(tǒng)的主要特點(diǎn)是計(jì)算機(jī)硬件出現(xiàn)了高可靠、低功耗的嵌入式CPU,如ARM、PowerPC等,且支持操作系統(tǒng),支持復(fù)雜應(yīng)用程序的開發(fā)和運(yùn)行。第三階段:以芯片技術(shù)和Internet技術(shù)為標(biāo)志。微電子技術(shù)發(fā)展迅速,SOC(片上系統(tǒng))使嵌入式系統(tǒng)越來越小,功能卻越來越強(qiáng)。目前大多數(shù)嵌入式系統(tǒng)還孤立于Internet之外,但隨著Internet的發(fā)展及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等結(jié)合日益密切,嵌入式技術(shù)正在進(jìn)入快速發(fā)展和廣泛應(yīng)用的時期。嵌入式系統(tǒng)的特點(diǎn)嵌入式系統(tǒng)的硬件和軟件必須根據(jù)具體的應(yīng)用任務(wù),以功耗、成本、體積、可靠性、處理能力等為指標(biāo)來進(jìn)行選擇。嵌入式系統(tǒng)的核心是系統(tǒng)軟件和應(yīng)用軟件,由于存儲空間有限,因而要求軟件代碼緊湊、可靠,且對實(shí)時性有嚴(yán)格要求。從構(gòu)成上看,嵌入式系統(tǒng)是集軟硬件于一體的、可獨(dú)立工作的計(jì)算機(jī)系統(tǒng);從外觀上看,嵌入式系統(tǒng)像是一個“可編程”的電子“器件”;從功能上看,它是對目標(biāo)系統(tǒng)(宿主對象)進(jìn)行控制,使其智能化的控制器。專用性強(qiáng)體積小型化實(shí)時性好可裁剪性好可靠性高功耗低嵌入式系統(tǒng)本身不具備自我開發(fā)能力,必須借助通用計(jì)算機(jī)平臺來開發(fā)嵌入式系統(tǒng)通常采用“軟硬件協(xié)同設(shè)計(jì)”的方法實(shí)現(xiàn)嵌入式系統(tǒng)的組成從外部特征上看,一個嵌入式系統(tǒng),通常是一個功能完備、幾乎不依賴其他外部裝置即可獨(dú)立運(yùn)行的軟硬件集成的系統(tǒng)。如果對這樣一個系統(tǒng)進(jìn)行剖分的話,可以發(fā)現(xiàn)它大致可能包括這樣幾個層次,如下圖所示。嵌入式系統(tǒng)最核心的層次是中央處理單元部分,它包含運(yùn)算器和控制器模塊,在CPU的基礎(chǔ)上進(jìn)一步配上存儲器模塊、電源模塊、復(fù)位模塊等就構(gòu)成了通常所說的最小系統(tǒng)。由于技術(shù)的進(jìn)步,集成電路生產(chǎn)商通常會把許多外設(shè)做進(jìn)同一個集成電路中,這樣在使用上更加方便,這樣一個芯片通常稱之為微控制器。在微控制器的基礎(chǔ)上進(jìn)一步擴(kuò)展電源傳感與檢測、執(zhí)行器模塊以及配套軟件并構(gòu)成一個具有特定功能的完整單元,就稱之為一個嵌入式系統(tǒng)或嵌入式應(yīng)用。(1)硬件結(jié)構(gòu)嵌入式系統(tǒng)的硬件部分看起來與通用計(jì)算機(jī)系統(tǒng)的沒有什么區(qū)別,也由處理器、存儲器、外部設(shè)備、I/O接口、圖形控制器等部分組成。但是嵌入式系統(tǒng)應(yīng)用上的特點(diǎn)致使嵌入式系統(tǒng)在軟硬件的組成和實(shí)現(xiàn)形式上與通用計(jì)算機(jī)系統(tǒng)有較大區(qū)別。下圖為嵌入式系統(tǒng)的硬件結(jié)構(gòu)。(2)軟件體系嵌入式系統(tǒng)的軟件體系是面向嵌入式系統(tǒng)特定的硬件體系和用戶要求而設(shè)計(jì)的,是嵌入式系統(tǒng)的重要組成部分,是實(shí)現(xiàn)嵌入式系統(tǒng)功能的關(guān)鍵。嵌入式系統(tǒng)軟件體系和通用計(jì)算機(jī)軟件體系類似,分成驅(qū)動層、操作系統(tǒng)層、中間件層和應(yīng)用層等四層,各有其特點(diǎn)。圖1-4為嵌入式系統(tǒng)的軟件體系。驅(qū)動層。驅(qū)動層是直接與硬件打交道的一層,它為操作系統(tǒng)和應(yīng)用提供硬件驅(qū)動或底層核心支持,其功能由驅(qū)動程序?qū)崿F(xiàn)。在嵌入式系統(tǒng)中,驅(qū)動程序具有在嵌入式系統(tǒng)上電后初始化系統(tǒng)的基本硬件環(huán)境的功能,基本硬件包括微處理器、存儲器、中斷控制器、定時器等。驅(qū)動層般可以有三種類型的程序,即板級初始化程序、標(biāo)準(zhǔn)驅(qū)動程序和應(yīng)用驅(qū)動程序。操作系統(tǒng)層。嵌入式系統(tǒng)中的操作系統(tǒng)具有一般操作系統(tǒng)的核心功能,負(fù)責(zé)嵌入式系統(tǒng)的全部軟硬件資源的分配、調(diào)度工作控制、協(xié)調(diào)并發(fā)活動。它仍具有嵌入式的特點(diǎn),屬于嵌入式操作系統(tǒng)(EmbeddedOperatingSystem,EOS)。主流的嵌入式操作系統(tǒng)有WindowsCE、Palm:OS、Linux、VxWorks.pSOS.QNX.LynxOS等。有了嵌入式操作系統(tǒng),編寫應(yīng)用程序就更加快速、高效、穩(wěn)定。中間件層。中間件是用于幫助和支持應(yīng)用軟件開發(fā)的軟件,通常包括數(shù)據(jù)庫、網(wǎng)絡(luò)協(xié)議、圖形支持及相應(yīng)開發(fā)工具等,例如:MySQL、TCP/IP、GU1等都屬于這一類軟件。應(yīng)用層。嵌入式應(yīng)用軟件是針對特定應(yīng)用領(lǐng)域,用來實(shí)現(xiàn)用戶預(yù)期目標(biāo)的軟件。嵌入式應(yīng)用軟件和普通應(yīng)用軟件有一定的區(qū)別,它不僅要求在準(zhǔn)確性、安全性和穩(wěn)定性等方面能夠滿足實(shí)際應(yīng)用的需要,而且還要盡可能地進(jìn)行優(yōu)化,以減少對系統(tǒng)資源的消耗,降低硬件成本。嵌入式系統(tǒng)中的應(yīng)用軟件是最活躍的力量,每種應(yīng)用軟件均有特定的應(yīng)用背景。盡管規(guī)模較小,但專業(yè)性較強(qiáng),所以嵌入式應(yīng)用軟件不像操作系統(tǒng)和支撐軟件那樣受制于國外產(chǎn)品,是我國嵌入式軟件的優(yōu)勢領(lǐng)域。嵌入式系統(tǒng)的應(yīng)用(1)工業(yè)控制:基于嵌入式芯片的工業(yè)自動化設(shè)備將獲得長足的發(fā)展,目前已經(jīng)有大量的8、16、32位嵌入式微控制器在應(yīng)用中。網(wǎng)絡(luò)化是提高生產(chǎn)效率和產(chǎn)品質(zhì)量、減少人力資源浪費(fèi)的主要途徑,如工業(yè)過程控制、數(shù)字機(jī)床、電力系統(tǒng)電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測、石油化工系統(tǒng)。就傳統(tǒng)的工業(yè)控制產(chǎn)品而言,低端型采用的往往是8位單片機(jī)。但是隨著技術(shù)的發(fā)展,32位、64位的處理器逐漸成為工業(yè)控制設(shè)備的核心,在未來幾年內(nèi)必將獲得長足的發(fā)展。(2)交通管理:在車輛導(dǎo)航流量控制、信息監(jiān)測與汽車服務(wù)方面,嵌入式系統(tǒng)技術(shù)已經(jīng)獲得了廣泛的應(yīng)用,內(nèi)嵌GPS模塊GSM模塊的移動定位終端已經(jīng)在各種運(yùn)輸行業(yè)獲得了成功的使用。目前GPS設(shè)備已經(jīng)從尖端產(chǎn)品進(jìn)入了普通百姓的家庭,只需要幾百元,就可以隨時隨地找到目標(biāo)的位置。(3)信息家電:這將成為嵌入式系統(tǒng)最大的應(yīng)用領(lǐng)城。冰箱空調(diào)等的網(wǎng)絡(luò)化、智能化將引領(lǐng)人們的生活步入一個嶄新的空間。即使你不在家里,可以通過電話線,網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程控制。在這些設(shè)備中,嵌入式系統(tǒng)將大有用武之地。(4)家庭智能管理系統(tǒng):水電、煤氣表的遠(yuǎn)程自動抄表,安全防火,防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實(shí)現(xiàn)更高、更準(zhǔn)確和更安全的性能。目前在服務(wù)領(lǐng)域,如遠(yuǎn)程點(diǎn)菜器等已經(jīng)體現(xiàn)了嵌入式系統(tǒng)的優(yōu)勢。(5)POS網(wǎng)絡(luò)及電子商務(wù):公共交通無接觸智能卡(ContactlessSmartCard,CSC)發(fā)行系統(tǒng),公共電話卡發(fā)行系統(tǒng),自動售貨機(jī),各種智能ATM終端將全面走入人們的生活,到時手持一卡就可以行遍天下。(6)環(huán)境工程與自然:包括水文資料實(shí)時檢測、防洪體系及水土質(zhì)量檢測堤壩安全,地震監(jiān)測網(wǎng),實(shí)時氣象信息網(wǎng)、水源和空氣污染監(jiān)測。在很多環(huán)境惡劣、地況復(fù)雜的地區(qū),嵌入式系統(tǒng)將實(shí)現(xiàn)無人監(jiān)測。(7)機(jī)器人:嵌入式芯片的發(fā)展將使機(jī)器人在微型化、高智能方面優(yōu)勢更加明顯同時會大幅度降低機(jī)器人的價格,使其在工業(yè)領(lǐng)域和服務(wù)領(lǐng)域獲得更廣泛的應(yīng)用。第三節(jié)ARM處理器概述1985年,RogerWilson和SteveFurber設(shè)計(jì)了第一代32位、6MHz的處理器,用它做出了一臺精簡指令集計(jì)算(ReducedInstructionSetComputer,RISC),簡稱ARM(AcornRISCMachine)。ARM處理器本身是32位,配備16位指令集。ARM的Jazelle技術(shù)使Java加速得到比基于軟件的Java虛擬機(jī)(JaarmVirtualMachine,JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。CPU功能上增加DSP指令集提供增強(qiáng)的16位和32位算術(shù)運(yùn)算能力,提高了性能和靈活性。ARM還提供兩個前沿特性來輔助帶深嵌入處理器的高集成SOC器件的調(diào)試,它們是嵌入式ICE-RT邏輯和嵌入式跟蹤宏核(ETMS)系列。上圖為ARM處理器的階梯圖ARM處理器的三大特點(diǎn):耗電少功能強(qiáng)、16位/32位雙指令集和、合作伙伴眾多(1)體積小、低功耗、低成本、高性能;(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;(3)大量使用寄存器,指令執(zhí)行速度更快;(4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成;(5)尋址方式靈活簡單,執(zhí)行效率高;(6)指令長度固定。體系結(jié)構(gòu)所謂“體系結(jié)構(gòu)”,也稱為“系統(tǒng)結(jié)構(gòu)”,是指程序員在為特定處理器編制程序時所“看到”從而可以在程序中使用的資源及其相互之間的關(guān)系。體系結(jié)構(gòu)定義了指令集(ISA)和基于該體系結(jié)構(gòu)下處理器的編程模型。體系結(jié)構(gòu)最為重要的就是處理器所提供的指令系統(tǒng)和寄存器組。體系結(jié)構(gòu):包括CISC(ComplexInstructionSetComputer,復(fù)雜指令集計(jì)算機(jī))和RISC(ReducedInstructionSetComputer,精簡指令集計(jì)算機(jī))兩種。在CISC指令集的各種指令中,大約有20%的指令會被反復(fù)使用,占整個程序代碼的80%。而剩下的20%的指令卻不經(jīng)常使用。RISC結(jié)構(gòu)優(yōu)先選取使用頻最高的簡單指令,避免復(fù)雜指令;將指令長度固定,指令格式和尋址方式種類減少;以控制邏輯為主,不用或少用微碼控制等。RISC體系結(jié)構(gòu)的特點(diǎn)(1)采用固定長度的指令格式,指令歸整、簡單、基本尋址方式有2~3種。(2)使用單周期指令,便于流水線操作執(zhí)行。(3)大量使用寄存器,數(shù)據(jù)處理指令只對寄存器進(jìn)行操作,只有加載/存儲指令可以訪問存儲器,以提高指令的執(zhí)行效率。除此以外,ARM體系結(jié)構(gòu)還采用了一些特別的技術(shù),在保證高性能的前提下盡量縮小芯片的面積,并降低功耗:(4)所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率。(5)可用加載/存儲指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。(6)可在一條數(shù)據(jù)處理指令中同時完成邏輯處理和移位處理。(7)在循環(huán)處理中使用地址的自動增減來提高運(yùn)行效率。ARM處理器的大致分類:(1)ARMCortex應(yīng)用處理器(2)ARMCortex嵌入式處理器(3)經(jīng)典ARM處理器(4)ARM專業(yè)處理器寄存器結(jié)構(gòu):ARM處理器共有37個寄存器,被分為若干個組(BANK),這些寄存器包括:(1)31個通用寄存器,包括程序計(jì)數(shù)器(PC指針),均為32位的寄存器;(2)6個狀態(tài)寄存器,用以標(biāo)識CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位,只使用了其中的一部分。指令結(jié)構(gòu):ARM微處理器的在較新的體系結(jié)構(gòu)中支持兩種指令集:ARM指令集和Thumb指令集。其中,ARM指令為32位的長度,Thumb指令為16位長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM代碼相比較,可節(jié)省30%~40%以上的存儲空間,同時具備32位代碼的所有優(yōu)點(diǎn)。體系結(jié)構(gòu)擴(kuò)充:當(dāng)前ARM體系結(jié)構(gòu)的擴(kuò)充包括:··Thumb16位指令集,為了改善代碼密度;··DSP應(yīng)用的算術(shù)運(yùn)算指令集;··Jazeller允許直接執(zhí)行Java字節(jié)碼。ARM處理器系列提供的解決方案有:··無線、消費(fèi)類電子和圖像應(yīng)用的開放平臺;··存儲、自動化、工業(yè)和網(wǎng)絡(luò)應(yīng)用的嵌入式實(shí)時系統(tǒng);··智能卡和SIM卡的安全應(yīng)用。主要模式用戶模式(usr)ARM處理器正常的程序執(zhí)行狀態(tài);系統(tǒng)模式(sys)運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù);快中斷模式(fiq)支持高速數(shù)據(jù)傳輸或通道處理;管理模式(svc)操作系統(tǒng)保護(hù)模式;數(shù)據(jù)訪問終止模式(abt)用于虛擬存儲器及存儲器保護(hù);中斷模式(irq)用于通用的中斷處理;未定義指令終止模式(und)支持硬件協(xié)處理器的軟件仿真;除用戶模式外,其余6種模式稱為非用戶模式或特權(quán)模式;用戶模式和系統(tǒng)模式之外的5種模式稱為異常模式。ARM處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。ARM的系列產(chǎn)品ARMCortex嵌入式處理器包括Cortex-R系列和Cortex-M系列。Cortex-R系列是一款面向?qū)崟r應(yīng)用的處理器,Cortex-M系列則是面向具有確定性的微控制器應(yīng)用的成本敏感型解決方案。Cortex-M系列處理器主要是針對微控制器領(lǐng)域開發(fā)的,在該領(lǐng)域中,既需進(jìn)行快速且具有高確定性的中斷管理,又需將門數(shù)和可能功耗控制在最低。而Cortex-R系列處理器的開發(fā)則面向深層嵌入式實(shí)時應(yīng)用,對低功耗、要求良好的中斷行為、高性能以及與現(xiàn)有平臺的高兼容性這些需求進(jìn)行了平衡考慮。Cortex-R系列應(yīng)用包括汽車制動系統(tǒng)、動力傳動解決方案、大容量存儲控制器、網(wǎng)絡(luò)和打印。Cortex-M系列微控制器應(yīng)用包括混合信號設(shè)備、智能傳感器、汽車電子和氣囊。經(jīng)典ARM處理器包括ARM1II系列、ARM7系列和ARM9系列。ARM1II系列是基于ARMv6架構(gòu)的高性能處理器;ARM7系列則是面向通用應(yīng)用的經(jīng)典處理器;而ARM9系列是基于ARMv5架構(gòu)的常用處理器。ARM專業(yè)處理器包括SecurCore和FPGACores.其中SecurCore是面向高安全性應(yīng)用的處理器,而FPGACores是面向FPGA的處理器。ARM專業(yè)處理器設(shè)計(jì)目的在于滿足特定市場的苛刻需求。ARM處理器的舉例(1)RMCortex-A8處理器:ARMCortex-A8處理器基于ARMv7體系結(jié)構(gòu),能夠?qū)⑺俣葟?00MHz提高到1GHz以上。Cortex-A8處理器可以滿足需要在300mW以下運(yùn)行的移動設(shè)備的功率優(yōu)化要求;以及需要2000DhrystoneMIPS的消費(fèi)類應(yīng)用領(lǐng)域的性能優(yōu)化要求。Cortex-A8高性能處理器在如今的終端設(shè)備中得到了應(yīng)用。從高端特色手機(jī)到上網(wǎng)本。DTV、打印機(jī)和汽車信息娛樂,Cortex-A8處理器都提供了可靠的高性能解決方案,每年發(fā)貨數(shù)百萬臺。該處理器特別適合高性能應(yīng)用領(lǐng)域。特點(diǎn)包括:頻率從600MHz到1GHz及以上;高性能、超標(biāo)量微體系結(jié)構(gòu);用于多媒體和SIMD處理的NEONTM技術(shù);ARM926、ARM1136和ARM1176處理器的二進(jìn)制兼容性。Cortex-A8設(shè)計(jì)用來滿足需要高性能高功效。經(jīng)常集成Web連接的市場需求,其中包括:智能手機(jī),運(yùn)行全功能移動操作系統(tǒng)的應(yīng)用處理器;上網(wǎng)本,運(yùn)行桌面操作系統(tǒng)的高功效主處理器;機(jī)頂盒,用于管理豐富操作系統(tǒng)、多格式A/V和UI的主處理器;數(shù)字電視,用于管理豐富操作系統(tǒng)、UI和瀏覽器的處理器;家庭網(wǎng)絡(luò),系統(tǒng)管理的控制處理器;存儲網(wǎng)絡(luò)(HDD、SSD)用于管理通信流的控制處理器;打印機(jī),高性能集成處理器。ARM處理器的舉例(2)RMCortex-R4處理器:CortexR4處理器是第一個基于ARMv7-R體系結(jié)構(gòu)的深層嵌入式實(shí)時處理器。它專用于大容量深層嵌入式片上系統(tǒng)應(yīng)用,如硬盤驅(qū)動器控制器、無線基帶處理器、消費(fèi)性產(chǎn)品和汽車系統(tǒng)的電子控制單元。Cortex-R4提供的性能、實(shí)時響應(yīng)性大大高于同類中的其他處理器,它提供的功能也遠(yuǎn)遠(yuǎn)多于同類中的其他處理器。此處理器為ASIC、ASSP和MCU嵌入式應(yīng)用提供出色的能效和成本效益。并且,可以在合成時配置Cortex-R4處理器以優(yōu)化其功能集以便精確匹配應(yīng)用需求。Cortex-R4是為基于90nm至28nm的高級芯片工藝的實(shí)現(xiàn)而設(shè)計(jì)的,此外其設(shè)計(jì)重點(diǎn)在于提升能效實(shí)時響應(yīng)性高級功能和使得系統(tǒng)設(shè)計(jì)更加容易。基于40nmG工藝,Cortex-R4可以實(shí)現(xiàn)以將近1GHz的頻率運(yùn)行,此時它可提供1500DhrystoneMIPS的性能。該處理器提供高度靈活且有效的雙周期本地內(nèi)存接口,使SOC設(shè)計(jì)者可以最大限度地降低系統(tǒng)成本和功耗。ARM7TDMICortex-M0Cortex-M3Cortex-M4架構(gòu)版本v4TV6-Mv7-Mv7-ME指令集ARM,ThumbThumb,Thumb-2

系統(tǒng)指令Thumb+Thumb-2Thumb+Thumb-2,DSP,SIMD,F(xiàn)PDMIPS/MH0.72(Thumb)0.95(ARM)0.951.251.25總線接口None133集成終端控制器NoYesYesYes中斷個數(shù)2(IRQandFIQ)32+NMI240+NMI240+NMI中斷優(yōu)先級None48~2568~256斷點(diǎn)Watchpoints2WatchpointUnits4,28,28,2內(nèi)存保護(hù)單元(MPU)NoNoYes(Option)Yes(Option)集成跟蹤模塊(MTU)Yes(Option)NoYes(Option)Yes(Option)單周期乘法NoYes(Option)YesYes硬件除法NoNoYesYes喚醒中斷控制器NoNoYesYesBitbandingNoNoYesYes單周期DSP/SIMDNoNoNoYes浮點(diǎn)單元NoNoNoYes總線UseAHBbuswrapperAHBLiteAHBLite,APBAHBLite,APB表1-1部分ARM處理器對比廠家產(chǎn)品系列德州儀器(1)LM3Sx系列(M3)

(2)LM4Fxx系列(M4)意法半導(dǎo)體(1)STM32FOxx系列(MO48MHz)

(2)STM32L.xx系列(M332MHz)

(3)STM32Flxx系列(M372MHz)

(4)STM32F2xx系列(M3120MHz)

(5)STM32F4xx系列(M4168MHz)NXP(1)LPC11xx、LPCI2xx系列(MO)

(2)LPCI3xx、LPC17xx、LPC18xx系列(M3)

(3)LPC43xx系列(M4)飛思卡爾KinetisL系列(MO+)

KinetisX系列、K系列(M4)Atmel(1)SAM3S/U/N系列(M3)

(2)SAM4S

系列(M4)

(3)SAM7xx系列(ARM7)

(4)AM9xxx系列(ARM9)英飛凌XCM4000系列(M4,是英飛凌第一次推出ARM架構(gòu)的MCU)以Cortex-M為核的微控制器系列產(chǎn)品第四節(jié)μC/OS-II系統(tǒng)uC/OS-II實(shí)際上是一個實(shí)時操作系統(tǒng)內(nèi)核,只包含了任務(wù)調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間的通信與同步等基本功能。μC/OS-II的任務(wù)調(diào)度是按搶占式多任務(wù)系統(tǒng)設(shè)計(jì)的,即它總是執(zhí)行處于就緒條件下優(yōu)先級最高的任務(wù)。為了簡化系統(tǒng)的設(shè)計(jì),μC/OS-II規(guī)定所有任務(wù)的優(yōu)先級必須不同,任務(wù)的優(yōu)先級同時也唯一地標(biāo)志標(biāo)法了該任務(wù)。即使兩個任務(wù)的重要性是相同的,它們也必須有優(yōu)先級上的差異,這也就意味著高優(yōu)先級的任務(wù)在處理完成后必須進(jìn)人等待或掛起狀態(tài),否則低優(yōu)先級的任務(wù)永遠(yuǎn)也不同能執(zhí)行。系統(tǒng)通過兩種方法進(jìn)行任務(wù)調(diào)度:一是時鐘節(jié)拍或其他硬件中斷到來后,系統(tǒng)會調(diào)用OSIntCrxSw()執(zhí)行切換功能;二是任務(wù)主動進(jìn)人掛起或等待狀態(tài),這時系統(tǒng)通過發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來完成任務(wù)切換,中斷服務(wù)例程或陷阱處理程序的向量地址必須指向函數(shù)OSCtxSw()。μC/OS-II最多可以管理64個任務(wù),這些任務(wù)通常都是一個無限循環(huán)的函數(shù)。在目前的版本中、作者保留優(yōu)先級為0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO的任務(wù),所以用戶可以同時擁有56個任務(wù)。uC/OS-II提供了任務(wù)各種函數(shù)調(diào)用,包括創(chuàng)建任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù)等。系統(tǒng)初始管理的各業(yè)時會自動產(chǎn)生兩個任務(wù):一是空閑任務(wù)OSTaskIdle(),它的優(yōu)先級最低為OS_LOWEST

PRIO。該任務(wù)只是不停地給一個32位的整型變量加一;另一個是統(tǒng)計(jì)任務(wù)OSTaskStat(),它的優(yōu)先級為OS_LOWESTPRIO-1,該任務(wù)每秒運(yùn)行一次,負(fù)責(zé)計(jì)算當(dāng)前CPU的利用率。μC/OS-II操作系統(tǒng)概述μC/OS-II要求用戶提供一個稱為時鐘節(jié)拍的定時中斷,該中斷每秒發(fā)生10至100次,時鐘節(jié)拍的實(shí)際頻率是由用戶控制的。任務(wù)申請延時或超時控制的計(jì)時基準(zhǔn)就是該時鐘節(jié)拍。該時鐘節(jié)拍同時還是任務(wù)調(diào)度的時間基準(zhǔn)。μC/OS-II提供了與時鐘節(jié)拍相關(guān)的系統(tǒng)服務(wù)。允許任務(wù)延時一定數(shù)量的時鐘節(jié)拍或按時分秒、毫秒進(jìn)行延時。對于一個多任務(wù)操作系統(tǒng)來說,任務(wù)間的通信與同步是必不可少的。μC/OS-II提供了四種同步對象,分別是信號量、郵箱、消息隊(duì)列和事件。通過郵箱和消息隊(duì)列還可以進(jìn)行任務(wù)間的通信。所有的同步對象都有相應(yīng)的創(chuàng)建、等待、發(fā)送的函數(shù)。但這些對象一旦創(chuàng)建就不能

刪除,所以要避免創(chuàng)建過多的同步對象以節(jié)約系統(tǒng)資源。為了消除多次動態(tài)分配與釋放內(nèi)存所引起的內(nèi)存碎片,μC/OS-II把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個分區(qū)中都包含整數(shù)大小相同的內(nèi)存塊,但不同分區(qū)之間內(nèi)存塊的大小可以不同。用戶需要動態(tài)分配內(nèi)存時,選擇一個適當(dāng)?shù)姆謪^(qū),按塊來分配內(nèi)存。釋放內(nèi)存時將該塊放回它以前所屬的分區(qū)。這樣,就能有效解決內(nèi)存碎片的問題。μC/OS-II操作系統(tǒng)任務(wù)管理μC/OS-II中最多可以支持64個任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務(wù)和4個最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個。μC/OS-II提供了任務(wù)管理的各種函數(shù)調(diào)用,包括創(chuàng)建任務(wù),刪除任務(wù),改變?nèi)蝿?wù)的優(yōu)先級,任務(wù)掛起和恢復(fù)等。1、創(chuàng)建任務(wù)用戶必須先建立任務(wù),才能讓μC/OS-II來管理用戶的任務(wù)??梢酝ㄟ^傳遞任務(wù)函數(shù)地址和其他參數(shù)到以下兩個函數(shù)之一來建立任務(wù):OSTaskCreate()或OSTaskCrateExt().OSTaskCreateExt()是擴(kuò)展版本,提供了一些附加功能。任務(wù)可以在調(diào)度前建立,也可以在其他任務(wù)的執(zhí)行過程中建立。但是,在開始多任務(wù)調(diào)度前,用戶必須建立至少一個任務(wù)。任務(wù)不能由中斷服務(wù)程序來建立。2、刪除任務(wù)刪除過程就是建立任務(wù)的一個逆過程。刪除任務(wù)是將任務(wù)返回到休眠狀態(tài),并不是把任務(wù)的代碼刪除了,只是任務(wù)不再被μC/OS-II調(diào)用。通過調(diào)用OSTaskDel()可以完成刪除任務(wù)的功能。OSTaskDel()確保所要刪除的任務(wù)并非空閑任務(wù),接著確保不是在中斷服務(wù)程序中刪除任務(wù),并且該任務(wù)是確實(shí)存在的。一旦所有條件滿足后,該任務(wù)的OSTCB將會從所有可能的μC/OS-II的數(shù)據(jù)結(jié)構(gòu)中移去。還需要指出的是,μC/OS-II支持任務(wù)的自我刪除,只要指定參數(shù)為OS-PRIGSELF即可。μC/OS-II操作系統(tǒng)任務(wù)管理3、改變?nèi)蝿?wù)優(yōu)先級在用戶建立任務(wù)時,會分配給任務(wù)一個優(yōu)先級。

在程序運(yùn)行期間,用戶可以通過調(diào)用OSTaskChangePrio()來改變?nèi)蝿?wù)的優(yōu)先級,即μC/OS-II允許用戶動態(tài)的改變?nèi)蝿?wù)的優(yōu)先級。4、掛起任務(wù)任務(wù)的掛起是一個附加的功能,不過它會使系統(tǒng)有更大的靈活性。掛起的任務(wù)是通過OSTaskSuspend()函數(shù)來完成的,被掛起的任務(wù)只能通過調(diào)用OSTaskResume()函數(shù)來恢復(fù)。如果任務(wù)被掛起的同時已經(jīng)在等待事件的發(fā)生或延時的期滿,則這個任務(wù)再次進(jìn)入就緒狀態(tài)就需要兩個條件:事件的發(fā)生或延時的期滿和其他任務(wù)的喚醒。任務(wù)可以掛起除空閑任務(wù)外的所有任務(wù),包括任務(wù)本身。5、恢復(fù)任務(wù)OSTaskResume()用于恢復(fù)被OSTakSuspend掛起的任務(wù)。OSTaskResume()的首要工作也是檢查所要恢復(fù)任務(wù)的合法性,然后通過清除OSTCBStat域中的OS.STAT.SUSPEND位來取消掛起。要置任務(wù)為就緒狀態(tài),還必須檢查OSTCBDly的值,這是因?yàn)樵贠STCBStat中沒有任何標(biāo)志表明任務(wù)正在等待延時期滿。只有當(dāng)以上兩個條件都滿足時,任務(wù)才處于就緒狀態(tài)。最后,任務(wù)調(diào)度程序會檢查被恢復(fù)任務(wù)的優(yōu)先級是否比調(diào)用本函數(shù)任務(wù)的優(yōu)先級高來決定是否需要調(diào)度。μC/OS-II操作系統(tǒng)時間管理μC/OS-II提供了若干個時間管理服務(wù)函數(shù),可以滿足任務(wù)在運(yùn)行過程中對時間管理的需求。在使用時間管理服務(wù)函數(shù)時,必須十分清楚一個事實(shí):時間管理服務(wù)函數(shù)是以系統(tǒng)節(jié)拍為處理單位的,實(shí)際的時間與希望的時間是有誤差的,最壞的情況下誤差接近一個系統(tǒng)節(jié)拍。因此時間管理服務(wù)函數(shù)只能用在對時間精度要求不高的場合,或者時間間隔較長的場合。μC/OS-II中,時間管理主要將任務(wù)進(jìn)行延時,進(jìn)入等待狀態(tài),以及取消延時,結(jié)束等待。下面按節(jié)拍延時函數(shù)、時分秒延時函數(shù)、恢復(fù)延時函數(shù)、系統(tǒng)時間的獲取與設(shè)定來逐一介紹。1、按節(jié)拍延時函數(shù)μC/OS-II系統(tǒng)服務(wù)的特點(diǎn)是,申請?jiān)摲?wù)的任務(wù)可以延時一段時間,這段時間的長短是用時鐘節(jié)拍的數(shù)目來確定的。實(shí)現(xiàn)這個系統(tǒng)服務(wù)的函數(shù)是OSTimeDly()。調(diào)用該函數(shù)會使μC/OS-II進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒狀態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時間期滿或有其他任務(wù)通過調(diào)用OSTimeDyResume()取消了延時,它就會馬上進(jìn)入就緒狀態(tài)。注意,只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級時,它才會立即運(yùn)行。μC/OS-II操作系統(tǒng)時間管理1、按節(jié)拍延時函數(shù)VoidOSTimeDly(INTI6Uticks){if(ticks>0){

OS_ENTERCRITICAL();if

((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBiX)==0){

OSRdyGrp&=~OSTCBCur->OSTCBBitY;}OSTCBCur->OSTCBDly=ticks;OS_EXIT_CRITICAL();

OSSched();

}}μC/OS-II操作系統(tǒng)時間管理2、按時分秒延時函數(shù)OSTimeDlyHMSM()與OSTmeDly()一樣,也是一個延時函數(shù),但OSTmeDlyHMSM()函數(shù)可以按小時、分、秒和毫秒來定義時間,而OSTimeDly()需要知道延時時間對應(yīng)的時鐘節(jié)拍的數(shù)目。調(diào)用OSTimeDyIMSM函數(shù)同樣會使μC/OS-II進(jìn)行一次任務(wù)調(diào)度,

并且執(zhí)行下一個優(yōu)先級最高的就緒狀態(tài)任務(wù)。任務(wù)調(diào)用OSTmeDlyHMSM()后,一旦規(guī)定的時間期滿或有其他任K通過調(diào)用OSTimepDlyResume()取消了延時,它立刻處于就緒狀態(tài)。同樣,只有當(dāng)該任務(wù)在所有就緒狀態(tài)任務(wù)中具有最高的優(yōu)先級時,它才會立即運(yùn)行。

μC/OS-II操作系統(tǒng)時間管理2、按時分秒延時函數(shù)INT8UOSTimeDlyHMSM(INT8Uhours,INT8Uminutes,INT8Useconds,INT16U

milli){INT32Uticks;INT16Uloops;if(hours>0||minutes>0||seconds>0||Imilli>0){if(minutes>59){

return(OS_TIME_INVALID_MINUTES);}if(seconds>59){

return(OS_TIME_INVALID_SECONDS);}if(milli>999){return(OS_TIME_JNVALID_MILLI);}ticks=(INT32U)hours*3600L*OS_TICKS_PER_SEC+(INT32U)minutes*60L*OS_TICKS_PER_SEC+(INT32U)seconds*OS_TICKS_PER_SEC+OS_TICKS_PER_SEC*((INT32U)milli+500L/OS_TICKS_PER_SEC)/1000L;loops=ticks/65536L;ticks=ticks%65536L;OSTimeDly(ticks);while(loops>0){OSTimeDly(32768);OSTimeDly(32768);loops--;}return(OS_NO_ERR);}else{return(OS_TIMEZERO_DLY);}}

μC/OS-II操作系統(tǒng)時間管理3、恢復(fù)延時函數(shù)μC/OS-II允許用戶結(jié)束延時時正處于延時期的任務(wù)。延時的任務(wù)可以不等待延時期滿,而是通過其他任務(wù)取消延時來使自己處于就緒狀態(tài),這可以通過調(diào)用OSTimeDlyResumne()和指定要恢復(fù)任務(wù)的優(yōu)先級來實(shí)現(xiàn)。4、系統(tǒng)時間μC/OS-II的時間管理是通過定時中斷來實(shí)現(xiàn)的,該定時中斷一般為10毫秒或100毫秒發(fā)生一次,時間頻率取決于用戶對硬件系統(tǒng)的定時器編程來實(shí)現(xiàn)。中斷發(fā)生的時間間隔是固定不變的,該中斷也成為一個時鐘節(jié)拍。μC/OS-II要求用戶在定時中斷的服務(wù)程序中,調(diào)用系統(tǒng)提供的與時鐘節(jié)拍相關(guān)的系統(tǒng)函數(shù),例如中斷級的任務(wù)切換函數(shù),系統(tǒng)時間函數(shù)。

μC/OS-II操作系統(tǒng)時間管理4、系統(tǒng)時間INT8UOSTimeDlyResume(INT8Uprio){OS_TCB*ptcb;if

(prio>=OS_LOWEST_PRIO){

return(OS_PRIO_INVALID);}OS_ENTER_CRITICAL();

ptcb=(OS_TCB*)OSTCBPrioTbl[prio];if(ptcb!=(OS_TCB*)0){if(ptcb->OS_TCBDly!=0){

ptcb->OS_TCBDly=0;

if(!(ptcb->OS_TCBStat&OS_STAT_SUSPEND)){

OS_RdyGrp|=ptcb->OSTCBBitY;

OS_RdyTbl[ptcb->OS_TCBY]|=ptcb->OS_TCBBitX;OS_EXITCRITICAL();

OS_Sched();}else{OS_EXIT_CRITICAL();}return(OS_NO_ERR);

}else{OS_EXIT_CRITICAL();eturn(OS_TIME_NOT_DLY);

}}else{

OS_EXIT_CRTTICAL();return(OS_TASK_NOT_EXIST);}

}

μC/OS-II操作系統(tǒng)移植

所謂移植,就是使一個實(shí)時內(nèi)核能在某個微處理器或微控制器上運(yùn)行。移植分為處理器移植和編譯器移植兩種。處理器移植是把μC/OS-II移植到不同的處理器上,使其能夠在不同的目標(biāo)平臺運(yùn)行。編譯器移植則是使μC/OS-II符合目標(biāo)編譯器的語法規(guī)則,從而讓用獲得編譯后的目標(biāo)代碼。編譯器移植的出現(xiàn)主要是因?yàn)橥环N處理器可能會存在多種編譯工具(如LAR和ADS)每種編譯工具的語法規(guī)則可能稍有不同,這些不同直接影響了μC/OS-II源碼在不同編譯工具下的通用性。編譯器移植相對簡單,通常所說的移植是指處理器移植。1、移植條件(1)處理器的C編譯器能產(chǎn)生可重入代碼。可重入的代碼指的是一個段代碼(如一個函數(shù))可以被多個任務(wù)同時調(diào)用,而不必?fù)?dān)心數(shù)據(jù)被破壞。也就是說,可重入型函數(shù)在任何時候都可以被中斷,函數(shù)中的數(shù)據(jù)不會因?yàn)樵诤瘮?shù)中斷時被其他的任務(wù)重新調(diào)用而受到影響,過一段時間后,它又可以繼續(xù)運(yùn)行。μC/OS-II操作系統(tǒng)移植

(2)用C語言就可以打開或關(guān)閉中斷。在μC/OS-II中,可以通過OS_ENTER_CRITICAL()或OS_EXIT_CRTICAL()宏來控制系統(tǒng)關(guān)閉或打開中斷,這需要處理器的支持。(3)處理器支持中斷并能產(chǎn)生定時中斷(通常在10Hz到100Hz之間)。μC/OS-II是通過處理器產(chǎn)生的定時器中斷來實(shí)現(xiàn)多任務(wù)之間的調(diào)度的。(4)處理器支持對CPU相關(guān)寄存器進(jìn)行堆棧操作的指令。在μC/OS-II進(jìn)行任務(wù)調(diào)度時,會把當(dāng)前任務(wù)的CPU寄存器存放到此任務(wù)的堆棧中,然后再從另一個任務(wù)的堆棧中恢復(fù)原來的工作寄存器,繼續(xù)運(yùn)行另一個任務(wù)。所以,寄存器的人棧和出棧是μC/OS-II多任務(wù)調(diào)度的基礎(chǔ)。2、移植步驟在選定了系統(tǒng)平臺和開發(fā)工具后,進(jìn)行μC/OS-II的移植工作一般需要遵循以下的5個步驟:深入了解所采用的系統(tǒng)核心;分析所采用的C語言開發(fā)工具的特點(diǎn);編寫移植代碼;進(jìn)行移植的測試;針對項(xiàng)目的開發(fā)平臺封裝服務(wù)函數(shù)。μC/OS-II操作系統(tǒng)移植

移植步驟:第(1)步建立一個最基本的包含μC/OS-II的工程;第(2)步到第(4)步依次實(shí)現(xiàn)OS_CPU.H,OS_CPU_C.C和OS_CPU_A.ASM文件,這3個文件的完成意味著主要的移植工作已經(jīng)結(jié)束,剩下的任務(wù)就是測試移植是否成功;第(5)步編寫μC/OS-II啟動相關(guān)的代碼并建立相關(guān)應(yīng)用任務(wù),為μC/OS-II的測試做好準(zhǔn)備;第(6)步編譯整個系統(tǒng),對不符合編譯器語法規(guī)則的語句進(jìn)行修改,完成編譯器移植,并得到可執(zhí)行代碼;第(7)步運(yùn)行μC/OS–II。為了保證可移植性,程序中沒有直接使用C語言中的short、int和long等數(shù)據(jù)類型,因?yàn)樗鼈兣c處理器類型有關(guān),隱含著不可移植性,程序中自己定義了一套數(shù)據(jù)類型。在STM32處理器及keilMDK或IAR編譯環(huán)境中可以通過查手冊得知short類型是16位的,而int類型是32位的,這與Cortex-M3內(nèi)核是一致的。因此這部分代碼無須修改。盡管μC/OS-II定義了float類型和double類型,但為了方便移植,它們在μC/OS-II源代碼中并未使用。為了方便使用堆棧,μC/OS-II定義了一個堆棧數(shù)據(jù)類型。在CM3中,寄存器為32位的,故定義堆棧的單位數(shù)據(jù)長度也為32位。μC/OS-II操作系統(tǒng)步驟

μC/OS–IIv2.52的源代碼按照移植要求分為需要修改部分和不需要修改部分。其中需要修改源代碼的文件包括頭文件OS_CPU_H、C語言文件OS_CPU.C以及匯編格式文件OS_CPU_A.ASM。第一步:修改頭文件OS_CPU.H第二步:修改C語言文件OS_CPU.C第三步:修改匯編語言文件OS_CPU_A.ASMTHANKSSTM32單片機(jī)原理及應(yīng)用主講人:

第二章STM32體系結(jié)構(gòu)教學(xué)基本內(nèi)容:微處理器核結(jié)構(gòu)、存儲器映射、電源、時鐘及復(fù)位電路、指令集、流水線、異常與中斷本章主要教學(xué)要求:熟悉STM32的體系結(jié)構(gòu)、基本電路、指令集、中斷以及對實(shí)例的一些分析第一節(jié)微處理器核結(jié)構(gòu)(了解)第二節(jié)存儲器映射(了解)第三節(jié)電源、時鐘及復(fù)位電路(重點(diǎn))第四節(jié)指令集(了解)第五節(jié)流水線(了解)第六節(jié)異常與中斷(重點(diǎn))第一節(jié)微處理器核結(jié)構(gòu)ARMCortex-M3是一款高效能、低功耗、低成本的處理器。其采用了哈佛結(jié)構(gòu),并選擇了適合于微控制器應(yīng)用的三級流水線作基礎(chǔ),主要用于完成需優(yōu)秀中斷響應(yīng)特性的深度嵌入式應(yīng)用。ARMCortex-M3內(nèi)核Cortex-M3是一個32位處理器內(nèi)核,其內(nèi)部的數(shù)據(jù)路徑、寄存器、存儲器接口均為32位。而CM3采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和控制總線,這一特征使得它能夠使取指與數(shù)據(jù)訪問并行不悖。這樣一來,由于數(shù)據(jù)訪問不再占用指令總線,便提升了CM3的性能。而為了實(shí)現(xiàn)這個特征,CM3內(nèi)部包含了好幾條總線接口,每條都為自己的應(yīng)用場合優(yōu)化過,并且它們能夠并行工作。但是另一方面,指令總線和數(shù)據(jù)總線是共享同一個存儲器空間(一個統(tǒng)一的存儲器系統(tǒng))的。換句話說,并不會因?yàn)橛袃蓷l總線,就使其尋址空間變?yōu)?GB。ARMCortex-M3的結(jié)構(gòu)主要包括了一個處理器核、嵌套向量中斷控制器NVIC、多個高性能總線接口以及一個可選的存儲器保護(hù)單元MPU。其處理器系統(tǒng)方框圖如下左圖所示。Cortex-M3處理器內(nèi)核是嵌入式微控制器的中央處理單元。然而,完整的基于Cortex-M3的微控制器還需要很多的其他部件,如下右圖為Cortex-M3內(nèi)核基本結(jié)構(gòu)。處理工作模式及狀態(tài)處理操作模式總共分為兩種:線程模式(Threadmode)和處理者模式(Handlermode)。當(dāng)處理器處于復(fù)位狀態(tài)時,處理器默認(rèn)進(jìn)入線程模式,而當(dāng)處理器返回異常的情況下,處理器也會進(jìn)入線程模式。在線程模式下,特權(quán)級(privileged)代碼或是非特權(quán)級(unprivileged)代碼均可運(yùn)行。處理器在異常情況下會進(jìn)入處理者模式,此種情況下的所有代碼都是運(yùn)行在特權(quán)級。處理器可以工作在以下兩種操作狀態(tài):(1)Thumb狀態(tài):這是一個常規(guī)執(zhí)行狀態(tài),運(yùn)行16位和32位半字節(jié)對齊Thumb指令。(2)Debug狀態(tài):此狀態(tài)為處理器在停機(jī)調(diào)試的狀態(tài)。處理器的訪問模式分為:特權(quán)訪問和用戶訪問。Cortex-M3中提供了一種存儲器訪問的保護(hù)機(jī)制,使得普通用戶的程序代碼不能意外地或惡意地執(zhí)行涉及要害的操作,因此處理器為程序賦予兩種權(quán)限,分別為特權(quán)級和用戶級。代碼可在特權(quán)級和非特權(quán)級條件下執(zhí)行。不同的是,在非特權(quán)級條件執(zhí)行下時,將會限制或排除對某些資源的訪問。而在特權(quán)級條件下執(zhí)行時,所有資源均有權(quán)訪問。因此,處理者模式總是在特權(quán)級下的,而線程模式則可在特權(quán)級或非特權(quán)級下。如下圖所示。寄存器R0通用寄存器低組寄存器R1通用寄存器R2通用寄存器R3通用寄存器R4通用寄存器R5通用寄存器R6通用寄存器R7通用寄存器R8通用寄存器高組寄存器R9通用寄存器R10通用寄存器R11通用寄存器R12通用寄存器R13(MSP、PSP)主堆棧指針(MSP)進(jìn)程堆棧指針(PSP)R14鏈接寄存器(LR)R15程序狀態(tài)寄存器(PC)ARMCoretx-M3處理器寄存器集其中:1、13個為32位的通用寄存器:R0~R12;2、3個為特殊寄存器:R13~R15(表2-2為功能定義,圖2-4為功能描述)。(1)兩個分段堆棧指針寄存器:堆棧指針SP,即R13,包含了兩個堆棧指針(進(jìn)程堆棧指針和主堆棧指針);(2)鏈接寄存器LR:R14;(3)程序計(jì)數(shù)器PC:R15;(4)程序狀態(tài)寄存器xPSR;(6)異常中斷寄存器;(7)控制寄存器。寄存器寄存器功能

xPSR記錄ALU標(biāo)志(0標(biāo)志,進(jìn)位標(biāo)志,負(fù)數(shù)標(biāo)志,溢出標(biāo)志),執(zhí)行標(biāo)志,以及當(dāng)前正服務(wù)的中斷號PRIMASK除能所有的中斷,不可屏蔽中斷(NMI)才不甩它FAULTMASK除能所有的fault——NMI依然不受影響,而被除能的faults會“上訪”BASEPRI除能所有優(yōu)先級不高于某個具體數(shù)值的中斷CONTROL定義特權(quán)狀態(tài),并且決定使用哪一個堆棧指針特殊功能寄存器功能定義特殊功能寄存器的功能描述寄存器1、通用寄存器R0~R12為通用寄存器,沒有特殊體系結(jié)構(gòu)定義的用途,它們的字長都是32位。絕大多數(shù)的指令都可以指定通用寄存器R0—R12,因此它們是兼容性最高的一類寄存器。(1)R0~R7:低寄存器,所有指令均可訪問。復(fù)位后的初始值是隨機(jī)的。(2)R8~R12:高寄存器,所有32位Thumb指令均可訪問,但是16位Thumb指令不可訪問。復(fù)位后的初始值是隨機(jī)的。2、堆棧指針R13堆棧指針SP:寄存器R13用作堆棧指針SP(StackPointer)。由于SP忽略寫入位[1;0],堆棧指針的最低兩位永遠(yuǎn)為0,所以它按照四個字節(jié)邊界自動對齊一個字。處理器模式總是使用主堆棧指針,即SP_main,但是可以配置線程模式使用進(jìn)程堆棧指針(SP_process)或主堆棧指針(SP_main)。(1)主堆棧指針MSP:復(fù)位后缺省堆棧指針,用于操作系統(tǒng)內(nèi)核操作和異常處理例程。(2)進(jìn)程堆棧指針PSP:由用戶的應(yīng)用程序代碼使用。在同一時刻,只能看到一個SP指針,這也就是所謂“banked”寄存器。使用兩個堆棧的目的是為了防止用戶堆棧的溢出影響系統(tǒng)核心代碼(如操作系統(tǒng)內(nèi)核)的運(yùn)行。寄存器3、堆棧寄存器R14寄存器R14是子程序鏈接寄存器(LR)。當(dāng)調(diào)用子程序時,由R14存儲返回地址;如果子程序多于1級,則需要把前一級的R14壓入堆棧。當(dāng)分支和鏈接(BL)指令或分支和鏈接交換(BLX)指令執(zhí)行時,LR接收來自PC的返回地址,即LR用于在調(diào)用子程序時存儲返回地址,同時LR也可用于異常返回。LR的最低有效位是可讀/寫的,這是歷史遺留的產(chǎn)物,因?yàn)樵谝郧?,由?來指示ARM/Thumb狀態(tài)。因?yàn)橛行〢RM處理器支持ARM和Thumb狀態(tài)并存,為了方便匯編程序移植,所以Cortex-M3需要允許最低有效位可讀/寫。在其他狀態(tài)下,可把R14當(dāng)作通用寄存器使用。4、程序計(jì)數(shù)器R15寄存器R15是程序計(jì)數(shù)寄存器(PC)讀PC值,返回的是當(dāng)前指令地址+4;如果修改它,就能改變程序的執(zhí)行流;在分支時,無論直接寫PC,還是使用分支指令,都必須保證加載到PC的數(shù)值是奇數(shù)(即LSB=1),用以表明是在Thumb狀態(tài)下執(zhí)行的,如果為0,將產(chǎn)生fault。R15寄存器的位[0]始終為0,因此指令始終是按照字邊界或半字邊界對齊。寄存器5、程序狀態(tài)寄存器程序狀態(tài)寄存器(xPSR)在內(nèi)部可分為3個子狀態(tài)寄存器-應(yīng)用程序PSR(APSR)-中斷號PSR(IPSR)-執(zhí)行PSR(EPSR)313029282726:252423:2019:1615:10987654:0APSRNZCVQIPSRExceptionNumberEPSRICI/ITTICI/IT表2-3程序狀態(tài)寄存器(xPSR)位名稱定義[31]N負(fù)數(shù)或小于標(biāo)志。1:結(jié)果為負(fù)數(shù)或小于;0:結(jié)果為正數(shù)或大于[30]Z零標(biāo)志。1:結(jié)果為0;0:結(jié)果非0[29]C進(jìn)位/借位標(biāo)志。1:進(jìn)位或借位;0:無進(jìn)位或借位[28]V溢出標(biāo)志。1:溢出;0:無溢出[27]QStickysaturation標(biāo)志[26:25][15:10]TTIf-Then位。它是If-Then指令的執(zhí)行狀態(tài)位,包含IF-Then模塊的指令數(shù)目和它的執(zhí)行條件ICI可中斷/可繼續(xù)指令位[24]TT位使用一條可相互作用的指令來清零,也可以使用異常出棧操作來清零。當(dāng)T位為0執(zhí)行指令會引起INVSTATE異常[23:16]-[9]-[8:0]ISRNUMBER中斷號程序狀態(tài)寄存器(xPSR)的位定義寄存器6、異常中斷寄存器異常中斷寄存器的功能描述:PRIMASK:1位寄存器。當(dāng)置位時,它允許NMI和硬件默認(rèn)異常,所有其他的中斷和異常將被屏蔽。FAULTMASK:1位寄存器。當(dāng)置位時,它只允許NMI,所有中斷和默認(rèn)異常處理被忽略。BASEPRI:9位寄存器。它定義了屏蔽優(yōu)先級。當(dāng)它置位時,所有同級的或低級的中斷被忽略。7、控制寄存器控制寄存器有兩個用途,定義特權(quán)級別和選擇當(dāng)前使用的堆棧指針,并由兩個位來行使這兩個職能,如下表所示。位功能CONTROL[1]堆棧指針選擇0=選擇主堆棧指針MSP(復(fù)位后的缺省值)1=選擇進(jìn)程堆棧指針PSP在線程或基礎(chǔ)(沒有在響應(yīng)異?!g注),可以使用PSP。在handler模式下,只允許使用MSP,所以此時不得往該位寫1。CONTROL[1]0=特權(quán)級的線程模式1=用戶級的線程模式Handler模式永遠(yuǎn)都是特權(quán)級的。控制寄存器寄存器名稱功能寄存器名稱功能MSP主堆棧指針xPSRAPSR、EPSR和IPSR的組合PSP進(jìn)程堆棧指針PRIMASK中斷屏蔽寄存器LR鏈接寄存器BASEPRI可屏蔽等于和低于某個優(yōu)先級的中斷APSR應(yīng)用程序狀態(tài)寄存器FAULTMASK錯誤屏蔽寄存器IPSR中斷狀態(tài)寄存器CONTROL控制寄存器EPSR執(zhí)行狀態(tài)寄存器Cortex-M3寄存器總表總線接口ARMCortex-M3處理器集成了一個AMBAAHB-Lite總線來連接系統(tǒng)外設(shè),并使系統(tǒng)集成更為簡單化。AMBA規(guī)范主要包括AHB系統(tǒng)總線和APB外設(shè)總線,二者分別適用于高速與相對低速設(shè)備的連接??偩€矩陣支持不對稱的數(shù)據(jù)訪問,使不同的數(shù)據(jù)類型能夠在存儲器中無縫銜接(不因數(shù)據(jù)需要對齊而留出了空隙),這樣一來便大幅地降低了SRAM的需求和系統(tǒng)成本。處理器一共包含5個總線:I-Code總線、D-Code總線、系統(tǒng)總線、外部專用外設(shè)總線、內(nèi)部專用私有總線。左圖為Cortex-M3的內(nèi)部結(jié)構(gòu)及總線連接與此同時,總線接口還控制以下情況:(1)不對齊訪問??偩€矩陣能把不對齊的處理器訪問轉(zhuǎn)化為對齊的訪問。(2)位綁定。總線矩陣能夠把位綁定的別名(alias)訪問轉(zhuǎn)換成位綁定的區(qū)域訪問。并完成如下操作:1、對位綁定的裝載,提取位域;2、對位綁定的存儲,讀-修改-寫變成原子操作;3、寫緩沖??偩€矩陣有一個寫緩沖器,使得總線等待脫離處理器內(nèi)核。第二節(jié)存儲器映射2.1存儲器格式存儲器的格式分為大端格式和小端格式。大端格式:在這種格式中,字?jǐn)?shù)據(jù)的高字節(jié)存儲在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。小端格式:與大端格式相反,在小端格式中,低地址中存放的時字?jǐn)?shù)據(jù)的低字節(jié);高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。2.2存儲器結(jié)構(gòu)ROM和RAM指的都是半導(dǎo)體存儲器。ROM在系統(tǒng)停止供電時仍可以保持?jǐn)?shù)據(jù),而RAM通常都是在停止供電后就直接丟失了數(shù)據(jù),典型的RAM就是計(jì)算機(jī)的內(nèi)存。第二節(jié)存儲器映射2.2存儲器結(jié)構(gòu)RAM有兩大類,一種稱為靜態(tài)RAM(StaticRAM,SRAM),SRAM速度非常快,是目前讀/寫速度最快的存儲設(shè)備,但同時它的價格也非常昂貴,所以只在要求很苛刻的地方使用,另一種稱為動態(tài)RAM(DynamicRAM,DRAM),DRAM保留數(shù)據(jù)的時間很短,讀/寫速度也比SRAM慢,不過它還是比ROM的讀速度都要快。ROM也有很多種,如PROM,EPROM(可擦除編程ROM)和EEPROM(電可擦除可編程ROM)等。PROM早期的產(chǎn)品,軟件下載后就無法修改了,是一次性的;EPROM可通過紫外線的照射擦除已保存的程序;EEPROM具有電擦除功能,價格很高,寫入時間很長,寫人很慢。Flash存儲器又稱閃存,它結(jié)合了ROM和RAM的長處,不僅具備電可擦除可編程(EEPROM特點(diǎn))的性能,還不會因斷電而丟失數(shù)據(jù),同時可以快速讀取數(shù)據(jù),U盤和MP3里用的就是這種存儲器。目前Flash主要有兩種,分別為NORFlash和NANDFlash,NORFlash的讀取和常見的SDRAM的讀取相同,用戶可以直接運(yùn)行裝載在NORFlash中的代碼,這樣可以減少SRAM的容量從而節(jié)約了成本。NANDFlash沒有采取內(nèi)存的隨機(jī)讀取技術(shù),它的讀取是以一次讀取一塊的形式來進(jìn)行的,通常是一次讀取512B,采用這種技術(shù)的Flash比較廉價。第二節(jié)存儲器映射2.3Cortex-M3存儲器組織Cortex-M3的存儲系統(tǒng)采用統(tǒng)一的編址方式,如右圖為ARMCoetex-M3存儲器組織。Cortex-M3預(yù)先定義好了“粗線條的”存儲器映射,通過把片上外設(shè)的寄存器映射到外設(shè)區(qū),這樣一來,就可以簡單地以訪問內(nèi)存的方式來訪問這些外設(shè)的寄存器,從而來控制外設(shè)的工作。這種預(yù)定義的映射關(guān)系也可以對訪問速度進(jìn)行優(yōu)化,而且使得片上系統(tǒng)的設(shè)計(jì)更易集成。第二節(jié)存儲器映射2.3STM32存儲器映射STM32的總線結(jié)構(gòu)如右圖。Cortex-M3不同于其他ARM系列的處理器,它的存儲器映射表已經(jīng)在內(nèi)核設(shè)計(jì)時固定好,不能由芯片廠商更改。第二節(jié)存儲器映射2.3STM32存儲器映射存儲器空間第三節(jié)電源、時鐘及復(fù)位電路3.1電源電路一、供電方案右圖為STM32電源電路結(jié)構(gòu)圖。內(nèi)部穩(wěn)壓器為內(nèi)核提供1.8V的數(shù)字電源,當(dāng)關(guān)閉VDD電源后,可以通過VBAT引腳為實(shí)時時鐘(RTC)和后備寄存器供電。1、數(shù)字部分VDD接2.0~3.6V的直流電源。通常接3.3V,供I/O端口等接口使用。內(nèi)置的電壓調(diào)節(jié)器提供CM3處理器所需的1.8V電源,即把外電源提供的3.3V轉(zhuǎn)換成1.8V。在復(fù)位后的電壓調(diào)節(jié)器總是處于使能狀態(tài)。根據(jù)應(yīng)用模式的不同,它可工作在三種不同的模式:①運(yùn)行模式,電壓調(diào)節(jié)器為整個1.8V區(qū)域(內(nèi)核,存儲器和數(shù)字外設(shè))供電;②停止模式,電壓調(diào)節(jié)器以低功耗模式為1.8V區(qū)域供電,用于保留寄存器和SRAM的內(nèi)容;③待機(jī)模式,電壓調(diào)節(jié)器關(guān)閉。除待機(jī)電路和備份區(qū)域外,其他寄存器和SRAM的內(nèi)容將會丟失。第三節(jié)電源、時鐘及復(fù)位電路3.1電源電路右圖為STM32電源電路結(jié)構(gòu)圖。2、模擬部分為了提高轉(zhuǎn)換精度,ADC擁有一個獨(dú)立的電源供電,以便對來自PCB上的電源噪聲進(jìn)行單獨(dú)過濾和屏蔽。采用獨(dú)立的ADC供電輸入引腳VDDA和獨(dú)立的接地引腳VSSA,在擁有VREF-引腳的器件中,VREF-必須連接到VSSA。在擁有VREF+和VREF-引腳的器件中,為保證在低電壓輸入時有更好的轉(zhuǎn)換精度,可以通過VREF+和VREF-引腳外接參考電壓,參考電壓的范圍為2.4~3.6V。在沒有VREF+和VREF-引腳的器件中,這兩個引腳在內(nèi)部連接到VDDA和VSSA。3、備份部分為了保證VDD關(guān)斷后備份寄存器和RTC的正常工能,可以將VBAT連接到外部電池或其他的電源上。VBAT為RTC單元、LSE振蕩器和PC13~PC15供電,在主數(shù)字電源(VDD)關(guān)閉后維持PTC的運(yùn)行。芯片內(nèi)部復(fù)位模塊的掉電復(fù)位電路控制VBAT的開關(guān)。在沒有使用外部電池的情況下,推薦將VBAT連接到VDD。第三節(jié)電源、時鐘及復(fù)位電路3.1電源電路二、電源管理器電源管理器硬件組成包括兩個部分,即電源的上電復(fù)位(POR)和掉電復(fù)位(PDR)部分,以及可編程電壓檢測器(PVD)部分??删幊屉妷罕O(jiān)測器監(jiān)視VDD供電電壓與PVD閾值(如圖2-10所示)比較,當(dāng)VDD低于或高于PVD閾值時,將產(chǎn)生中斷,中斷處理程序可以發(fā)出警告信息或?qū)⑽⒖刂破鬓D(zhuǎn)入安全模式。對PVD的控制可通過對電壓與電源控制寄存器(PWR_CR)寫相應(yīng)控制值來完成??删幊屉妷罕O(jiān)測器監(jiān)視VDD供電電壓與PVD閾值第三節(jié)電源、時鐘及復(fù)位電路3.1電源電路三、低功耗模式在系統(tǒng)或電源復(fù)位后,微控制器處于運(yùn)行狀態(tài)。當(dāng)處理器不需要繼續(xù)運(yùn)行時,可以利用多種低功耗模式來節(jié)省功耗。用戶需要根據(jù)最低電源消耗、最快速啟動時間、處理器外部外設(shè)、SRAM和寄存器供電的電源和時鐘進(jìn)行控制操作。低功耗模式分為睡眠模式(Sleepmode)、停止模式(Stopmode)和待機(jī)模式(Standbymode)。模式進(jìn)入喚醒對1.8V區(qū)域時鐘的影響對VDD區(qū)域時鐘的影響電壓調(diào)節(jié)器睡眠WFI任一中斷CPU時鐘關(guān),對其他時鐘和ADC時鐘無影響無開WFE喚醒事件停止模式PDDS和LPDS位+SLEEPDEEP位+WFI或WFE任一外部中斷(在外部中斷寄存器中設(shè)置)選擇性提供1.8VHSI和HSE的振蕩器關(guān)閉開啟或處于低功耗模式(由PWR_CR設(shè)定)待機(jī)模式PDDS位+SLEEPDEEP位+WFI或WFEWKUP引腳的上升沿、RTC鬧鐘事件、NRST引腳上的外部復(fù)位、IWDG復(fù)位關(guān)閉所有的1.8V區(qū)域的時鐘關(guān)低功耗模式對比第三節(jié)電源、時鐘及復(fù)位電路3.2時鐘電路STM32MCU的時鐘樹如右圖所示。系統(tǒng)時鐘樹由系統(tǒng)時鐘源、系統(tǒng)時鐘和設(shè)備時鐘等部分組成。一、系統(tǒng)時鐘源有4個:1、高速外部時鐘HSE高速外部時鐘信號(HSE)由以下兩種時鐘源產(chǎn)生。①HSE外部時鐘在這個模式里,必須提供外部時鐘。它的頻率最高可達(dá)25MHZ。用戶可通過設(shè)置時鐘信號控制寄存器RCC_CR中的HSRBYP位和HSEON位來選擇這一模式。外部時鐘信號必須連接到OSC_IN引腳,同時保證OSC_OUT引腳懸空(為高阻狀態(tài))。②HSE外部晶體/陶瓷諧振器使用4~16MHZ外部振蕩器能夠?yàn)橄到y(tǒng)提供更為精確的主時鐘。HSE晶體可以通過設(shè)置時鐘控制寄存器里RCC_CR中的HSEON位被啟動和關(guān)閉。注:諧振器和負(fù)載電容需要盡可能靠近振蕩器引腳,以減小輸出失真和啟動穩(wěn)定時間。負(fù)載電容值必須根據(jù)選定的晶振進(jìn)行調(diào)節(jié)。第三節(jié)電源、時鐘及復(fù)位電路3.2時鐘電路2、高速內(nèi)部時鐘HSIHSI時鐘由8MHZ的RC振蕩器產(chǎn)生,可直接作為系統(tǒng)時鐘或在2分頻后作為PLL輸入。HSI的RC振蕩器能夠在不需要任何外部器件的條件下提供系統(tǒng)時鐘。它的啟動時間比HSE晶體振蕩管短。然而,即使在校準(zhǔn)后,它的時鐘頻率精度仍較差。如果用戶的應(yīng)用基于不同的電壓或環(huán)境溫度,這將會影響RC振蕩器的精度??梢酝ㄟ^時鐘控制寄存器里的HSITRIM[4:0]位來調(diào)整HSI的頻率。如果HSE晶體振蕩器失效,HSI時鐘會被作為備用時鐘源。3、低速外部時鐘LSELSE是低速外部時鐘,接頻率為32.768KHZ的石英晶體(其中,低速外部時鐘源LSE可由以下兩個時鐘源產(chǎn)生⑴LSE用外部時鐘⑵LSE外部晶體/陶瓷諧振器),它可以為實(shí)時時鐘或其他定時功能提供一個低功耗且精確的時鐘源。LSE晶體通過在備份域控制寄存器(RCC_BDCR)里的LSEON位啟動和關(guān)閉。4、低速內(nèi)部時鐘LSILSI是一個低功耗時鐘源,它可以在停機(jī)模式或待機(jī)模式下保持運(yùn)行,位獨(dú)立看門狗和自動喚醒單元提供時鐘。LSI時鐘頻率大約為40KHZ(在30KHZ和60KHZ之間)。LSI可以通過控制/狀態(tài)寄存器(RCC_CSR)中的LSION位來啟動或關(guān)閉。在控制/狀態(tài)寄存器(RCC_CSR)中的LSIRDY位指示低速內(nèi)部振蕩器是否穩(wěn)定。在啟動階段,直到這個位被硬件設(shè)置為1后,此時鐘才被釋放。如果在時鐘中斷寄存器(RCC_CIR)中被允許。將產(chǎn)生LSI中斷申請。第三節(jié)電源、時鐘及復(fù)位電路3.2時鐘電路總結(jié),四種主要時鐘的頻率如下所示:①HSE振蕩器時鐘,外部時鐘,頻率范圍為4~16MHZ,常用值為8MHZ。②HSI振蕩器時鐘,內(nèi)部8MHZ時鐘,可直接作為系統(tǒng)時鐘或在2分頻后作為PLL輸入。③LSE時鐘,外部32.768KHZ時鐘。④LSI時鐘,內(nèi)部40KHZ時鐘。對于時鐘設(shè)計(jì),需要先考慮系統(tǒng)時鐘的來源,是內(nèi)部時鐘、外部晶振,還是外部的振蕩器,是否需要PLL;然后自再考慮內(nèi)部總線和外部總線,最后考慮外設(shè)的時鐘信號。應(yīng)遵從先倍頻作為處理器的時鐘,然后再由內(nèi)向外分頻的原則。二、系統(tǒng)時鐘SYSCLKSTM32將時鐘信號(通常為HSE)經(jīng)過分頻或倍頻(PLL)后,得到系統(tǒng)時鐘,系統(tǒng)時鐘經(jīng)過分頻,產(chǎn)生外設(shè)所使用的時鐘。其中,典型值為40KHZ的LSI供獨(dú)立看門狗IWDG使用,另外它還可以為實(shí)時時鐘RTC提供時鐘源。RTC的時鐘源也可以選擇為LSE,或者為HSE的128分頻。RTC的時鐘源通過備份域控制寄存器(RCC_BDCR)的RTCSEL[1:0]來選擇。(PLL):許多電子設(shè)備要正常工作,通常需要外部的輸入信號與內(nèi)部的振蕩信號同步,利用鎖相環(huán)PLL(PhaseLockedLoop)就可以實(shí)現(xiàn)這個目的。第三節(jié)電源、時鐘及復(fù)位電路3.2時鐘電路二、系統(tǒng)時鐘SYSCLKOx14AHBENR讀/寫Ox00000014AHB設(shè)備時鐘使能寄存器(開啟Flash接口和SRAM時鐘)Ox18APB2ENR讀/寫Ox00000000APB2設(shè)備時鐘使能寄存器(關(guān)閉所有APB2設(shè)備時鐘)Ox1cAPB1ENR讀/寫Ox00000000APB1設(shè)備時鐘使能寄存器(關(guān)閉所有APB1設(shè)備時鐘)系統(tǒng)時鐘樹設(shè)備時鐘使能寄存器分配表位名稱類型復(fù)位值說明0AFIOEN讀/寫0AFIO時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘2GPIOAEN讀/寫0GPIOA時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘3GPIOBEN讀/寫0GPIOB時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘4GPIOCEN讀/寫0GPIOC時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘9ADC1EN讀/寫0ADC1時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘10ADC2EN讀/寫0ADC2時鐘使能:0-關(guān)閉時鐘,1-開啟時鐘11TIM1EN讀/寫0TIM1定時器時鐘

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論