STM32在上电后,从那里启动是由BOOT0和BOOT1引脚的电平决定的,如下表:
BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设置 BOOT1 和 BOOT0 引脚,来选择需要的启动模式。
1. 启动代码的位置
启动延迟过后,CPU 从引导存储器中启动代码执行.启动代码位于存储器地址最底部的地址,起始
地址是 0x0000_0000。
2. STM32的启动模式
STM32支持多种启动模式,主要由BOOT0和BOOT1这两个引脚的状态决定。常见的启动模式包括:
主Flash启动:(正常情况下使用)
一般使用 JTAG或者 SWD接口下载程序固件时,程序将被下载到这里,芯片重启后也将直接从这里读取并启动程序
系统存储器启动:(非正常情况使用,用来实现ISP下载)
这种模式启动的程序功能是由芯片厂家设置的。这种启动方式一般情况不使用。系统存储器是芯片内部一块特定的区域,STM32 出厂时由ST公司在这个区域内部预置了一段BootLoader, 即我们常说的 ISP程序, 这是一块ROM, 出厂后无法修改。
我们选用这种启动模式时,大多是为了使用 串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的 Flash 中。但是这个下载方式需要以下步骤:
Step1:将 BOOT0 设置为 1,BOOT1 设置为 0,然后按下复位键,这样才能从系统存储器启动 BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从 Flash 中启动。所以使用串口下载程序较为 麻烦, 需要频繁切换BOOT0与BOOT1。
内置 SRAM:
内置SRAM,SRAM没有程序存储的能力,这个模式一般用于频繁的程序调试,这样可以减少flash的擦写次数,保护flash。
这种模式可以用于 程序调试。 假如只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到SRAM中
主流用法:
一般比较主流boot模式是主Flash启动,使用ST-LINK+keil5 debug起来比较方便,速度也比较快
3:引脚配置
4:ISP和IAP
ISP就是in-system programming(在系统烧录,在系统编程)。
以前烧录bin/hex文件到单片机内部flash中是需要借助专用的烧录器的,比较麻烦。随着时间推移衍生出来了一种不需要借助烧录器也不需要将单片机从板子上拆卸下来的烧录方法,这种方法就是ISP。一般ISP都是PC通过串口把bin/hex文件ISP到单片机内部的flash。例如STM32从系统存储器启动模式,就是在系统存储器中存储了一段可以接收串口数据的代码来实现将bin/hex文件烧录到主闪存存储器,烧录完成后再将启动模式手动切换成主闪存存储器执行刚刚烧录的程序。
IAP就是in-application programming(在应用编程,在应用烧录,在线升级)。
IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。IAP的时候用户程序通过串口、usb、ethernet等,来实现接收PC发送过来的bin/hex文件,然后将之烧录到内部flash中去完成IAP,完成后再次启动后就会从用户存储器区执行,更新就会起效果。一般实现iAP需要人为的将用户存储器区分为2部分:bootloader+app。