校验和示例:
cuint32_t Calculate_Checksum(uint32_t data)
{
// 简单的校验和计算方法
return data ^ 0xFFFFFFFF;
}
void Flash_Write_With_Checksum(uint32_t Address, uint32_t Data)
{
uint32_t checksum = Calculate_Checksum(Data);
HAL_FLASH_Unlock();
// 写入数据
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data);
// 写入校验和
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address + 4, checksum);
HAL_FLASH_Lock();
}
bool Flash_Read_With_Checksum(uint32_t Address, uint32_t* Data)
{
*Data = Flash_Read(Address);
uint32_t stored_checksum = Flash_Read(Address + 4);
// 校验
if (stored_checksum == Calculate_Checksum(*Data))
{
return true; // 数据正确
}
else
{
return false; // 校验失败
}
}
|