1.STM32系统框架
1.1 Cortex-M内核&芯片
?1.2 F1系统框架
4个主动单元+4个被动单元
AHB:高级高性能总线? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?APH:高级外围总线
其中 1 为 主动单元 , 2为被动单元
总线时钟频率:AHBB:72Mhz? ? ? ? ? ? ? ?APB1:36Mhz? ? ? ? ? ? ? ? ? ? ? ? ?APB2:72Mhz
2. STM32的寻址范围
(1)可以有32位地址线 (每根地址线有两种状态:导通或不导通)
(2)单片机内存地址访问的存储单元是按字节编址的(不是bit)----一个字节是8个bit
3. 存储器映射
存储器可以存储数据设备,本身没有地址信息,对存储器分配地址的过程叫做映射,有19根地址线(2的19次方 512k),每个按照两个字节来编写,有16根数据线
将4G的内存分为8块
4,寄存器映射
可以实现对2各个功能的实现?
寄存器是特殊的储存器,给他命名的过程,就是寄存器映射
直接对操作寄存器地址举例:
*(unsined int)(0x4001 080C) = 0xffff
(1)地址怎么找?? ? ? ? ? ? ? ? ? ?(2)映射方法?
寄存器地址计算:
为了方便计算,我们会把寄存器地址分为3部分
1.总线基地址(AHB APB? ? -------- BUS_BASE_ADDR)
2.外设基于总线地址的偏移量
3.寄存器相对外设地址的偏移量
所以寄存器地址 = 1+2+3
在数据手册寄存器映射的最后一行,也就是我们的总线基地址
APB1也叫做外设基地址----因为其为block2的基地址开始,所以被称为外设基地址,而上面的偏移量,也是基于APB1来进行偏移的
这个表则是基于APB2来偏移的
举例 GPIOA_ODR寄存器地址计算:
1. 获取外设所挂在的总线?
2.获取总线基地址??0x40010000
3. GPIOA相对APB2的总线偏移量:0X800
4.获取寄存器地址偏移: 0x0C(寄存器描述里)
最后得到 0x4001080C
因此,使用结构体可以简单的完成对寄存器的配置一次性到位
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
每个寄存器都多偏移4个字节,所以就可以一次性映射
??