You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32G071KB如何选择Flash地址存储掉电可保留的变量?

STM32G071KB HAL_FLASH_Program 地址参数设置说明

核心问题先明确

绝对不能直接使用SRAM起始地址0x20000000作为Address参数,原因有二:

  • 0x20000000属于SRAM地址区间,SRAM是易失性存储,掉电后所有数据会自动清空,完全达不到断电保留数据的需求
  • HAL_FLASH_Program是专门用于操作STM32内置Flash的API,仅能识别Flash地址区间的合法地址,传入SRAM地址会直接返回参数错误,甚至触发硬件异常

合法Address参数设置规则

STM32G071KB的内置Flash总大小为128KB,地址区间为0x08000000 ~ 0x0801FFFF,所有Address参数必须落在该区间内,同时满足以下要求:

  1. 不得占用固件已使用区域
    你需要先确认自己编译出的固件占用的Flash大小,选择未被固件占用的空白页作为存储区域。STM32G0系列Flash的页大小为2KB,比如你的固件总大小为60KB,占用前30个页,那可以选择从0x08010000(第32个页起始地址)作为存储起始地址,避免擦写时破坏运行固件。
  2. 地址必须对齐
    对齐要求和你传入的TypeProgram参数强绑定:
    • 当TypeProgram为FLASH_TYPEPROGRAM_DOUBLEWORD(单次写入8字节):Address必须8字节对齐
    • 当TypeProgram为FLASH_TYPEPROGRAM_FAST(快速模式单次写入32字节):Address必须32字节对齐
  3. 写前必须先擦除对应页
    Flash仅能对值为全0xFF的空白位置执行写入操作,写入前需要先调用HAL_FLASHEx_Erase擦除对应地址所在的Flash页,再执行写入操作。

示例配置

如果你需要预留最后1个2KB的Flash页作为掉电数据存储区,STM32G071KB最后一页的起始地址为0x0801F800,可以直接将该值作为Address参数传入即可。

内容的提问来源于stack exchange,提问作者lukewalker_p2501

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:51:04