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