存储器采用固定的存储器映射,代码区域起始地址为0x0000_0000(通过ICode/DCode总线访问),而数据区域起始地址为0x2000_0000(通过系统总线访问)。Cortex™-M4F CPU始终通过ICode总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供启动空间。STM32F4xx微控制器实施一种特殊机制,可以从其它存储器(如内部SRAM)进行启动。
在STM32F4xx中,可通过BOOT[1:0]引脚选择三种不同的启动模式,如下表1所示。
启动模式选择引脚 | 启动模式 | 启动空间 | ||
BOOT1 | BOOT0 | |||
X | 0 | 主Flash | 选择主Flash作为启动空间 | |
0 | 1 | 系统存储器 | 选择系统存储器作为启动空间 | |
1 | 1 | SRAM | 选择SRAM作为启动空间 |
复位后,在SYSCLK的第四个上升沿锁存BOOT引脚的值。复位后,用户可以通过设置BOOT1和BOOT0引脚来选择需要的启动模式。
BOOT0为专用引脚,而BOOT1则与GPIO引脚共用。一旦完成对BOOT1的采样,相应GPIO引脚即进入空闲状态,可用于其它用途。
芯片退出待机模式时,还会对BOOT引脚重新采样。因此,当器件处于待机模式时,这些引脚必须保持所需的启动模式配置。这样的启动延迟结束后,CPU将从地址0x0000_0000获取栈顶值,然后从始于0x0000_0004的启动存储器开始执行代码。
如果芯片从SRAM启动,在应用程序初始化代码中,需要使用NVIC异常及中断向量表和偏移寄存器来重新分配SRAM中的向量表。