|
现在我的程序在OTA升级过程中需要同时分别计算CRC16和CRC32的数组数据,现在想通过硬件CRC完成CRC值的计算。但实际使用发现,拆分计算后的结果和一次计算的结果并不一致。
以下面的程序为例,把rt_uint8 data[8]=={0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}拆成4字节分两次计算:
rt_uint8_t data[4]={0x01,0x01,0x01,0x01};
CRC_HandleTypeDef _crc;
_crc.Init.CRCLength=CRC_POLYLENGTH_32B;
_crc.InputDataFormat=CRC_INPUTDATA_FORMAT_BYTES;
_crc.Instance=CRC;
_crc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
_crc.Init.GeneratingPolynomial = 0x04C11DB7;
_crc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
_crc.Init.InitValue = 0;
_crc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
_crc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
HAL_CRC_Init(&_crc);
rt_uint32_t result = HAL_CRC_Calculate(&_crc,(uint32_t*)data,sizeof(data));
HAL_CRC_DeInit(&_crc);
_crc.Init.InitValue=result;
HAL_CRC_Init(&_crc);
result = HAL_CRC_Calculate(&_crc,(uint32_t*)data,sizeof(data));
和下图在线CRC计算的结果对比,4B83FDBA是我的期望值,但实际计算出来的结果是DC9C9E43。这个网站看来初始值的重新传入和STM32硬件的一样,但我网上找了别的CRC32算法,是可以拆分后也能算出4B83FDBA的。现在主要是知道STM32的硬件CRC怎样正常拆分计算?
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|