写入STM32内部闪存失败



在我的stm32 mcu上没有eeprom。因此,我使用内部闪存来保存一个字节的用户数据,以在电源循环之间保留它。,我是按照以下方式来做的

  1. 在链接器脚本的内存中添加数据段
MEMORY { 
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K 
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K 
DATA (xrw) : ORIGIN = 0x800F800, LENGTH = 2K //Allocated one full flash page 
}
  1. 创建用户数据部分
.user_data : 
{ . = ALIGN(4); 
*(.user_data)
. = ALIGN(4);
} >DATA
  1. 创建一个变量以存储在闪存中
attribute((section(".user_data"))) const uint8_t userConfig[10]
  1. 使用以下函数写入数据
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标志。

  1. 0x0800 3800 - 0x0800 3FFF是第7组,而不是第11组。

  2. CCD_ 2通常是错误的,因为存储器在该微存储器中以64位字编程,并且地址必须与8字节边界对齐。

在对微控制器进行编程之前,请务必阅读文档。使用magic库并不能使您免于了解硬件。

相关内容

  • 没有找到相关文章

最新更新