㈠ 什麼是寄存器映射
什麼是存儲器映射?
存儲器本身不具有地址信息,它的地址是由晶元廠商或用戶分配,給物理存儲器分配邏輯地址的過程就稱為存儲器映射,通過這些邏輯地址就可以訪問到相應的存儲器的物理存儲單元。如果給存儲器再分配一個地址就叫存儲器重映射。
內存分配:
如STM32,對於片上外設,它們以四個位元組為一個單元,共32bit,每一個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。我們可以找到每個單元的起始地址,然後通過C語言指針的操作方式來訪問這些單元,如果每次都是通過這種地址的方式來訪問,不僅不好記憶還容易出錯,這時我們可以根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。
STM32F103Z把4GB的內存空間分為8各部分,每一個部分都是是512MB。每個部分都有自己的功能。
比如我們單片機里的Flash存儲器在分組block0裡面,單片機里的SRAM存儲器在分組Block1裡面(64KB)。
外設寄存器結構體定義僅僅是一個定義,要想實現給這個結構體賦值就達到操作寄存器的效果,我們還需要找到該寄存器的地址,就把寄存器地址跟結構體的地址對應起來。
如何訪問STM32寄存器內容?
寄存器就是一些有特定功能的內存單元,所以我們訪問stm32寄存器就是操作stm32的內存單元。我們可以用C語言的指針來stm32的內存單元。
匯流排:
上面是stm32裡面的3根匯流排,匯流排基地址是匯流排的初地址,相對外設基地址的偏移是當前匯流排距離上一根匯流排的距離地址大小也就是上跟匯流排所佔的地址的大小。