映射的概念
存儲(chǔ)器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲(chǔ)器分配地址的過(guò)程就稱為存儲(chǔ)器映射,如下圖所示的4GB空間(從block0-block7每個(gè)block512M)。在梳理STM32芯片的內(nèi)部架構(gòu)中提到的被控單元FLASH、RAM、FSMC和APB等功能部件共同排列在這4GB的地址空間內(nèi)。在編程的時(shí)候,可以通過(guò)他們的地址找到他們,然后通過(guò)C語(yǔ)言對(duì)它們進(jìn)行數(shù)據(jù)的讀和寫操作。
存儲(chǔ)器映射
在這 4GB 的地址空間中,ARM 已經(jīng)粗線條的平均分成了 8 個(gè)塊,每塊 512MB,每個(gè)塊也都規(guī)定了用途,具體分類見如下表格。在這 8 個(gè) Block 里面,有 3 個(gè)塊非常重要,也是我們最關(guān)心的三個(gè)塊。Block0 用來(lái)設(shè)計(jì)成內(nèi)部FLASH,Block1 用來(lái)設(shè)計(jì)成內(nèi)部 RAM,Block2 用來(lái)設(shè)計(jì)成片上的外設(shè)。其中,Block2 用于設(shè)計(jì)片內(nèi)的外設(shè),根據(jù)外設(shè)的總線速度不同,Block 被分成了AHB、APB1、APB2。
存儲(chǔ)器本身沒(méi)有地址,給存儲(chǔ)器分配地址的過(guò)程叫存儲(chǔ)器映射,那什么叫寄存器映射?寄存器到底是什么?在存儲(chǔ)器 Block2 這塊區(qū)域,設(shè)計(jì)的是片上外設(shè),它們以四個(gè)字節(jié)為一個(gè)單元,共 32bit,每一個(gè)單元對(duì)應(yīng)不同的功能,當(dāng)我們控制這些單元時(shí)就可以驅(qū)動(dòng)外設(shè)工作。我們可以找到每個(gè)單元的起始地址,然后通過(guò) C 語(yǔ)言指針的操作方式來(lái)訪問(wèn)這些單元,如果每次都是通過(guò)這種地址的方式來(lái)訪問(wèn),不僅不好記憶還容易出錯(cuò),這時(shí)我們可以根據(jù)每個(gè)單元功能的不同,以功能為名給這個(gè)內(nèi)存單元取一個(gè)別名,這個(gè)別名就是我們經(jīng)常說(shuō)的寄存器,這個(gè)給已經(jīng)分配好地址的有特定功能的內(nèi)存單元取別名的過(guò)程就叫寄存器映射。
通過(guò)C語(yǔ)言操作寄存器的例子
GPIOB端口的輸出數(shù)據(jù)寄存器ODR的地址是0x40010C0C,ODR寄存器是32bit,低16bit有效,對(duì)應(yīng)著16個(gè)外部IO,寫0、1對(duì)應(yīng)的IO則輸出低、高電平?,F(xiàn)在我們通過(guò)C語(yǔ)言指針的操作方式,讓GPIOB的16個(gè)IO都輸出高電平,見如下代碼。
// GPIOB 端口全部輸出 高電平 *(unsigned int*)(0x4001 0C0C) = 0xFFFF;
0x40010C0C在我們看來(lái)是GPIOB端口ODR的地址,但是在編譯器看來(lái),這只是一個(gè)普通的變量,是一個(gè)立即數(shù),要想讓編譯器也認(rèn)為是指針,我們得進(jìn)行強(qiáng)制類型轉(zhuǎn)換,把它轉(zhuǎn)換成指針,即(unsigned int *)0x4001 0C0C,然后再對(duì)這個(gè)指針進(jìn)行*操作。
通過(guò)絕對(duì)地址訪問(wèn)內(nèi)存單元不好記憶且容易出錯(cuò),可以通過(guò)寄存器的方式來(lái)操作,具體見如下代碼。
//GPIOB端口全部輸出高電平 #defineGPIOB_ODR(unsignedint*)(GPIOB_BASE+0x0C) *GPIOB_ODR=0xFF;
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44991瀏覽量
650404 -
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124468 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7651瀏覽量
167375 -
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
364866 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141717
原文標(biāo)題:STM32單片機(jī)中C語(yǔ)言操作寄存器的原理
文章出處:【微信號(hào):?jiǎn)纹瑱C(jī)與嵌入式,微信公眾號(hào):?jiǎn)纹瑱C(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32單片機(jī)中的C語(yǔ)言基礎(chǔ)知識(shí)
STM32單片機(jī)使用寄存器是如何進(jìn)行操作的
51單片機(jī)特殊功能寄存器在C51程序中的定義詳細(xì)說(shuō)明

單片機(jī)寄存器

msp4306989單片機(jī)的寄存器 第五章

C語(yǔ)言位操作在(單片機(jī))寄存器中的應(yīng)用

STM32的寄存器操作

STM32單片機(jī)中C語(yǔ)言操作寄存器的原理

評(píng)論