stm32设置boot引脚能从0x08000000地址启动原因剖析
我们知道stm32系统上电时会根据boot引脚选择而不同的存储器中启动,比如从Bootloader,SRAM或者FLASH中启动,但是我翻了好多片文章都找不到我想要的答案,为什么设置引脚就能选择存储器,这到底是什么原因呢?
外设地址都是连接到总线上的,cpu向总线发送地址信息和控制信息就能从相应的存储器地址或者外设中读写数据。
而cpu上电时,内部寄存器空空如也,不知道要什么地方读数据,所以就设定了从0地址开始读取指令和数据,所以我们的程序应该放在0地址处,但是flash在0x08000000处,没法直接读取,所以就设置了boot引脚,这就用到了存储器重映射,就是把0x08000000地址开始的flash内容映射到了0x00000000开始的地方,然后就如愿以偿了
这里有个关键词:存储器重映射
其实这个存储器重映射看着很高大上,其实原理很简单
就如上图所示,其实最关键的就是那个地址译码那个玩意,那个东西被称为地址解析器,是可编程的,boot引脚的选定就是给他编程,具体怎么解析我们就不考虑了,就是按需要设计门电路了
当cpu访问0x00000000时,内容是空的,啥也没有,然后经过地址解析器,就把0x00000000 转换成了 0x08000000,然后就访问了FLASH,所以访问0x00000000,就是相当于访问了0x08000000,当然如果直接访问0x08000000,地址解析器就不需要解析了,这两个地方的内容看着就有种复制粘贴的感觉了
如果发现我说得有不对的还请指出,我好改正,谢谢指导,要是看我能点个赞,我能开心一整天😀😊😍😘