STM32L4 的 CRC-32 从 HAL_CRC_Calculate() 计算;功能

CRC-32 for STM32L4 calculate from HAL_CRC_Calculate(); function

作为下面的 CRC 配置

      hcrc.Instance = CRC;
      hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
      hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
      hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
      hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;<br>
      hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
      if (HAL_CRC_Init(&hcrc) != HAL_OK)
      {
        Error_Handler();
      }

多项式状态:default (MPEG-2 : 0x04C11DB7)
价值阶段:default (MPEG-2 : 0xFFFFFFFF)
结果数据从 HAL_CRC_Calculate(...) 计算;是 0xD2AEA5A1

      uint32_t data[2]={0x01, 0x01};
      uint32_t crc_cal;
      crc_cal = HAL_CRC_Calculate(&hcrc, data, 2);
      sprintf(VariableDebug,"CRC Value (HAL_CRC Cal.) %08X, ",crc_cal);
      PRINT_MSG_CYAN(VariableDebug);

与网上的CRC数据不一样0xD66FB816如下Link
https://crccalc.com/
你能帮我解决这个问题吗?

此致, Suchada Sri.

改变这个:

uint32_t data[2]={0x01, 0x01};
uint32_t crc_cal;
crc_cal = HAL_CRC_Calculate(&hcrc, data, 2);

为此:

uint8_t data[]={0x01, 0x01};
uint32_t crc_cal;
crc_cal = HAL_CRC_Calculate(&hcrc, (uint32_t*)data, 2);

为了更好的练习,您也可以使用 sizeof(data) 而不是 2