存儲器映射是指把芯片中或芯片外的FLASH,RAM,外設,BOOT,BLOCK等進行統一編址。即用地址來表示對象。
這個地址絕大多數是由廠家規定好的,用戶只能用而不能改。用戶只能在掛外部RAM或FLASH的情況下可進行自定義。
Cortex-M3支持4GB的存儲空間,它的存儲系統采用統一編址的方式; 程序存儲器、數據存儲器、寄存器被組織在4GB的線性地址空間內,以小端格式(little-endian)存放。由于Cortex-M3是32位的內核,因此其PC指針可以指向2^32=4G的地址空間,也就是0x0000_0000——0xFFFF_FFFF這一大塊空間。見圖1:
圖1:Cortex-M3的存儲器映射
Cortex-M3內核將0x0000_0000——0xFFFF_FFFF這塊4G大小的空間分成8大塊:代碼、SRAM、外設、外部RAM、外部設備、專用外設總線-內部、專用外設總線-外部、特定廠商(見圖1)。這就導致了,使用該內核的芯片廠家必須按照這個進行各自芯片的存儲器結構設計,如stm32。
圖2:Cortex-M3與中密度stm32的存儲器映射對比
圖2中可以很清晰的看到,STM32的存儲器結構和Cortex-M3的很相似(這是因為stm32本來就是按照cortex_m3內核來設計硬件的),不同的是,STM32加入了很多實際的東西,如:Flash、SRAM等。只有加入了這些東西,才能成為一個擁有實際意義的、可以工作的處理芯片——STM32。STM32的存儲器地址空間被劃分為大小相等的8塊區域,每塊區域大小為512MB(如:0x20000000~0x40000000)。對STM32存儲器知識的掌握,實際上就是對Flash和SRAM這兩個區域知識的掌握。
不同類型的STM32單片機的SRAM大小是不一樣的,但是他們的起始地址都是0x2000 0000,終止地址都是0x2000 0000+其固定的容量大小。SRAM的理解比較簡單,其作用是用來存取各種動態的輸入輸出數據、中間計算結果以及與外部存儲器交換的數據和暫存數據。設備斷電后,SRAM中存儲的數據就會丟失。
STM32的Flash,嚴格說,應該是Flash模塊。三個分區的稱呼與datasheet保持一致。該Flash模塊包括:
Flash主存儲區(Main memory)Flash:存放代碼的地方,如圖2中的FLASH區域:128KB(0x08000000~0x0801ffff)(不同容量的Flash終止地址不同);
Flash信息區(Information block),該區域又可以分為Option Bytes和System Memory區域;
System Memory:STM32在出廠時,已經固化了一段程序在System memory(medium-density devices的地址為:0x1FFF_F000,大小為2KB)存儲器中。這段程序就是一個固定好的,并且沒法修改的Boot Loader(見編程手冊PM0042這種描述)。
Option Bytes:可以按照用戶的需要進行配置(如配置看門狗為硬件實現還是軟件實現);該區域除了互聯型所用型號地址都一樣:(0x1fff_f000~0x1fff_f80f)圖中終止地址有誤:應為0x1fff_f80f,正好16個字節。
Flash存儲接口寄存器區(Flash memory interface),用于片上外設。是圖2中從0x40000000開始的PERIPHERALS區域。也稱作外設存儲器映射,對該區域操作,就是對相應的外設進行操作。
根據STM32的內存映射圖,在代碼區,0x00000000地址為啟動區,上電以后,CPU從這個地址開始執行代碼。0x08000000是用戶FLASH的起始地址,0x20000000是SRAM的起始地址。
-
存儲器
+關注
關注
38文章
7653瀏覽量
167483 -
存儲
+關注
關注
13文章
4535瀏覽量
87498 -
STM32
+關注
關注
2295文章
11032瀏覽量
365226
原文標題:STM32的存儲器映射詳解
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
ARM的存儲器映射與存儲器重映射
stm32存儲結構& 存儲器映射
什么是存儲器和寄存器映射?如何訪問STM32寄存器內容?

STM32(F407)—— 存儲區映射和存儲器重映射

2.STM32的存儲器、電源和時鐘體系

評論