我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它.
我已经知道为了写东西我首先需要擦除页面然后写.
在手册中它说:
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY1 = 0x0819 2A3B
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY2 = 0x4C5D 6E7F
我该如何执行此任务?
扇区0的块地址从0x0800 0000到0x0800 3FFF,这是我想写的地方.
这里是手册的链接,第71页:STM32手册
我想在芯片上的 SRAM 中存储一个简单的整数。(Cortex M4) 我用的程序是mbed online。我知道 SRAM 的地址从 0x2000 0000 开始,并且芯片有 4KB 的内存。
我已经阅读了数据表和位带部分,但这对我来说没有意义。
有人可以向我解释我如何在SRAM中存储例如数字5并再次读取它吗?
当前代码是这样的(c是一个整数,用户通过按钮改变):
if(c==100){
temp=c;
MBX_B0 = 1; // Word write
temp = MBX_B7; // Word read
TIMER_B0 = temp; // Byte write
return TIMER_B7; // Byte read
}
pc.printf("%d",temp);
它只是在 c==100 后停止运行 即使在断电后也应该保存该值。
uint32_t PAGEError = 0;
FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS ;
EraseInitStruct.Sector = FLASH_SECTOR_0;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08000000, counter)
HAL_FLASH_Lock();
counter2 = *(__IO uint32_t *)0x08000000;
counter3 = *(__IO uint32_t *)0x08000001;
counter4 = *(__IO uint32_t *)0x08000002;
sprintf(buf, "%d", counter2); //gets send to the OLED with I2C
sprintf(buf2, "%d", counter3);
sprintf(buf3, "%d", counter4);
Run Code Online (Sandbox Code Playgroud)
我想将变量计数器写入闪存,然后将其读取为counter2。第一个闪存扇区始于0x08000000。
counter2,3并4通过OLED屏幕显示。显示counter2作品并向我显示的值counter-1,但仅能显示一次。如果我再次写闪存,似乎什么也没发生。 …