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