Cortex-M3 内核 MCU-STM32F1 开发之路:(二)寄存器地址的计算
上一篇 | 下一篇 |
---|---|
MCU 的构成,FLASH 和 SRAM | 待写 |
寄存器地址计算(了解即可)
这个寄存器映射表,手册里都会给出,你只要知道时如何计算的就行了,实际不用真的去计算。
16 进制中,如果前面没有 0x 的话,那么后面有h的就表示是 16 进制。
1)基础
STM32 有 32 根地址线,每根地址线都有两种状态(1通、0不通),所以STM32的寻址大小为 2 32 = 4 G 2^{32}=4G 232=4G 个字节,即 0x00000000~0xFFFFFFFF
。
STM32 中的寄存器通常都是 4 字节的,也就是 32 位。
存储器映射(片内内存分配):第16讲 基础篇-存储器映射_哔哩哔哩_bilibili
寄存器映射(给寄存器地址命名):第17讲 基础篇-寄存器映射1_哔哩哔哩_bilibili
2)计算方法
分为三个部分:
- 总线基地址(BUS_BASE_ADDR)
- 总线之间也是从某个基地址偏移得来的,比如说 APB2 就是在 APB1 的基地址上偏移得来的
- 外设基于总线基地址的偏移量(PERIPH_OFFSET)
- 寄存器相对外设基地址的偏移量(REG_OFFSET)
寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET。
以 GPIOA_ODR 寄存器为例:
- 获取外设挂在哪个总线上面?查:系统结构图
- 获取总线基地址,APB2总线基地址:0X40010000
- 获取外设地址偏移量,GPIOA相对APB2总线偏移量是:OX800
- 获取寄存器地址偏移量,ODR相对GPIOA外设基地址的偏移量是:OXOC
则:GPIOA_ODR = 0X4001 0000 + 0X800 + 0X0C = 0X4001 080C