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大小不大才能这样做。
我们现在就是使用Keil默认的方式。
烧录程序后直接跑呗!
升级的话,使用官方的ISP方式。也是串口,区别不大的
这个建议的存储内容不太实际吧!尤其是最后一个128KB的分区,如果用来做模拟EEPROM,那这一页擦除要存储多少数据啊!
啥项目需要保存这么多的非易失性数据!
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |