一、相關概念:
1、寄存器:中央處理器內的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和地址。
2、寄存器的地址:STM32給不同的寄存器分配了不同的地址
3、STM32的IO端口有八種模式:
1)、輸入浮空 5)、開漏輸出
2)、輸入上拉 6)、推輓輸出
3)、輸入下拉 7)、推輓複用
4)、模擬輸入 8)、開漏複用
每個IO口都有七個寄存器來控制:
CHL、CHR :端口配置寄存器(32位)
IDR、ODR :數據寄存器(32位)
BSRR :置位/復位寄存器(32位)
BRR :復位寄存器(16位)
LCKR :所存寄存器(32位)
其中,比較常用的IO端口寄存器爲CRL,CRH,IDR,ODR
4、線性地址到物理地址的映射:
邏輯地址(虛擬地址) --- 分段 --> 線性地址 --- 分頁 ---> 物理地址
線性地址(Linear Address)是邏輯地址到物理地址變換之間的中間層。在分段部件中邏輯地址是段中的偏移地址,然後加上基地址就是線性地址。
如果沒有啓用分頁機制,線性地址就是物理地址,分段式 x86 CPU 必須啓用的,不能關閉 (stm32沒有查到有分頁機置)
線性地址概念:https://baike.baidu.com/item/%E7%BA%BF%E6%80%A7%E5%9C%B0%E5%9D%80/9013682?fr=aladdin
5、GPIOA各個寄存器的實際地址
寄存器 偏移地址 實際地址=基地址+偏移地址
GPIOA->CRL 0x00 0x40010800+0x00
GPIOA->CRH; 0x04 0x40010800+0x04
GPIOA->IDR; 0x08 0x40010800+0x08
GPIOA->ODR 0x0c 0x40010800+0x0c
GPIOA->BSRR 0x10 0x40010800+0x10
GPIOA->BRR 0x14 0x40010800+0x14
GPIOA->LCKR 0x18 0x40010800+0x18
6、每個GPIO端口有:
兩個32位配置寄存器 GPIOx_CRL GPIOx_CRH
兩個32位數據寄存器 GPIOx_IDR GPIOx_ODR
一個32位置位/復位寄存器 GPIOx_BSRR
一個16位復位寄存器 GPIOx_BRR
一個32位鎖定寄存器 GPIOx_LCKR
7、stm32三大總線: AHB總線,APB1總線,APB2總線
不同的外設掛載在不同的總線上邊。比如GPIO,串口1,ADC以及部分定時器掛載在APB2總線上
8、Cortex-M3 與中密度stm32的存儲器映射對比
STM32F1的存儲器的映射 |
Cortex-M3的存儲器映射 |
9、邏輯地址、線性地址、物理地址:https://www.cnblogs.com/X-W-LIU/p/3455734.html
10、每一組GPIO端口有10組寄存器配置,有些IO口有16個引腳,32位就是每兩位控制一個引腳:https://ke.qq.com/webcourse/index.html#cid=279403&term_id=100330877&taid=1965359855059819&vid=n1423jlur6g
二、寄存器及寄存器映射
1、參考網址:
https://www.jianshu.com/p/684c5d9dfd7a 寄存器及寄存器映射
https://www.cnblogs.com/mrgsf/p/6868041.html STM32 存儲器映射和寄存器映射
三、標準C運算符
參考網址:https://www.w3cschool.cn/c/c-operators.html