STM32----HAL库函数

1.STM32系统框架

1.1 Cortex-M内核&芯片

STM32----HAL库函数_第1张图片

 1.2 F1系统框架

4个主动单元+4个被动单元

STM32----HAL库函数_第2张图片

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

STM32----HAL库函数_第3张图片

在数据手册寄存器映射的最后一行,也就是我们的总线基地址

STM32----HAL库函数_第4张图片

APB1也叫做外设基地址----因为其为block2的基地址开始,所以被称为外设基地址,而上面的偏移量,也是基于APB1来进行偏移的

这个表则是基于APB2来偏移的

举例 GPIOA_ODR寄存器地址计算:

1. 获取外设所挂在的总线 

2.获取总线基地址  0x40010000

3. GPIOA相对APB2的总线偏移量:0X800

4.获取寄存器地址偏移: 0x0C(寄存器描述里)

最后得到 0x4001080C

因此,使用结构体可以简单的完成对寄存器的配置一次性到位

                                         STM32----HAL库函数_第5张图片

每个寄存器都多偏移4个字节,所以就可以一次性映射

STM32----HAL库函数_第6张图片

  

你可能感兴趣的:(stm32,嵌入式硬件,单片机)