相关概念
简单学习了寄存器映射的相关概念,在这里记录一下。
首先寄存器映射的概念是:寄存器是单片机上特色的存储器,给寄存器地址命名的过程就是寄存器映射。

阅读参考手册的流程
- 寄存器的名字
- 偏移量及复位值
- 寄存器位表
- 位功能描述
寄存器地址计算
为了方便编写代码及使用,将寄存器地址分为三个部分
- 总选基地址(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











