今天在使用STM32F405RGT6存储参数时,发现程序卡死在从FLASH读出数据校验结果处。
仿真发现FLASH中的校验与读出后不一样
查看了HAL_CRC_Calculate函数发现,参数中的数组为uint32_t的,猜测sizeof计算出来的是8位的个数。
uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
原代码如下:
check_temp=HAL_CRC_Calculate(&hcrc,(uint32_t *)&ConfigBlock_temp,sizeof(ConfigBlock_temp)-sizeof(uint32_t));
将计算现来的长度除以4,修改后代码如下:
check_temp=HAL_CRC_Calculate(&hcrc,(uint32_t *)&ConfigBlock_temp,(sizeof(ConfigBlock_temp)-sizeof(uint32_t))/4);
修改后程序就能顺利运行下去了。