一、STM32F4 Flash 硬件扇区原生结构(1MB Flash)
STM32F40x/41x 系列 1MB Flash 的扇区划分是芯片硬件固定设计,并非均匀分割,其核心特点为前小后大,兼顾小容量引导程序存储与大容量应用代码存放:
- Sector 0~3:均为 16 KB 小扇区,适合存放中断向量、小容量配置参数;
- Sector 4:独立 64 KB 扇区,承接前半部分空间;
- Sector 5~11:均为 128 KB 大扇区,总计 896 KB,专门用于存放主应用程序。
| 扇区编号 | 地址范围 | 扇区大小 | 累计空间 |
|---|---|---|---|
| Sector 0 | 0x08000000 ~ 0x08003FFF | 16 KB | 16 KB |
| Sector 1 | 0x08004000 ~ 0x08007FFF | 16 KB | 32 KB |
| Sector 2 | 0x08008000 ~ 0x0800BFFF | 16 KB | 48 KB |
| Sector 3 | 0x0800C000 ~ 0x0800FFFF | 16 KB | 64 KB |
| Sector 4 | 0x08010000 ~ 0x0801FFFF | 64 KB | 128 KB |
| Sector 5 | 0x08020000 ~ 0x0803FFFF | 128 KB | 256 KB |
| Sector 6 | 0x08040000 ~ 0x0805FFFF | 128 KB | 384 KB |
| Sector 7 | 0x08060000 ~ 0x0807FFFF | 128 KB | 512 KB |
| Sector 8 | 0x08080000 ~ 0x0809FFFF | 128 KB | 640 KB |
| Sector 9 | 0x080A0000 ~ 0x080BFFFF | 128 KB | 768 KB |
| Sector10 | 0x080C0000 ~ 0x080DFFFF | 128 KB | 896 KB |
| Sector11 | 0x080E0000 ~ 0x080FFFFF | 128 KB | 1024 KB |
二、注意事项
-
扇区大小不可自定义STM32F4 的 Flash 扇区大小是硬件固化规则,无法通过软件修改,分区与擦除必须严格遵循官方地址映射,否则会导致擦除失败、程序跑飞。
-
区分宏定义与实际地址
stm32f4xx_flash.h中的FLASH_Sector_x是库内部枚举值,仅用于代码调用,不能直接用于地址计算,实际空间规划必须参考物理地址范围。 -
擦除范围必须完整覆盖应用程序,若遗漏扇区会导致旧程序残留,引发固件升级异常。
| 地址 | 偏移 | ÷0x10000(64k) | ×8 | 块编号 |
|---|---|---|---|---|
| 0x08020000 | 0x20000 | 0x2 | 0x20 | 0x20 |
| 0x08040000 | 0x40000 | 0x4 | 0x28 | 0x28 |
| 0x08060000 | 0x60000 | 0x6 | 0x30 | 0x30 |
| 0x08080000 | 0x80000 | 0x8 | 0x38 | 0x38 |
三、大容量芯片(≥2MB)双 Bank 架构
- 主存储区(0x08000000 起始):标准只有 12 个扇区(Sector 0~11),对应 0x0000~0x0058。
- Sector 12~23(0x0080~0x00D8) :仅存在于 2MB 双 Bank 芯片 (如 STM32F429/439),对应 Bank 2 的 12 个扇区,基地址为
0x08100000。 - 地址映射 :
- Bank 1(主存储):
0x08000000 ~ 0x080FFFFF(1MB) - Bank 2(扩展存储):
0x08100000 ~ 0x081FFFFF(1MB) - 每个 Bank 内部均包含 12 个扇区(0~11),共 24 个扇区编号(0~23)。
- Bank 1(主存储):


参考文章: