学习STM32基础总结三

186 阅读2分钟

1.STM32的寻址范围

需要清楚:

  1. 32位的单片机可以有32根地址线(每根地址线有两种状态:导通或者不导通)
  2. 单片机内存地址访问的存储单元是按字节编址的(而不是bit)

例如,通过内存编号访问内存地址

image.png 而不是通过地址访问内存空间,里面只有一个bit。

再例如:

image.png STM32寻址大小:2^32 = 4G (字节)

STM32寻址范围:0x0000 0000 ~ 0xFFFF FFFF

2.存储器映射

存储器指可以存储数据的设备,本身没有地址信息,对存储器分配地址的过程称为存储器映射

2.1 存储器功能划分

ST将所有的存储器及外设资源都映射在一个4GB的地址空间上(8个块)。其中Block0和Block1以及Block2都是使用重点。

image.png

3.寄存器映射

寄存器是单片机内部的控制机构,可以实现对单片机各个功能的控制

image.png

3.1寄存器分类

image.png

3.2寄存器映射

寄存器是特殊的存储器,给寄存器地址命名的过程,就叫寄存器映射。

主要包括3个步骤:

  1. 外设寄存器结构体类型定义
  2. 外设基地址定义
  3. 寄存器映射(通过将外设基地址强制转换为外设结构体类型指针即可)

例如,对STM32F103内部GPIOA~GPIOG的寄存器映射,就包括两个核心知识点:

  1. 结构体地址自增;
  2. 地址强制转换;

在定义GPIO_TypeDef结构体类型时,其成员包括:CRL、CRH等,每个成员是uint32_t类型,也就是4个字节,假设CRL地址是0的话,CRH就是0x04,依次递增。

以GPIOB为例,GPIOB外设的基地址为:GPIOB_BASE(0X4001 0C00),使用GPIO_TypeDef将该地址强制转换为GPIO结构体类型指针:GPIOB。

所以,GPIOB->CRL的地址:GPIOB_BASE(0X4001 0C00),

GPIOB->CRH的地址:GPIOB_BASE + 0X04

image.png

3.3寄存器地址计算

把寄存器地址分为三个部分:

  1. 总线基地址(BUS_BASE_ADDR)
  2. 外设基于总线基地址的偏移量(PERIPH_OFFSET)
  3. 寄存器相对外设基地址的偏移量(PEG_OFFSET)

寄存器地址 = 1+2+3