STM32儲存器對映

2021-10-11 18:55:37 字數 3696 閱讀 3939

**stm32儲存器對映**
1、cortex-m3儲存器對映cm3的位址空間有4g,但它只對這4g空間作了預先的定義,把4g空間分成8個塊,每塊大小為512m,並指出各段該分給哪些裝置。具體的實現由晶元廠商決定,廠商可以設計出具有自己特色的產品。下圖是cm3的儲存器對映圖(來自cm3權威指南)。

1.1、 stm32的flash位址起始於0x0800 0000,結束位址是0x0800 0000加上晶元實際的flash大小,不同的晶元flash大小不同。

ram起始位址是0x2000 0000,結束位址是0x2000 0000加上晶元的ram大小。不同的晶元ram也不同。

flash中的內容一般用來儲存**和一些定義為const的資料,斷電不丟失,

ram可以理解為記憶體,用來儲存**執行時的資料,變數等等。掉電資料丟失。

stm32將外設等都對映為位址的形式,對位址的操作就是對外設的操作。

stm32的外設位址從0x4000 0000開始,可以看到在庫檔案中,是通過基於0x4000 0000位址的偏移量來操作暫存器以及外設的。

一般情況下,程式檔案是從 0x0800 0000 位址寫入,這個是stm32開始執行的地方,0x0800 0004是stm32的中斷向量表的起始位址。

在使用keil進行編寫程式時,其程式設計位址的設定一般是這樣的:

程式的寫入位址從0x08000000(數好零的個數)開始的,其大小為0x80000也就是512k的空間,換句話說就是告訴編譯器flash的空間是從0x08000000-0x08080000,ram的位址從0x20000000開始,大小為0x10000也就是64k的ram。這與stm32的記憶體位址對映關係是對應的。

m3復位後,從0x08000004取出復位中斷的位址,並且跳轉到復位中斷程式,中斷執行完之後會跳到我們的main函式,main函式裡邊一般是乙個死迴圈,進去後就不會再退出,當有中斷發生的時候,m3將pc指標強制跳轉回中斷向量表,然後根據中斷源進入對應的中斷函式,執行完中斷函式之後,再次返回main函式中。大致的流程就是這樣。

1.2、 內部sram 區的大小是512mb,用於讓晶元製造商連線片上的sram,這個區通過系統匯流排來訪問。在這個區的下部,有乙個1mb 的位帶區,該位帶區還有乙個對應的32mb 的 「位帶別名(alias)區」,容納了8m 個「位變數」(對比8051 的只有128 個位)。位帶區對應的是最低的1mb 位址範圍,而位帶別名區裡面的每個字對應位帶區的乙個位元。位帶操作只適用於資料訪問,不適用於取指。通過位帶的功能,可以把多個布林型資料打包在單一的字中,卻依然可以從位帶別名區中,像訪問普通記憶體一樣地使用它們。位帶別名區中的訪問操作是原子的,消滅了傳統的「讀-改-寫」三步曲。

位址空間的另乙個512mb 範圍由片上外設(的暫存器)使用。這個區中也有一條32mb的位帶別名,以便於快捷地訪問外設暫存器。例如,可以方便地訪問各種控制位和狀態位。要注意的是,外設內不允許執行指令。

還有兩個1gb 的範圍,分別用於連線外部ram 和外部裝置,它們之中沒有位帶。兩者的區別在於外部ram 區允許執行指令,而外部裝置區則不允許。

最後還剩下0.5gb 的隱秘地帶,cm3 核心的閨房就在這裡面,包括了系統級元件、內部私有外設匯流排s、外部私有外設匯流排s、以及由提供者定義的系統外設。私有外設匯流排有兩條:

ahb 私有外設匯流排,只用於cm3 內部的ahb 外設,它們是:nvic, fpb, dwt 和itm。

apb 私有外設匯流排,既用於cm3 內部的apb 裝置,也用於外部裝置(這裡的「外部」是對核心而言)。cm3 允許器件製造商再新增一些片上apb 外設到apb 私有匯流排上,它們通過abp 介面來訪問。

nvic 所處的區域叫做「系統控制空間(scs)」,在scs 裡的還有systick、mpu 以及**除錯控制所用的暫存器,如下圖所示

最後,未用的提供商指定區也通過系統匯流排來訪問,但是不允許在其中執行指令。

cm3 中的mpu 是選配的,由晶元製造商決定是否配上。

上述的儲存器對映只是個粗線條的模板,半導體廠家會提供更展開的圖示,來表明晶元中片上外設的具體分布,ram 與rom 的容量和位置資訊。

2、stm32的儲存器對映

從stm32 datasheet上來看,不同的型號,其儲存器對映有些不同。應該是以小容量、中容量、大容量來區別的,同乙個容量的不同型號,其flash、sram也有所不同,fsmc也不同。下面以stm32f103xx為例分別介紹之,以下資料均來自datasheet及stm32參考手冊。

2.1 小容量stm32f103x4、stm32f103x6儲存器對映圖

2.2 中容量stm32f103x8、stm32f103xb儲存器對映圖

2.3 大容量stm32f103xc、stm32f103xd、stm32f103xe儲存器對映圖

總結:上面三幅圖中紅色字標明了同種容量的晶元的sram和flash大小,不同容量的晶元其外設不一樣,但同一外設對應位址是一樣的,如果沒有相應外設,該位址則保留。拿tim來說,大容量有tim2-tim7,而小容量只有tim2和tim3,但它們(tim2、tim3)對映的位址卻相同,小容量中向上多出的空間則保留,因此rtc在各容量晶元上對應的起始位址都是0x4000 2800。同理sram和flash也是一樣。

2.4 sram

stm32f10***內建了最多為64k的sram,它可以以位元組、半字(16位)或全字(32位)訪問。sram的起始位址是0x2000 0000

2.5內部flash的構成:

stm32 的內部 flash 包含主儲存器、系統儲存器、 otp 區域以及選項位元組區域,它們的位址分布及大小如下:

a、主儲存器:一般我們說 stm32 內部 flash 的時候,都是指這個主儲存器區域它是儲存使用者應用程式的空間,晶元型號說明中的 1m flash、 2m flash 都是指這個區域的大小。與其它 flash 一樣,在寫入資料前,要先按扇區擦除,

b、系統儲存區:系統儲存區是使用者不能訪問的區域,它在晶元出廠時已經固化了啟動**,它負責實現串列埠、 usb 以及 can 等 isp 燒錄功能。

c、otp 區域:otp(one time program),指的是只能寫入一次的儲存區域,容量為 512 位元組,寫入後資料就無法再更改, otp 常用於儲存應用程式的加密金鑰。

d、選項位元組:選項位元組用於配置 flash 的讀寫保護、電源管理中的 bor 級別、軟體/硬體看門狗等功能,這部分共 32 位元組。可以通過修改 flash 的選項控制暫存器修改。

STM32儲存器位址對映

上圖是stm32的儲存器位址對映圖,位址範圍為 0x0000 0000 0xffff ffff 其中 區的位址是從0x0800 0000開始的,結束於0x0800 0000 晶元的flash的大小,ram的起始位址是0x2000 0000,結束於0x2000 0000 晶元的ram大小。支援位帶操作...

stm32儲存結構 儲存器對映

問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中的描述...

STM32儲存器結構 儲存器對映

問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 以下 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中...