目录
存储器映射可以当地图理解
STM32具体存储器映射图
Block0:
Block1
Block2
存储器映射可以当地图理解
CPU要准确找到存储某个信息的存储单元,就必须为这些单元分配一个相互可区分的标识,这个标识就是常说的地址编码。
存储器映射其实就是将芯片理论上的地址分配给各个存储器。
注意:
-
存储器映射并不是只针对SROM和片内Flash做地址映射,其实所有的片内外设(比如IO口)都需要地址,也都需要做映射。
STM32具体存储器映射图
芯片能访问的存储空间是由芯片的地址总线的数量来决定。STM32芯片内部的地址总线为32根。所以STM32有4G的地址空间。(这个4GB是STM32理论分配的地址空间。
程序存储器、数据存储器、寄存器和输入输出端口被组织在这个4GB的线性地址空间内。数据字节以小端格式(先存低位再存高位)存放在存储器中。
ARM把可访问的存储器空间分成8个主要块,每个块为512MB。这个容量是非常大的,因此芯片厂商就在每块容量范围内设计各自特色的外设。但是每块区域容量占用越大,芯片成本就越高,所以说我们使用的 STM32 芯片都是只用了其中一部分。ARM 在对这 4GB 容量分块的时候是按照其功能划分,每块都有它特殊的用途。
Block0、Block1和Block2是重点包含了STM32芯片的内部 Flash、RAM和片上外设。
Block0:
0x0000 0000-0x0007 FFFF:取决于BOOT引脚,为 FLASH还是系统存储器还是SRAM 的别名。(512K)三种启动模式 1从flsh擦写有寿命 2从sram启动(一般只在开发时候用) 3bootloader模式,
它会决定跳到falsh还是system memory中
0x0008 0000-0x07FF FFFF:预留。(1M)无东西
0x0800 0000-0x0807 FFFF:片内 FLASH,我们编写的程序就放在这一区域(512K)
0x0808 0000-0x1FFF EFFF:预留。(383M)
0x1FFF F000-0x1FFF F7FF:系统存储器,里面存放的是 ST 出厂时烧写好的ISP自举程序,用户无法改动。使用串口下载的时候需要用到这部分程序。(2K)
0x1FFF F800-0x1FFF F80F:可选字节,用于配置读写保护、BOR级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。当芯片不小心被锁住之后,我们可以从RAM里面启动来修改这部分相应的寄存器位。
0x1FFF F810-0x1FFF FFFF:预留。
Block1
Block1用于设计片内的SRAM,例如STM32F103ZET6的SRAM是64KB。从存储器映射图中可以看到Block1内部又划分了几个功能块,我们按地址从低到高顺序依次介绍。
0x2000 0000-0x2000 FFFF:SRAM,容量为 64KB。
0x2001 0000-0x3FFF FFFF:预留。
Block2
Block2用于设计片内外设,根据外设总线速度的不同,Block2被划分为AHB和APB 两部分,APB又被分成APB1和APB2。这些都可以在上面存储器映射图中可看到。
0x4000 0000-0x4000 77FF:APB1总线外设。
0x4001 0000-0x4001 57FF:APB2总线外设。
0x4001 8000-0x4002 33FF:AHB总线外设。