我正在尝试使用 STM32L4 硬件模块生成 CRC。我想验证 fatfs 文件,所以基本上我有字节数组。我正在使用这个 CRC generator .
不幸的是,我不知道如何设置 STM32L4 来生成相同的结果。我需要 CRC32 并且我有
配置:
hcrc.Instance = CRC;
/* The default polynomial is not used. It is required to defined it in CrcHandle.Init.GeneratingPolynomial*/
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
/* Set the value of the polynomial */
hcrc.Init.GeneratingPolynomial = 0x4C11DB7;
//hcrc.Init.GeneratingPolynomial = 0xFB3EE248;
hcrc.Init.CRCLength= CRC_POLYLENGTH_32B;
/* The default init value is used */
/* The default init value is not used */
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
/* User init value is used instead */
//hcrc.Init.InitValue = 0;
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
//hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
/* The input data are inverted by word */
//hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_WORD;
//hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
HAL_CRC_Init(&hcrc);
测试:
uint8_t test[] = {49,50,51,52};
uint32_t uwCRCValue = HAL_CRC_Calculate(&hcrc,(uint32_t *) test, 4);
结果:A695C4AA
我没有想法。有一种方法可以让我成功地拥有 uint32_t test[]
并将输入设置为 hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
不幸的是我有 uint8_t
...
最佳答案
使用 CubeMX,我生成了这些设置:
hcrc.Instance = CRC;
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
像这样计算CRC:
uint32_t crc = HAL_CRC_Calculate(&hcrc, (uint32_t *)address, length);
最后反转:
crc = ~crc;
关于c - 如何设置STM32生成标准的CRC32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39646441/