簡(jiǎn)談stm32的地址映射
對(duì)于控制器而言,無(wú)論是單片機(jī)系列還是plc系列,都是控制引腳的高低電平從而對(duì)外設(shè)進(jìn)行控制。通常我們采取各種語(yǔ)言進(jìn)行編寫(xiě)控制語(yǔ)句,類(lèi)比于匯編和高級(jí)語(yǔ)言等。在51單片機(jī)的學(xué)習(xí)初級(jí)階段,我們都使用過(guò)匯編語(yǔ)言進(jìn)行流水燈的編寫(xiě),在匯編中印象最深的莫過(guò)于對(duì)地址的控制。這里就是要說(shuō)到的地址映射。
在32開(kāi)發(fā)中,我們通常使用庫(kù)進(jìn)行開(kāi)發(fā)。說(shuō)白了,32開(kāi)發(fā)是從底層一層一層封裝上去的。到我們開(kāi)發(fā)者這里,就是使用最上層的接口進(jìn)行開(kāi)發(fā)。但是一層一層看下去,還是對(duì)寄存器的控制,要控制寄存器,就需要操作寄存器地址。
下圖就是stm32的地址映射(此圖百度):
在倒數(shù)第三紫色區(qū)域是片上外設(shè)的地址區(qū)域,這里反映了片上外設(shè)的地址,我們通過(guò)操作這些地址,便能操作這些外設(shè)寄存器。
在stm32中,有三大總線,AHB總線,APB1總線以及APB2總線。不同的外設(shè)掛載在不同的總線上邊。比如GPIO,串口1,ADC以及部分定時(shí)器掛載在APB2總線上(總線這里我將重新開(kāi)貼介紹)。提到這里我們就該說(shuō)說(shuō)總線的地址么。
打開(kāi)stm32f10x.h這個(gè)文件,這個(gè)文件主要包含stm32中寄存器地址和結(jié)構(gòu)體類(lèi)型定義,在使用到固件庫(kù)的地方都要包含該頭文件。這里截屏一些宏定義來(lái)說(shuō)明一下地址映射與掛載總線的關(guān)系。
從圖中可以看到APB2之類(lèi)的字眼,這不是總線么?注意,有一個(gè)PERIPH_BASE的地址為0x40000000,這不是片上外設(shè)的首地址么。這里,這個(gè)地址稱作外設(shè)基地址。同樣,APB2PERIPH_BASE稱作APB2總線外設(shè)基地址,畢竟都有base。
這個(gè)圖片是個(gè)總線的基地址:
也就是說(shuō),該總線上所掛載的模塊都在這個(gè)地址區(qū)間內(nèi)。下面兩幅圖是掛載在總線上面各寄存器以及寄存器組的地址:
以上幾幅圖就是我目前能找到的地址映射的圖片。
這篇文章是我初學(xué)的學(xué)習(xí)筆記,在此借鑒了:
《零死角玩轉(zhuǎn)STM32》
《Duanxx的STM32學(xué)習(xí):stm32的總線AMBA、AHB、APB》