這5部分io組成的系統稱為最小系統。
黃色部分是arm核心部分,右邊是stm32的外設部分。
icode:核心必須要通過icode匯流排來讀取flash裡編譯好的指令
dcode:資料匯流排
dma:直接儲存器訪問,用來搬資料,省去資料在cpu的中轉。
(我們寫的程式中有常量與變數,其中常量const存放在flash中,而變數存放在sram中,資料可以被dcode匯流排和dma匯流排訪問,為了防止衝突,需要匯流排矩陣來決定哪個匯流排在取數)
system:系統匯流排,主要訪問外設暫存器。(核心想要操作外設需要通過暫存器)
儲存器對映圖就是儲存器對映
arm體系32位 -> 4g記憶體,分成8塊,每塊512m。
外設主要在block2中。
絕對位址訪問記憶體單元
以odr暫存器為例,我們先在儲存器對映圖中找到gpiob的記憶體位址,再加上odr暫存器的偏移位址,即可表示暫存器位址0x40010c0c。賦全1。
暫存器對映就是給已經分配好位址的有特定功能的記憶體單元取名的過程。例如埠輸出暫存器odr就是stm32取的名字,也可以取別名。
根據速度的不同分了apb1(低速),apb2,ahb(高速)匯流排,掛載不同的外設。
還有外設基位址都可以在儲存器對映圖檢視。
c語言對位址一層層封裝。
例如:c語言對匯流排和外設基址巨集定義:
//個人筆記用
STM32暫存器對映
1.對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,2.各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到 3.想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能 4.stm32底層實際是先定義出外設基位址,然...
STM32儲存器對映和暫存器對映
對於cortex m3來講,有一塊4g大小的儲存器空間。儲存器對映指的是晶元廠商為這個空間分配位址的操作。這4g空間被均勻地劃分為8個大小為512mb的儲存塊 block 並且每個塊都各具特色。下面主要介紹block1 block2。flash 起始位址為0x0800 0000,存放使用者程式和掉電...
筆記 STM32暫存器位址對映
例如 struct student p p可以指向struct student 型別的變數或陣列元素 例題 main stu1 pstu stu1 讀取結構體成員的值 printf s的學號是 d,年齡是 d,在 c組,今年的成績是 1f!n pstu name,pstu num,pstu age,...