STM32的内存架构
在《ARM Cortex-M3权威指南》中有关M3的存储器映射,因为Cortex-M3是32位的单片机,因此其PC指针可以指向2^32=4G的地址空间,也就是图中的 0x00000000到0xFFFFFFFF的区间,也就是将程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内,数据字节以小端格式存放在存储器中。不同的型号Flash 和 SRAM 的地址空间不同,起始地址都是一样的。
当STM32微控制器复位(无论是上电复位、软件复位还是外部复位)时,它会从内存映射中的一个特定地址开始执行代码。这个地址通常是0x00000000,这是ARM架构中程序计数器(PC)的起始地。0x00000000地址是STM32微控制器中的一个虚拟地址,它被用作代码执行的起始点。在复位后,微控制器会自动将这个地址指向内置Flash的起始位置,使得程序可以从Flash中的第一个字节开始执行。
Cortex-M3 内核规定,起始地址必须存放栈顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在 Cortex-M3 内核复位后,会自动从 起始地址的下一个 32 位空间 取出复位中断入口向量,跳转执行复位中断服务程序。Cortex-M3 内核固定了中断向量表的位置, 但是起始地址是可变化的。
STM32的三种启动模式
STM32有三种启动模式:FLASH启动、SRAM启动和系统存储器启动,通常三种启动方式由外部引脚boot0和boot1的电平决定。每个系列boot0和boot1电平对应的意义可能不同,下表是STM32F4xx系列的启动方式选择