啰嗦两句
花了断断续续两天时间在STM32上面写了一个IAP(In Application Programing)Boot,期间多多少少还是遇到的了不少问题。现在就花点时间把这两天写的东西整理一下,就当是学习笔记吧。本人用的芯片是STM32F4系列,1M的FLASH,192KB的SRAM。
正文
不得不提的启动方式
STM32支持三种启动方式
1. FLASH启动
2. SRAM启动
3. 系统存储器启动
这三种启动顺序决定了上电后第一条指令的位置。如果你选择FLASH启动,则上电复位后PC指针指向第一条指令位置——0x08000000,如果你选择SRAM启动,则上电复位后PC指针指向第一条指令位置——0X20000000,若你选择系统存储器启动,则上电复位后PC指针指向第一条指令位置——0X1FFF0000。
为什么会这样呢?接下来我们分析一下STM32F4的存储区地址结构。
上图摘自《Cortex-M3与M4权威指南》。从这里我们可以看出M4内核支持4GB的存储空间,从0X00000000-0X1FFFFFFF共512MB的空间是Code区,0x20000000-0x3FFFFFFF共512MB的空间是SRAM,其他的我们暂且不分析。我们再来看看《STM32F4xx Reference manual 》中 关于F4系列的物理内存映射
从上面的物理内存映射图我们可以看出:
0x08000000-0x080FFFFF: FLASH
0x1FFF0000-0x1FFF77FF: System memory
0x20000000-0x2001FFFF: SRAM
其中FLASH大小为1MB, SRAM大小为12KB, System memory大小为30KB。
在这里解释三个问题: