在學(xué)習(xí)STM32之前有必要了解一下ARM架構(gòu),以下相關(guān)ARM架構(gòu)的知識(shí)來(lái)自百度百科?:?
ARM架構(gòu),曾稱進(jìn)階精簡(jiǎn)指令集機(jī)器(Advanced?RISC?Machine)更早稱作Acorn RISC Machine,是一個(gè)32位精簡(jiǎn)指令集(RISC)架構(gòu)。還有基于ARM設(shè)計(jì)的派生產(chǎn)品,重要產(chǎn)品包括Marvell的XScale架構(gòu)和德州儀器的OMAP系列。
STM32芯片內(nèi)部構(gòu)造
以STM32F103為例,它采用的是Cortex-M3內(nèi)核,內(nèi)核即CPU,他是由ARM公司設(shè)計(jì)。內(nèi)核之外的部件被稱為片上外設(shè),如GPIO、USART、I2C、SPI等都叫做片上外設(shè)。如下圖所示:
?
芯片和外設(shè)之間是通過(guò)各種總線連接的,其中驅(qū)動(dòng)單元有四個(gè),被動(dòng)單元也有四個(gè)。驅(qū)動(dòng)單元就是平時(shí)所說(shuō)的CPU,被動(dòng)單元指的是外設(shè)。下面簡(jiǎn)要介紹一下各個(gè)部件。
驅(qū)動(dòng)單元?
-
ICode 總線 ICode 中的 I 表示 Instruction,即指令。內(nèi)核通過(guò)ICode 總線讀取內(nèi)部FLASH代碼指令來(lái)執(zhí)行程序。
-
DCode 總線 DCode 中的 D 表示 Data,即數(shù)據(jù),那說(shuō)明這條總線是用來(lái)取數(shù)的。因?yàn)閿?shù)據(jù)可以被 Dcode 總線和 DMA 總線訪問(wèn)(向flash,SRAM,或外設(shè)數(shù)據(jù)寄存器里面取數(shù)據(jù)),所以為了避免訪問(wèn)沖突,在取數(shù)的時(shí)候需要經(jīng)過(guò)一個(gè)總線矩陣來(lái)仲裁,決定哪個(gè)總線在取數(shù),取到的數(shù)據(jù)可以暫存在Cortex?-M3內(nèi)核里面的寄存器在進(jìn)行處理。?
-
系統(tǒng)總線System 系統(tǒng)總線主要是訪問(wèn)外設(shè)的寄存器,我們通常說(shuō)的寄存器編程,即讀寫(xiě)寄存器都是通過(guò)這根系統(tǒng)總線來(lái)完成的。
-
DMA 總線 DMA 總線與DCode總線一樣主要是用來(lái)傳輸數(shù)據(jù),但Dcode總線傳輸數(shù)據(jù)要占用內(nèi)核(cpu)的資源,而DMA總線相當(dāng)于獨(dú)立于內(nèi)核cpu但幫助內(nèi)核cpu傳輸數(shù)據(jù)而不用占用內(nèi)核(cpu)的資源,就是在DMA傳輸數(shù)據(jù)的同時(shí)內(nèi)核cpu可以干別的事情比如點(diǎn)亮一個(gè)LED燈?
-
總線矩陣 總線矩陣協(xié)調(diào)內(nèi)核系統(tǒng)總線和DMA主控總線之間的訪問(wèn)仲裁,仲裁利用輪換算法。因?yàn)閿?shù)據(jù)可以被 Dcode 總線和 DMA 總線訪問(wèn),數(shù)據(jù)可以是在某個(gè)外設(shè)的數(shù)據(jù)寄存器,可以在SRAM,可以在內(nèi)部的 FLASH。所以為了避免訪問(wèn)沖突,在取數(shù)的時(shí)候需要經(jīng)過(guò)一個(gè)總線矩陣來(lái)仲裁,決定哪個(gè)總線在取數(shù)?
被動(dòng)單元?
-
內(nèi)部FLASH 簡(jiǎn)單介紹在flash存儲(chǔ)內(nèi)容:我們寫(xiě)好的程序編譯之后都是一條條指令(二進(jìn)制代碼),存放在 FLASH 中,我們常量或常變量C 語(yǔ)言中的 const 關(guān)鍵字修飾也存放在FLASH
-
內(nèi)部SRAM 就是我們常說(shuō)的電腦內(nèi)存條,程序函數(shù)內(nèi)部的局部變量和全局變量,堆(malloc分配)棧(局部變量)等的開(kāi)銷都是基于內(nèi)部的SRAM。內(nèi)核通過(guò) DCode 總線來(lái)訪問(wèn)它?
-
FSMC FSMC 的英文全稱是 Flexible static memory controller,叫靈活的靜的存儲(chǔ)器控制器,是 STM32F10xx 中一個(gè)很有特色的外設(shè)通過(guò)FSMC我們可以擴(kuò)展內(nèi)存,如外部的SRAM,NANDFLASH 和 NORFLASH。但有一點(diǎn)我們要注意的是,F(xiàn)SMC 只能擴(kuò)展靜態(tài)的內(nèi)存,即名稱里面的 S:static,不能是動(dòng)態(tài)的內(nèi)存,比如 SDRAM 就不能擴(kuò)展。?
-
AHB 到 APB 的橋 兩個(gè)AHB/APB橋在AHB和2個(gè)APB總線間提供同步連接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz),上面掛載著 STM32 各種各樣的特色外設(shè)。我們經(jīng)常說(shuō)的 GPIO、串口、I2C、SPI 這些外設(shè)就掛載在這兩條總線上,這個(gè)是我們學(xué)習(xí) STM32 的重點(diǎn),就是要學(xué)會(huì)編程這些外設(shè)去驅(qū)動(dòng)外部的各種設(shè)備。
? ? ? ? ??
什么是寄存器?
寄存器是CPU內(nèi)部用來(lái)存放數(shù)據(jù)的小型存儲(chǔ)區(qū)域,用于暫時(shí)存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果,所以被叫做寄存器。?? ?
寄存器電路是由鎖存器或觸發(fā)器構(gòu)成的,一個(gè)觸發(fā)器或鎖存器儲(chǔ)存一位二進(jìn)制數(shù),一個(gè)8為寄存器至少含8個(gè)觸發(fā)器或鎖存器。
寄存器的功能是存儲(chǔ)二進(jìn)制代碼,它是由具有存儲(chǔ)功能的觸發(fā)器組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)器可以存儲(chǔ)1位二進(jìn)制代碼,故存放n位二進(jìn)制代碼的寄存器,需用n個(gè)觸發(fā)器來(lái)構(gòu)成。也可以說(shuō)是給特定功能的單元取的別名,寄存器是單片機(jī)內(nèi)部的控制機(jī)構(gòu)。
寄存器地址=總線基地址+外設(shè)基于總線地址的偏移量+寄存器相對(duì)于外設(shè)基地址的偏移量
存儲(chǔ)器映射:芯片廠商給存儲(chǔ)器分配地址的過(guò)程就成為存儲(chǔ)器映射,如果給存儲(chǔ)器再分配一個(gè)地址就叫存儲(chǔ)器重映射。寄存器是一類特殊的存儲(chǔ)器,它的每個(gè)位都有特定的功能,可以實(shí)現(xiàn)對(duì)外設(shè)功能的控制,給寄存器的地址命名的過(guò)程就叫做寄存器映射。
在STM32中,ST官方將各個(gè)外設(shè)寄存器的地址進(jìn)行了封裝,總線或外設(shè)都以他們的名字作為宏名,最后把寄存器封裝成結(jié)構(gòu)體。在操作寄存器時(shí),我們可以直接使用宏定義好的結(jié)構(gòu)體類型指針,使用時(shí)直接用相應(yīng)指針對(duì)結(jié)構(gòu)體成員寄存器進(jìn)行訪問(wèn)即可。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836784.html
接下來(lái)的一段時(shí)間里會(huì)對(duì)STM32重新進(jìn)行認(rèn)識(shí),會(huì)對(duì)其中的的相關(guān)知識(shí)進(jìn)行梳理。歡迎關(guān)注我的公眾號(hào),晚霽見(jiàn)月,我們一同交流學(xué)習(xí)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836784.html
到了這里,關(guān)于STM32之寄存器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!