一、STM32 芯片架構簡圖
STM32 有三種啟動方式,從 FLASH 啟動(包含系統存儲器),從內部 SRAM 啟動,從外部 RAM 啟動。
二、存儲器映射
存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲器分配地址的過程就稱為存儲器映射,具體見下圖。 如果給存儲器再分配一個地址就叫存儲器重映射。
在這 4GB 的地址空間中, ARM 已經粗線條的平均分成了 8 個塊,每塊 512MB,每個塊也都規定了用途,具體分類見下表。每個塊的大小都有 512MB,顯然這是非常大的,芯片廠商在每個塊的范圍內設計各具特色的外設時并不一定都用得完,都是只用了其中的一部分而已。
在這 8 個 Block 里面,有 3 個塊非常重要,也是我們最關心的三個塊。 Boock0 用來設計成內部 FLASH, Block1 用來設計成內部 RAM, Block2 用來設計成片上的外設,下面我們簡單的介紹下這三個 Block 里面的具體區域的功能劃分。
1、存儲器 Block0 內部區域功能劃分
Block0 主要用于設計片內的 FLASH, F429 系列片內部 FLASH 最大是 2MB,STM32F429IGT6 的 FLASH 是 1MB。
2、儲存器 Block1 內部區域功能劃分
Block1 用于設計片內的 SRAM。 F429 內部 SRAM 的大小為 256KB,其中 64KB 的CCM RAM 位于 Block0,剩下的 192KB 位于 Block1,分 SRAM1 112KB, SRAM2 16KB,SRAM3 64KB, Block 內部區域的功能劃分具體見下表。
3、儲存器 Block2 內部區域功能劃分
Block2 用于設計片內的外設,根據外設的總線速度不同, Block 被分成了 APB 和 AHB兩部分,其中 APB 又被分為 APB1 和 APB2, AHB 分為 AHB1 和 AHB2,具體見下表。還有一個 AHB3 包含了 Block3/4/5/6,這四個 Block 用于擴展外部存儲器,如 SDRAM,NORFLASH 和 NANDFLASH 等。
三、寄存器映射
根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。
1、STM32 的外設地址映射
片上外設區分為四條總線,根據外設速度的不同,不同總線掛載著不同的外設, APB掛載低速外設, AHB 掛載高速外設。相應總線的最低地址我們稱為該總線的基地址,總線基地址也是掛載在該總線上的首個外設的地址。其中 APB1 總線的地址最低,片上外設從這里開始,也叫外設基地址。
(1)總線基地址
(2)外設基地址
總線上掛載著各種外設,這些外設也有自己的地址范圍,特定外設的首個地址稱為“ XX 外設基地址”,也叫 XX 外設的邊界地址。
(3)外設寄存器
GPIO 有很多個寄存器,每一個都有特定的功能。每個寄存器為 32bit,占四個字節,在該外設的基地址上按照順序排列,寄存器的位置都以相對該外設基地址的偏移地址來描述。
2、C 語言對寄存器的封裝
(1)封裝總線和外設基地址
為了方便理解和記憶,我們把總線基地址和外設基地址都以相應的宏定義起來,總線或者外設都以他們的名字作為宏名。
(2)封裝寄存器列表
GPIOA-GPIOH 都各有一組功能相同的寄存器,如 GPIOA_MODER/GPIOB_MODER/GPIOC_MODER 等等,它們只是地址不一樣,但卻要為每個寄存器都定義它的地址。為了更方便地訪問寄存器,我們引入 C 語言中的結構體語法對寄存器進行封裝。
這樣的地址偏移與 STM32 GPIO 外設定義的寄存器地址偏移一一對應,只要給結構體設置好首地址,就能把結構體內成員的地址確定下來,然后就能以結構體的形式訪問寄存器了。
3、修改寄存器的位操作方法
用 C 語言對寄存器賦值時,我們常常要求只修改該寄存器的某幾位的值,且其它的寄存器位不變,這個時候我們就需要用到 C 語言的位操作方法了。
(1)把變量的某位清零
此處我們以變量 a 代表寄存器,并假設寄存器中本來已有數值,此時我們需要把變量a 的某一位清零,且其它位不變。
(2)把變量的某幾個連續位清零
由于寄存器中有時會有連續幾個寄存器位用于控制某個功能,現假設我們需要把寄存器的某幾個連續位清零,且其它位不變。
(3)對變量的某幾位進行賦值
寄存器位經過上面的清零操作后,接下來就可以方便地對某幾位寫入所需要的數值了,且其它位不變,這時候寫入的數值一般就是需要設置寄存器的位參數。
(4)對變量的某位取反
某些情況下,我們需要對寄存器的某個位進行取反操作,即 1 變 0 , 0 變 1,這可以直接用如下操作,其它位不變。
編輯:hfy
-
存儲器
+關注
關注
38文章
7637瀏覽量
166581 -
STM32
+關注
關注
2290文章
11018瀏覽量
362817
發布評論請先 登錄
評論