相关概念
简单学习了寄存器映射的相关概念,在这里记录一下。
首先寄存器映射的概念是:寄存器是单片机上特色的存储器,给寄存器地址命名的过程就是寄存器映射。
阅读参考手册的流程
- 寄存器的名字
- 偏移量及复位值
- 寄存器位表
- 位功能描述
寄存器地址计算
为了方便编写代码及使用,将寄存器地址分为三个部分
- 总选基地址(BUS_BASE_ADDR):APB1、APB2、AHB
总线基地址及偏移量 | ||
总线 | 基地址 | 偏移量 |
APB1 | 0X4000 0000 | 0 |
APB2 | 0X4001 0000 | 0X1 0000 |
AHB | 0X4001 8000 | 0X1 80000 |
【偏移量:是相对外设基地址(PERIPH_BASE)来说的】
APB1总线的基地址,也叫外设基地址(PERIPH_BASE)
- 外设基于总线基地址的偏移量(PERIPH_OFFSET)
GPIO外设基地址及偏移量 | |||
所需总线 | 外设 | 基地址 | 偏移量 |
APB2 0X4001 0000 | GPIOA | 0X4001 0800 | 0X800 |
GPIOB | 0X4001 0C00 | 0XC00 | |
GPIOC | 0X4001 1000 | 0X1000 | |
GPIOD | 0X4001 1400 | 0X1400 | |
GPIOE | 0X4001 1800 | 0X1800 | |
GPIOF | 0X4001 1C00 | 0X1C00 | |
GPIOG | 0X4001 2000 | 0X2000 |
【偏移量是相对于APB2外设及地址(APB2PERIPH_BASE)来说的】
- 寄存器相对外设基地址的偏移量(REG_OFFSET)
寄存器基地址及偏移量 | ||||
所属总线 | 所属外设 | 寄存器 | 地址 | 偏移量 |
APB2 0X4001 0000 | GPIOA 0X4001 0800 | GPIOA_CRL | 0X4001 0800 | 0X00 |
GPIOA_CRH | 0X4001 0804 | 0X04 | ||
GPIOA_IDR | 0X4001 0808 | 0X08 | ||
GPIOA_ODR | 0X4001 080C | 0X0C | ||
GPIOA_BSRR | 0X4001 0810 | 0X10 | ||
GPIOA_BRR | 0X4001 0814 | 0X14 | ||
GPIOA_LCKR | 0X4001 0818 | 0X18 |
【表中的偏移量是相对于CPIOA外设基地址(GPIOA_BASE)来说的】
寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET
GPIOA_ODR寄存器地址计算过程:
- 获取外设挂在哪个总线上面?查:系统结构图
- 获取总线基地址,,APB2总线基地址:0X4001 000
- 获取外设地址偏移量,GPIOA相对APB2总线偏移量是:0X800
- 获取寄存器地址偏移量,ODR相对GPIOA外设基地址的偏移量是:5
寄存器地址= BUS BASE ADDR + PERIPH OFFSET + REG OFFSET
GPIOA_ODR = 0X4001 0000 + 0X800 + 0X0C = 0X40
附录
参考链接:https://www.bilibili.com/video/BV13Y4y1878A?spm_id_from=333.851.b_7265636f6d6d656e64.1