標(biāo)題: MDK中寄存器地址名稱(chēng)映射分析(開(kāi)發(fā)指南4.6節(jié)) [打印本頁(yè)]

作者: 新鄉(xiāng)吳彥祖    時(shí)間: 2018-8-18 15:55
標(biāo)題: MDK中寄存器地址名稱(chēng)映射分析(開(kāi)發(fā)指南4.6節(jié))
本帖最后由 新鄉(xiāng)吳彥祖 于 2018-8-18 15:57 編輯

MDK中寄存器地址名稱(chēng)映射分析(開(kāi)發(fā)指南4.6節(jié))
對(duì)MCU,一切底層配置,最終都是配置寄存器
庫(kù)函數(shù)是對(duì)底層寄存器封裝了一遍,位操作也是最終操作的寄存器
51中映射的方法:sfr P0=0x80;//P0映射到地址0x80 ,以后只需要直接寫(xiě)P0=0x00即代表往寄存器地址0x80所代表的寄存器賦值,0x00相當(dāng)于給P0的每一位IO口都賦值0。這樣的好處是不需要記住每個(gè)寄存器的地址,需要用對(duì)應(yīng)的寄存器時(shí)直接寫(xiě)寄存器相應(yīng)的名稱(chēng)即可。最常用的P0、P1、P2、P3,四組輸入輸出(I/O)寄存器,以及TH1, TH0, TL1,TL0,SCON,TCON,TMOD,SBUF等等
相比于51,32的寄存器要多得多,32采用了結(jié)構(gòu)體來(lái)表示相應(yīng)的寄存器
GPIOA->ODR=0x00000000。32中每組IO口都有7個(gè)寄存器控制這與51稍有不同。每組IO對(duì)應(yīng)一個(gè)基地址,寄存器根據(jù)基地址進(jìn)行偏移取的地址,GPIOA的基地址又是根據(jù)APB2的地址來(lái)偏移,同理得到其他地址。其中外設(shè)基地址是一個(gè)比較高的地址,他被定義為一個(gè)常量,作為參考。再回頭說(shuō)結(jié)構(gòu)體,我們打開(kāi)stm32f10x.h 定位到GPIO_TypeDef 定義處:GPIOA被強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針,就意味著接下來(lái)的地址代表了結(jié)構(gòu)體中的七個(gè)寄存器。由于每個(gè)寄存器是32位,每個(gè)地址設(shè)置八位(類(lèi)似于51),并且結(jié)構(gòu)體存儲(chǔ)的成員他們的地址是連續(xù)的。所以GPIOA下的寄存器相對(duì)應(yīng)的寄存器之間的地址都是相差了4,例如我們?cè)L問(wèn)ODR寄存器就是訪問(wèn)了ODR相對(duì)于GPI_的基地址的偏差的四個(gè)地址。





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1