STM32----HAL库函数

2023-12-18 17:08:15

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个字节,所以就可以一次性映射

??

文章来源:https://blog.csdn.net/ArtoriaLili/article/details/135059871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。