项目用到Backup SRAM,如果只写一次的话,设备不重启或掉电读取没有问题,如果设备重启或者掉电,输入没有更新,总结就是最后一次写入数据没有更新在设备缓存中,如果换成写10个数据,第10个数据没有写入成功,前9个都没有问题,临时解决方法就是多写一个数据。
HAL_FLASHEx_OBGetConfig(&pOBInit);
if(pOBInit.RDPLevel==OB_RDP_LEVEL_0)
{
printf("[sys]:OB_RDP_LEVEL_0=0x%04X\r\n",pOBInit.RDPLevel);
}
else if(pOBInit.RDPLevel==OB_RDP_LEVEL_1)
{
printf("[sys]:OB_RDP_LEVEL_1=0x%04X\r\n",pOBInit.RDPLevel);
}
else if(pOBInit.RDPLevel==OB_RDP_LEVEL_2)
{
printf("[sys]:OB_RDP_LEVEL_2=0x%04X\r\n",pOBInit.RDPLevel);
}
else
{
printf("[sys]:OB_RDP_LEVEL=0x%04X\r\n",pOBInit.RDPLevel);
}
__HAL_RCC_BKPRAM_CLK_ENABLE();
if(HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE0)==HAL_OK)
{
printf("[sys]:设置功耗模式成功\r\n");
HAL_PWR_EnableBkUpAccess();
printf("[sys]:使能备份寄存器读写\r\n");
if(HAL_PWREx_EnableBkUpReg()==HAL_OK)
{
printf("[sys]:设置备份SRAM可以读写成功\r\n");
uint8_t test = TM_BKPSRAM_Read8(0);
printf("读test=0x%02X\r\n", test);
test++;
printf("改test=0x%02X\r\n", test);
TM_BKPSRAM_Write8(0,test);
printf("写test=0x%02X\r\n", test);
test = TM_BKPSRAM_Read8(0);
printf("读test=0x%02X\r\n", test);
test++;
printf("改test=0x%02X\r\n", test);
TM_BKPSRAM_Write8(0,test);
printf("写test=0x%02X\r\n", test);
test = TM_BKPSRAM_Read8(0);
printf("读test=0x%02X\r\n", test);
}
else
{
printf("[sys]:设置备份SRAM可以读写失败\r\n");
}
HAL_PWR_DisableBkUpAccess();
}
else
{
printf("[sys]:设置失败\r\n");
}
写1次
[sys]:设备启动
[sys]:OB_RDP_LEVEL_0=0xAA00
[sys]:设置功耗模式成功
[sys]:使能备份寄存器读写
[sys]:设置备份SRAM可以读写成功
读test=0x2B
改test=0x2C
写test=0x2C
读test=0x2C
[sys]:休眠
[sys]:设备启动
[sys]:OB_RDP_LEVEL_0=0xAA00
[sys]:设置功耗模式成功
[sys]:使能备份寄存器读写
[sys]:设置备份SRAM可以读写成功
读test=0x2B
改test=0x2C
写test=0x2C
读test=0x2C
写2次
[sys]:设备启动
[sys]:OB_RDP_LEVEL_0=0xAA00
[sys]:设置功耗模式成功
[sys]:使能备份寄存器读写
[sys]:设置备份SRAM可以读写成功
读test=0x1D
改test=0x1E
写test=0x1E
读test=0x1E
改test=0x1F
写test=0x1F
读test=0x1F
[sys]:休眠
[sys]:设备启动
[sys]:OB_RDP_LEVEL_0=0xAA00
[sys]:设置功耗模式成功
[sys]:使能备份寄存器读写
[sys]:设置备份SRAM可以读写成功
读test=0x1E
改test=0x1F
写test=0x1F
读test=0x1F
改test=0x20
写test=0x20
读test=0x20