【发布时间】:2021-03-10 13:38:34
【问题描述】:
在我的 stm32 单片机上没有 eeprom。所以,我使用内部闪存来保存一个字节的用户数据,以便在电源循环之间保留它。我正在按照以下方式进行操作,
- 在链接描述文件的内存中添加数据部分
MEMORY {
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K
DATA (xrw) : ORIGIN = 0x800F800, LENGTH = 2K //Allocated one full flash page
}
- 创建用户数据部分
.user_data :
{ . = ALIGN(4);
*(.user_data)
. = ALIGN(4);
} >DATA
- 创建要存储在闪存中的变量
attribute((section(".user_data"))) const uint8_t userConfig[10]
- 使用以下函数写入数据,
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
FLASH_PageErase(FLASH_PAGE_31);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, (uint32_t)&userConfig[index], someData);
HAL_FLASH_Lock();
当我尝试写入闪存时,它失败并设置了 PGSERR 标志。
【问题讨论】:
-
哪个stm32都不一样
-
@old_timer 我正在使用 stm32G031K8
-
格式化您的问题以方便读者阅读。我对其进行了编辑以向您展示一个示例
-
感谢@P__JsupportswomeninPoland。编辑了我的问题以提高可读性
-
不要更改问题,因为答案不再有意义。为问题添加一些解释,但不要更改它!
标签: memory stm32 flash-memory