工作中遇到偶发性的EEPROM的数据全部恢复到默认的情况,原因是客户从设备上获取24V电源电流过大,导致开机的时候上电速度变慢。
STM32的默认复位电压是1.7V左右,FRAM或者EEPROM是2.7V,电压从1.7V到2.7V的时间太长,导致STM32复位并运行程序到需要读取EEPROM时,由于上电速度太慢,电压不到2.7V,导致读取的数据错误。
我的程序中开机会判断数据是否正确,如果不合理就会恢复默认重新初始化EEPROM,导致了问题。
修改STM32的BOR复位电压到超过2.7V或者对工作电压进行监控,确保正确的电压再读取EEPROM,再简单点就是给足够的上电延迟时间。
/*******************************************************************************·
/// @brief 修改复位电压到2.85V
*******************************************************************************/
void Set_BOR_Level(void)
{
static FLASH_OBProgramInitTypeDef OptionsBytesStruct;
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.OptionType = OPTIONBYTE_USER;
OptionsBytesStruct.USERType = OB_USER_BOR_LEV;
OptionsBytesStruct.USERConfig = OB_BOR_LEVEL_4; //2.85V
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}