关于图上的几个问题(图从左往右看)
1.为什么STM32的理论地址范围(寻址范围)为4G?
STM32的地址总线为32位,32位可以理解为物理的引脚,32只引脚通过拉高拉低,也就是选择0或者1,32位2进制=2的32次方=4294967296组地址,一个地址对应一个字节,即:
4294967296字节=4194304KB=4096MB=4GB
地址总线体现了STM32的寻址能力,最大能使用的存储空间大小;
2.STM32的32是否是因为地址线32条?
【明解STM32】一文读懂STM32芯片总线_stm32总线-CSDN博客
不是,这只是一个巧合;
STM32的32表示的是arm核能够一次处理的数据的位宽为32位,也就是数据总线的宽度;
寄存器宽度与数据总线宽度一致;
3.存储器的映射是什么意思?
存储的映射是指STM32通过32位地址总线定义的4294967296组地址,与存储器上的每个存储分区经行一一对应,也就是每个字节分区进行排序对应;(给存储器的每个字节存储空间取名字,需要使用的时候喊名字就行);
4.关于Keil或其他烧录工具,对STM32的烧录起始地址设置为0x0800 0000的解答
首先分析下图,关于STM32上4G寻址空间(部分)的分配
如图,第一段内存空间起始地址位0x0000 0000 -0x001F FFFF,空间大小为1M
系统启动的的起始地址,该地址里面存放的应为系统启动代码,正常来说我们编写的代码应存放在该处;
但是,我们知道,STM32除了启动进入我们编写的程序外,还有其他启动模式,比如烧录模式,调试模式(芯片上编程);
烧录模式:
(1)串口烧录:需要从STM公司提前烧录在系统存储器上的Bootloader进行引导进入烧录模式,此时系统的必须要将0x0000 0000重映射(再次映射)到系统存储器之前被映射的0x1fff ffff-0x1fff 7a0f存储位置。这样系统在启动时就会从系统存储器进行启动进入烧录模式了;
但此时如果我们设置的为0x0000 0000为起始烧录地址,则将代码烧录到了系统存储器上去了,这是错误的,并且是不被允许的;
所以我们按原先规划的主Flash空间起始地址0x0800 0000进行下载,下载完成后,重新设置启动模式,从主Flash启动,将0x0000 0000重映射(再次映射)到原先定义的0x0800 0000上就可以正常从主Flash上启动了;
调试模式:
(2)从SRAM上进行启动
感谢STM32寄存器版的基础知识—内存映射_51CTO博客_stm32寄存器操作详解
标签:烧录,映射,32,存储器,STM32,地址,内存,0x8000 From: https://blog.csdn.net/weixin_41564872/article/details/144019021