我正在使用 STM32F103 并将我的代码移动到 STM32F746。F103 能够以每页为基础更新 1KB 和 2KB 的 Flash。我有 STM32F746ZG Nucleo-board,我的代码很大,flash 占用了 0x08038000。我想将其他小型应用程序保存在 0x08040000(sector_5) 上。该应用程序由几个 2KB 大小组成。我需要在 Sector_5 中存储多个应用程序,而 M7 不能以 1KB 或 2KB 为增量使用 Flash。
以下是 STM32F746ZG 的扇区大小。
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08008000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08010000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x08018000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08020000) // 128 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08040000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08080000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x080C0000) // 256 Kbytes
STM32F746 由扇区大小为 256 KB 的闪存组成,从扇区 5 到扇区 7。如果我想使用 Sector_5,我必须擦除整个一个扇区。如果我只想更新 Sector_5 前面的大约 2KB 并保持 2KB 之后的区域完好无损怎么办?这意味着我只将内容从 0x08040000 更新到 0x08042000。我必须保持从 0x08042001 到 0x0807FFFF。
我什至无法将 256 KB 的闪存复制到 RAM。因为 F746 只有 240KB 的内部 RAM,而我的许多任务已经使用了 RAM,所以没有足够的 RAM 来复制一个扇区。在这种情况下,请告诉我如何在闪存中更新部分 256KB。