我正在尝试使用STM32F405的内部闪存来存储一堆用户可设置的字节,这些字节在重新启动后仍然存在.
我正在使用:
uint8_t userConfig[64] __attribute__((at(0x0800C000)));
Run Code Online (Sandbox Code Playgroud)
为我想要存储的数据分配内存.
当程序启动时,我检查第一个字节是否设置为0x42,如果没有,我使用以下方法设置:
HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Run Code Online (Sandbox Code Playgroud)
之后,我检查了价值userConfig[0],我看到0x42......太棒了!
然而,当我点击重置时,再次查看该位置,它0x42不再是......
知道我哪里错了吗?我也尝试过:
#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的结果..
我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它.
我已经知道为了写东西我首先需要擦除页面然后写.
在手册中它说:
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY1 = 0x0819 2A3B
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY2 = 0x4C5D 6E7F
我该如何执行此任务?
扇区0的块地址从0x0800 0000到0x0800 3FFF,这是我想写的地方.
这里是手册的链接,第71页:STM32手册