當我們在完成某乙個實驗,當我們正慶幸的時候,我們不由得產生一種不安的想法——我們是否已經少許明白其中的種種細節?
尤其,當我們所有的事情都依賴於編譯環境或firmware,抑或他人的程式,而自己僅僅是copy和modify,以致using。當你還是乙個初學者的時候,或許不會太過於關注於此,但是要想提高自己對微控制器、處理器原理的理解,並且希望走得更遠的時候,您就需要關注更為詳細的內部知識,您需要明白編譯環境、firmware等為你的默默貢獻。
要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。
如figure 1,是stm32系統結構框圖。
根據stm32 reference manual (rm0008)中的描述,如圖:
可以得知stm32系統結構的組成,每乙個模組更為詳細的內容,請參考相關文件。
rm0008文件中可以看出,stm32採用的是cortex-m3核心,因此,有必要了解cortex-m3的儲存器結構。
圖中還可以看出,cortex-m3是通過各個匯流排和flash、srom相連線的。
以下是cortex-m3模組框圖:
該cortex-m3核心通過i-code、d-code、system匯流排與stm32內部的flash、srom相連線的,該種連線情況直接關係到stm32儲存器的結構組織;也就是說,cortex-m3的儲存器結構決定了stm32的儲存器結構。
這裡可能說的比較籠統,可以這樣理解:cortex-m3是乙個核心,自身定義了乙個儲存器結構,st公司按照cortex-m3的這個儲存器定義,設計出了自己的儲存器結構;但是st公司的stm32的儲存器結構必須按照cortex-m3這個定義的儲存器結構來進行設計。
舉個例子:
我買了乙個做飯的調料盒子,有三塊區域(假設儲存器分為3塊),上面分別標有鹽(flash)、糖(srom)、味精(peripheral);此時,該調料盒子並沒有任何意義(對應cortex-m3核心);我按照標籤放入特定品牌、特定分量的鹽(flash)、糖(srom)、味精(peripheral),產生乙個有實際意義的調料盒(各類cortex-m3核心的晶元,如stm32)。
期間,調料位置不能放錯,但可以不放。由上面的例子可以看出,空的調料盒子決定了有意義的調料盒子存放調料的結構。因此,只要了解空盒子的儲存結構,就可以很清楚的明白當有調料時的用法了。
儲存器對映是指把晶元中或晶元外的flash,ram,外設,bootblock等進行統一編址。即用位址來表示物件。這個位址絕大多數是由廠家規定好的,使用者只能用而不能改。使用者只能在掛外部ram或flash的情況下可進行自定義。
如圖,是cortex-m3儲存器對映結構圖。
cortex-m3是32位的核心,因此其pc指標可以指向2^32=4g的位址空間,也就是0x0000_0000——0xffff_ffff這一大塊空間。
好,根據圖中描述,cortex-m3核心將0x0000_0000——0xffff_ffff這塊4g大小的空間分成8大塊:**、sram、外設、外部ram、外部裝置、專用外設匯流排-內部、專用外設匯流排-外部、特定廠商等。導致了,使用該核心的晶元廠家必須按照這個進行各自晶元的儲存器結構設計。
這就可以去了解stm32的儲存器結構,以及為什麼這樣設計stm32儲存器的結構了。
首先,我們對比一下cortex-m3儲存器結構和stm32儲存器結構:
圖中可以很清晰的看到,stm32的儲存器結構和cortex-m3的很相似,不同的是,stm32加入了很多實際的東西,如:flash、sram等。只有加入了這些東西,才能成為乙個擁有實際意義的、可以工作的處理晶元——stm32。
stm32的儲存器位址空間被劃分為大小相等的8塊區域,每塊區域大小為512mb。
對stm32儲存器知識的掌握,實際上就是對flash和sram這兩個區域知識的掌握。因此,下面將重點描述flash和sram的知識。
不同型別的stm32微控制器的sram大小是不一樣的,但是他們的起始位址都是0x2000 0000,終止位址都是0x2000 0000+其固定的容量大小。
sram的理解比較簡單,其作用是用來訪問各種動態的輸入輸出資料、中間計算結果以及與外部儲存器交換的資料和暫存資料。裝置斷電後,sram中儲存的資料就會丟失。
stm32的flash,嚴格說,應該是flash模組。
該flash模組包括:flash主儲存區(main memory)、flash資訊區(information block),以及flash儲存介面暫存器區(flash memory inte***ce)。
三個組成部分分別在0x0000 0000——0xffff ffff不同的區域,如圖(小密度的stm32)所示:
圖中完全可以看出flash模組中的三個組成部分在整個儲存器中的位置。
具體的內部區域的意義及功能請參見程式設計手冊pm0042,裡面很詳細。
圖中淡藍色就是你需要知道的。
peripherals:外設的儲存器對映,對該區域操作,就是對相應的外設進行操作;
sram:執行時臨時存放**的地方;
flash:存放**的地方;
system memory:stm32出廠時自帶的你只能使用,不能寫或擦除;
option bytes:可以按照使用者的需要進行配置(如配置看門狗為硬體實現還是軟體實現);
今後,你的編寫**、程式執行、暫存器設定、icp、iap都依靠這些東西。
stm32儲存結構 儲存器對映
問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中的描述...
stm32的儲存器結構
首先,先看一下 stm32 的儲存器結構。flash sram 暫存器和輸入輸出埠被組織在同乙個 4gb的線性位址空間內。可訪問的儲存器空間被分成 8個主要塊,每個塊為 512mb flash sram 是儲存執行程式中的資料,sram是ram的一種。所以,只要你不外擴儲存器,寫完的程式中的所有東西...
STM32儲存器結構 儲存器對映
問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 以下 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中...