如果你将数组 Buf
放在 Flash 地址 0x08020000
,并希望修改这个数组中的值,需要遵循以下步骤:
-
解锁 Flash:首先需要解锁 Flash,以允许进行写操作。
-
擦除页面:在写入新数据之前,必须擦除相应的 Flash 页面(或扇区)。
-
写入数据:使用编程指令将新的数据写入到 Flash。
-
锁定 Flash:完成写入后,重新锁定 Flash。
下面是一个具体的代码示例,假设使用 STM32 微控制器:
#include "stm32f4xx_hal.h" // 包含必要的 HAL 库
#define FLASH_PAGE_ADDRESS 0x08020000 // Flash 开始地址
#define PAGE_SIZE 0x800 // 假设每页大小为 2KB
void WriteToFlash(uint32_t address, uint8_t* data, uint32_t size) {
HAL_FLASH_Unlock(); // 解锁 Flash 写入
// 擦除 Flash 页面
FLASH_Erase_Sector(FLASH_SECTOR_8, VOLTAGE_RANGE_3); // 根据需要选择正确的扇区
// 写入数据
for (uint32_t i = 0; i < size; i++) {
HAL_FLASH_Program(TYPEPROGRAM_BYTE, address + i, data[i]);
}
HAL_FLASH_Lock(); // 锁定 Flash 写入
}
// 示例数据
uint8_t newData[] = { /* 新数据 */ };
int main(void) {
// 初始化 HAL 库
HAL_Init();
// 写入新的数据到 Flash
WriteToFlash(FLASH_PAGE_ADDRESS, newData, sizeof(newData));
// 继续其他操作
while (1) {
// 主循环
}
}
在这个示例中:
HAL_FLASH_Unlock()
:解锁 Flash,以允许写入。FLASH_Erase_Sector()
:擦除指定的 Flash 扇区。HAL_FLASH_Program()
:逐字节写入新的数据。HAL_FLASH_Lock()
:完成后锁定 Flash。
--------如果直接声明一个比较大的全局数组Buf,Buf数组默认是放到RAM上的,Buf数组可以指定到其他位置,如0x20000008。所以没有必要将一个数组放到Flash上,否则写入很麻烦,每一次更改都要经过一些列的解锁擦除写入操作---------
标签:FLASH,HAL,0X08020000,Flash,写入,数组,Buf From: https://blog.csdn.net/ZLongTeng/article/details/142549158