stm32启动模式(boot)与过程

启动模式:

在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式
stm32启动模式(boot)与过程_第1张图片

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从
内置SRAM启动。

1.从主闪存存储器启动:主闪存存储器(Flash)被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。在keil5中点击魔术棒,再点击Target即可验证上述。(右侧地址为从SRAM启动的地址)
stm32启动模式(boot)与过程_第2张图片

2.从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFFF000)访问它。这里的系统存储器是芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,也就是ISP代码。这个区域的内容在芯片出厂后没有人能够修改或擦除,也就是说它属于ROM。(这是一定的,因为ROM掉电数据不丢失,RAM掉电数据丢失)

到这里你应该有疑问,既然芯片出厂后没有人能够修改或擦除那这种启动方式不就没用了吗?

这是因为这种启动方式是利用BootLoader将程序下载到系统的Flash中。属于间接的用从主闪存存储器启动。(选择此模式一般是用串口下载程序,即ISP烧录)

3. 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。
此模式下启动一般用于在SRAM中调试代码。

选择哪种方式就是将中断向量表定位到哪里。

启动过程:

上电后,上面的每一种方式都会将起始地址重映射为0x00000000,从而代码从三种方式之一的位置启动。存放代码的位置就是bootloader(引导加载程序),可以叫启动文件。其作用是:从复位到开始执行main()
稍微细一点为:上电 - 硬件初始化 - 复位(根据中断向量表找到复位的入口地址,初始化堆栈指针,设置pc的值 ,设置中断向量表,配置系统时钟、调用__main初始化堆栈) - 调用main()。

你可能感兴趣的:(stm32,stm32,单片机)