内部Flash模拟EEPROM存储配置参数

0
回复
105
查看
[ 复制链接 ]

38

主题

1

回帖

130

积分

管理员

积分
130
2025-7-1 11:22:47 显示全部楼层 阅读模式
内部Flash模拟EEPROM存储配置参数
问题场景:
设备需要保存用户设置的10个参数,要求断电不丢失
解决方案:
  • 划分Flash扇区(以STM32F103为例):

[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





#define PARAM_START_ADDR 0x0800FC00  // 使用最后一个扇区#define PARAM_SIZE       1024        // 1KB存储空间
  • 写入函数(带擦除检查):

[backcolor=var(--ds-md-code-block-banner-wrap-background-color)][color=var(--dsr-text-2)]c
[color=var(--dsr-icon-fg-1)][color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

复制

[color=var(--button-text-color)][backcolor=var(--ds-button-color)][color=var(--button-icon-color)]

下载





void Flash_WriteParams(uint16_t *data) {    FLASH_Unlock();    if(*(uint32_t*)PARAM_START_ADDR != 0xFFFFFFFF) {        FLASH_ErasePage(PARAM_START_ADDR);  // 需要先擦除    }    for(int i=0; i<10; i++) {        FLASH_ProgramHalfWord(PARAM_START_ADDR+i*2, data[i);    }    FLASH_Lock();}
注意事项:
  • 擦除次数限制:STM32F103 Flash约1万次
  • 建议写入前做CRC校验


收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则