stm32晶元架構簡圖 stm32f10xx系統框圖
儲存器本身不具有位址資訊,它的位址是由晶元廠商或使用者分配,給儲存器分配位址分配位址的過程就稱為儲存器對映。
分配位址後,會使用指標去操作記憶體位址。
有特定功能的記憶體單元,通常我們會給這個特殊的記憶體單元取乙個名字,這個給已經分配好位址的有特定功能的記憶體單元取別名的過程就叫暫存器對映。
給儲存器分配位址的過程叫儲存器對映,在分配乙個位址叫重對映。
1、通過絕對位址去訪問
讓gpiob埠的16個引腳輸出高電平,要怎麼實現?
絕對位址=外設起始位址+暫存器偏移位址
比如現在我們要找gpiob的絕對位址,可以查stm32晶元手冊,可以看到起始位址為0x40010c00
然後再找到埠輸出資料暫存器(odr)的偏移位址
實體地址=0x40010c00 + 0x0c=0x40010c0c
要讓16個引腳都輸出高電平
*(unsigned int *)(0x40010c0c) = 0xffff;
2、通過暫存器別名的方式訪問記憶體單元
#defined gpiob_odr (unsigned int *)(0x40010c0c)為了方便操作,我們乾脆把指標操作「*」也定義到暫存器別名裡面*gpiob_odr = 0xff;
#define gpiob_odr *(unsigned int*)(0x40010c0c)gpiob_odr = 0xff;
gpiob_odr & = ~(1<<0); // 讓pb0輸出低電平gpiob_odr & |= (1<<0) // 讓pb0輸出高電平
STM32蜂鳴器 暫存器
這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...
STM32暫存器對映
1.對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,2.各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到 3.想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能 4.stm32底層實際是先定義出外設基位址,然...
STM32之暫存器開發
首先克服心理作用,不要總是預設暫存器開發難,其實暫存器開發和庫函式開發所用的方法和難度是一樣的,並不難,下面用以stm32為例解釋。1.明確自己需要的功能 庫函式開發也需要 2.檢視手冊,找到功能對應的微控制器資源 3.找到功能所需暫存器 庫函式開發需要找到相應的功能函式 4.根據位址每位對應的功能...