STM32F407的Flash块(扇区)是有大有小的,并不是等分的。我问了AI,AI回复我“为了在代码更新灵活性与擦除效率之间取得平衡。”
STM32F407VE 的 Flash 存储器容量为 512 KB,采用 非对称扇区结构,共划分为 8 个扇区(Sector 0–7),每个扇区大小不同,适用于不同应用场景。以下是其 Flash 扇区划分详情:
Flash Sector 划分表
右侧为给出来的建议,大家都是如何这种非等分扇区的呢?
虽然我不知道厂家为什么要这么划分,不过一定是有规划得,我在想是不是跑系统得时候更兼容,以及资源的利用更得当。已经好久没写代码了,主攻电源,请带带我。
我虽然也有STM32F407的板子,还是正点原子的探索者,但没怎么用,常使用STM32F411。但与STM32F407类似,它的flash分配也并不是每个扇区为4KB,结构为:
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base address of Sector 0, 16 Kbytes */ #define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) /* Base address of Sector 1, 16 Kbytes */ #define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) /* Base address of Sector 2, 16 Kbytes */ #define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) /* Base address of Sector 3, 16 Kbytes */ #define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) /* Base address of Sector 4, 64 Kbytes */ #define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) /* Base address of Sector 5, 128 Kbytes */ #define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) /* Base address of Sector 6, 128 Kbytes */ #define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) /* Base address of Sector 7, 128 Kbytes */
我的bootloader所用的空间比较小,一般就存放一个扇区即第0扇区,为了避免后续有更多的功能,可以先保留第一扇区不动

第3扇区留在用作存放升级标志使用,独占一个扇区,没办法最小擦除单位为16KB,第4扇区用作存放重要数据。第5扇区放app,第6扇区放app备份,第7扇区放更新的app。这样是升级异常还能回退版本。当然仅限于app大小不大才能这样做。
我要赚赏金打赏帖 |
|
|---|---|
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |