寄存器相互映射是什么意思_STM32入门系列-STM32外设地址映射
片上外設區分為四條總線,根據外設速度的不同,不同總線掛載著不同的外設,APB1掛載低速外設,APB2和AHB掛載高速外設。相應總線的最低地址我們稱為該總線的基地址,總線基地址也是掛載在該總線上的首個外設的地址。APB1總線的地址最低,因此片上外設就從這這個地址開始,也稱外設基地址。
總線基地址
從存儲器映射那張圖的Block2可以看到,分為4大塊,每塊都有一個起始地址,這個起始地址就是基地址,然后到下一塊起始地址的時候就會和前一塊地址出現偏差,這個差值就是偏移量,即相對基地址的偏移量。如下圖所示。
從上圖可以看到APB1總線基地址是0x4000 0000,相對外設基地址的偏移量是0,所以此總線也是外設Block2的基地址。
外設基地址
每條總線上都會掛接著很多的外設,這些外設也會有自己的地址范圍,XXX 外設的首個地址即最低地址就是XXX外設的基地址,也稱作XXX邊界地址。有關STM32F1xx 外設的具體邊界地址可以參考《STM32F1xx 中文參考手冊》P28頁, 里面有詳細的介紹。 這里我們就以GPIO外設來講解外設基地址。其他的外設也是同樣分析。GPIO外設基地址如下圖所示。
從圖中可以知道,外設GPIOx都是掛接在APB2總線上,屬于高速的外設,而APB2總線的基地址是0x4001 0000,故GPIOA的相對APB2總線的地址偏移是800。
外設寄存器地址
XXX外設的寄存器就分布在其對應的外設地址范圍內。這里我們以GPIO外設為例,GPIO是通用輸入輸出端口的簡稱,可以通過軟件來控制其輸入和輸出。GPIO有很多個寄存器,每一個都有特定的功能。每個寄存器為32bit,占四個字節,這些寄存器都是按順序依次排列在外設的基地址上。寄存器的位置都以相對該外設基地址的偏移地址來描述。這里我們以GPIOC端口為例,來說明GPIO都有哪些寄存器,如下圖所示。
這里就以GPIOC_BSRR寄存器來教大家如何看《STM32F1xx 中文參考手冊》內寄存器的說明。 如果想要了解更多的寄存器內容, 可以參考《STM32F1xx中文參考手冊》相應寄存器外設部分。首先我們需要打開參考手冊,找到GPIO外設章節,里面會有一個GPIO寄存器,只要找到我們所要查找的寄存器即可,如下圖所示。
下面我們就對上圖進行分析,帶領大家這么獲取其中的信息。
A.紅色框 4 表示的我們所查找寄存器的名稱,寄存器GPIOx_BSRR內的x表示的是STM32GPIO端口,范圍是A-E,也就是說在GPIOA、GPIOB等端口中都有這個寄存器。
B.紅色框5表示的是相對GPIOx地址的偏移值,比如現在我們使用的是GPIOC外設,其基地址是0x40011000,那么本寄存器GPIOx_BSRR地址=0x40011000+0x10=0x40011010。對于其他的GPIO外設也是一個原理。
C.紅色框6和7表示的是寄存器的位表。其中6表示寄存器編號,因為一個寄存器是32bit,所以范圍是0-31。7表示的是相應位的權限,w:只寫,r:只讀,rw:可讀可寫。本寄存器位權限是w,所以只能寫,如果試圖讀本寄存器,是無法保證讀取到它真正內容的。而有的寄存器位權限為只讀,一般是用于表示STM32 外設的某種工作狀態的,由STM32硬件自動更改,通過讀取那些寄存器位來判斷外設的工作狀態。
D.紅色框 8 是寄存器位功能說明。這個也是寄存器說明中最重要的部分,它詳細介紹了寄存器每一個位的功能。例如本寄存器中有兩種寄存器位,分別為BRy及BSy,其中的y數值表示的是管腳號,可以是0-15。如BR0、BS0用于控制GPIOx的第0個引腳,若 x 表示GPIOC,那就是控制GPIOC的第0引腳,而BR1、BS1就是控制GPIOC第1個引腳。
其中BRy引腳的說明是“ 0:不會對相應的ODRx位執行任何操作;1:對相應ODRx位進行復位”。這里的“復位”是將該位設置為0的意思,而“置位”表示將該位設置為1;說明中的ODRx是另一個寄存器的寄存器位,我們只需要知道ODRx位為1的時候,對應的引腳x輸出高電平,為0的時候對應的引腳輸出低電平即可。感興趣的可以查詢該寄存器GPIOx_ODR的說明來了解。
所以,如果對BR0寫入“ 1”的話,那么GPIOx的第0個引腳就會輸出“低電平”,但是對BR0寫入“0”的話,卻不會影響ODR0位,所以引腳電平不會改變。要想該引腳輸出“高電平”,就需要對“BS0”位寫入“1”,寄存器位BSy與BRy是相反的操作。
嵌入式開發直播課 - 深度剖析STM32:時鐘系統 - 創客學院直播室?www.makeru.com.cn總結
以上是生活随笔為你收集整理的寄存器相互映射是什么意思_STM32入门系列-STM32外设地址映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于引用传递的测试题
- 下一篇: c语言大型软件设计的面向对象_C语言跟C