一:三种启动方式的概述:
分别是Flash启动,我们一般下载程序的内存区域,系统存储器启动就是通过isp下载启动,开始玩32一定用过这种下载方式,当然我也用过,最后一种是内嵌的SRAM启动,用到的比较少,我也没用过。
如图,我们可以看到我们可以通过BOOT0和BOOT1引脚来切换启动的方式和状态。对应我们开发板在哪呢?我来举了个例子,这是f103的最小系统开发板,图中就是选择启动的状态,每个开发板都会有这样的启动选择!
二:存储器重映射:
32为了支持多种启动的方式,我们介绍一下重映射技术,32是如何判断和进行以上三种启动方式呢?
通过BOOT0这个引脚,可以选择我们将哪部分映射到“Aliased区域”(地址0x00000000开始),就是图我圈出来的区域,比如:我们可以吧SRAM的16K区域映射到储存器的重映射区域,也可以吧Flash区域映射到储存器的重映射区域。
重映射技术这样的好处是什么呢?
答案:不同的启动方式,中断向量表的位置也是不同的,比如:Flash地址从0x0800 0000开始,SREM从0x2000 0000开始的,我们使用重映射技术,中断向量表就固定在首地址的位置上了,这样我们就可以固定在0x0000 0000获取SP指针了,后面位置+4,获取PC指针(程序计数器)了。
哪些区域可以映射呢?
如下图所示:我们可以映射我们的Flash,SRAM1,System memory(系统存储器),FSMC块区域映射到我们的首地址去!
强调一下:映射技术最重要的是映射我们的中断向量表,因为硬件上电以后根据我们BOOT的引脚选择,开始读取这个映射的中断向量表
1. Flash启动:
注意:
Flash启动我们需要保证系统上电复位以后,可以从0x0000 0000读到我们的Flash的中断向量表,也就是我们BOOT引脚选择了Flash模式,映射了Flash的储存区域到首地址去了,启动后首地址直接读到我们的SP和PC指针。
上图所示这里必须是Flash的首地址,否则无法启动,原因是首地址无法得到PC指针和SP指针。
2.内嵌SRAM启动
由于SRAM的掉电容易丢失的特性,我基本没有用过SRAM启动的方式,他的目的是用于调试,这里我就不详说了,怕说不清楚
如图所示:和Flash一样这里是SRAM的首地址
3.系统存储器启动
stm32内部有自己的boot loader(启动程序代码),可以通过boot loader实现ISP的程序下载!
大家也可以自己去写bootloader哦,这里就不详细介绍了!