【发布时间】:2017-11-10 15:14:25
【问题描述】:
我想写一个变量,例如一个数字为 5 的整数到 FLASH 中,然后在电源消失并且设备重新打开后再次读取它。
我已经知道,要写东西,我首先需要擦除页面,然后再写。
手册上写着:
- 在闪存选项密钥寄存器 (FLASH_OPTKEYR) 中写入 OPTKEY1 = 0x0819 2A3B
- 在闪存选项密钥寄存器 (FLASH_OPTKEYR) 中写入 OPTKEY2 = 0x4C5D 6E7F
如何执行此任务?
Sector 0 有一个 Block 地址从 0x0800 0000 到 0x0800 3FFF,这是我要写的地方。
这里是手册的链接,第 71 页:STM32 Manual
【问题讨论】:
-
它高度依赖于硬件。某些类型的闪存根本不允许非块操作。
-
@4386427 这是不正确的。
OPTKEY1和OPTKEY2是值,而不是地址。将它们添加到 FLASH_OPTKEYR 的地址会导致崩溃或意外行为。 -
@duskwuff - 我明白了。我读它好像 OPTKEY1 和 OPTKEY2 是一组称为 FLASH_OPTKEYR 的寄存器中的两个寄存器。评论已删除。谢谢。
-
深入阅读手册当然是一种选择,但通常也会有一个应用说明来说明如何做到这一点。检查“eeprom emulation”或“bootloader”应用说明。
-
我只想指出,闪存在降级之前只有有限数量的擦写周期。我强烈建议使用电池备份的 NVRAM 或一些高耐用性外部非易失性存储器(例如 MRAM)来存储经常更改的非易失性数据。就我个人而言,我总是选择 MRAM 来处理这些事情。
标签: c mbed stm32f4 flash-memory