赞
踩

芯片内核和外设之间通过各种总线连接,其中主控总线有 8 条,被控总线有 7 条
主控总线通过一个总线矩阵来连接被控总线,总线矩阵用于主控总线之间的访问仲裁管理,仲裁采用循环调度算法。

什么是存储器映射?
连接被控总线的是 FLASH,RAM 和片上外设,这些功能部件共同排列在一个 4GB(2^32)的地址空间内。
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称
为存储器映射。如果给存储器再分配一个地址就叫存储器重映射。
在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定
了用途。

三个重要的块:Boock0 用来设计成内部FLASH; Block1 用来设计成内部 RAM;Block2 用来设计成片上的外设。
Block0内部区域功能划分:
F407 系列片内部 FLASH 最大是 1MB

储存器Block1内部区域功能划分:
F407 内部 SRAM 的大小为 128KB,其中 SRAM1 为 112KB,SRAM2 为 16KB。

储存器 Block2 内部区域功能划分:

什么是寄存器映射?
寄存器定义:寄存器是一种用于存储和快速访问数据的特殊类型的内存单元。
(1) 高速缓存的一部分,CPU更快地访问和操作其中的数据。
(2) 有多种类型,如通用寄存器、专用寄存器、程序计数器等。
(3) 数据通常在寄存器之间传输,从内存加载到寄存器,然后在寄存器之间执行操作。
STM32F407中的寄存器:在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit。每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。
可以找到每个单元的起始地址,然后通过 C 语言指问针的操作方式来访这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名。给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
GPIOF 端口的输出数据寄存器 ODR 的地址是 0x40021414,ODR 寄存器是 32bit,低 16bit 有效,对应着 16 个外部IO,写 0/1 对应的的 IO 则输出低/高电平。通过C语言指针的操作方式,让 GPIOF 的16个IO都输出高电平。
- // GPIOF 端口全部输出 高电平
- *(unsigned int*)(0x4002 1414) = 0xFFFF;
绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存器的方式来操作。
- // GPIOF 端口全部输出 高电平
- #define GPIOF_BASE 0x40021400
- #define GPIOF_ODR *(unsigned int*)(GPIOF_BASE+0x14)
- GPIOF_ODR = 0xFF;
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB 挂载低速外
设,AHB 挂载高速外设。
相应总线的最低地址称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。