使用用户数据写入和擦除内部闪存的次数



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

  1. 在链接器脚本中的内存中添加数据段

    存储器{RAM(xrw(:原点=0x20000000,长度=8KFLASH(rx(:原点=0x8000000,长度=64KDATA(xrw(:ORIGIN=0x8003800,LENGTH=2K//已分配一个完整的闪存页}

  2. 创建用户数据部分

    .user_data:{.=对齐(4(;*(.user_data(.=对齐(4(;}>数据

  3. 创建一个变量存储在闪存中

    属性((部分((".user_data"((const uint8_t userConfig[64]

  4. 使用以下功能写入数据,

    HAL_FLASH_Unlock((;

    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_frag_OPERR | FLASH_filg_WRPERR | FLASH_FLAG_PGAERR | flashflag_PGSERR(;

    FLASH_Erase_Sector(FLASH_Sector_11,VOLTAGE_RANG_3(;

    HAL_FLASH_Program(TYPEPROGRAM_WORD,&userConfig[index],someData(;

    HAL_FLASH_Lock((;

我的问题是,通过这种方式可以对内部闪存进行多少次写入以保存用户数据?

STM32内部闪存的特性在产品数据表中始终有详细说明。例如,在STM32H743上,续航时间为10kcycles。

您可以从中推断出内部闪存不适合您的用例(除非电源循环是异常事件(。

如果你绝对需要多次编写内部Flash(我强烈怀疑(,你可能想看看Flash翻译层的概念。它是一个软件层,提供了一种虚拟到物理内存的映射,并允许减少闪存损耗。

相关内容

  • 没有找到相关文章

最新更新