STM32 HAL_CRC 16 位

STM32 HAL_CRC 16 Bit

我尝试在我的 STM32L4 上使用 HAL_CRC 来计算 16 位 CRC,但无论输入是什么,我总是得到相同的结果...

CRC初始化

hcrc.Instance = CRC;
hcrc.Init.CRCLength = CRC_POLYLENGTH_16B; //as I have a 16bit polynome
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
hcrc.Init.GeneratingPolynomial = 0x1021; //MCRF4xx polynome
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE; //I want to init with 0xFFFF
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE; //input inversion
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE; //output inversion
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES; //I have byte input
if (HAL_CRC_Init(&hcrc) != HAL_OK)
{
    Error_Handler();
}

然后用

调用计算
uint32_t result;
uint8_t pBuffer[3] = {0x33, 0x33, 0x55};
result = HAL_CRC_Calculate(&hcrc,pBuffer,3);

但结果始终是 0xe000ed04,对于这种特定情况,我希望 0xC91B 但至少如果更改输入,它应该会更改。有人发现这个代码片段有问题吗?我在 HAL 库中找不到 16 位 CRC 的任何示例代码。

我知道 HAL_CRC_Calculate() 的 return 值是 uint32_t,所以我的结果将是两个较低的字节 - 在本例中为 0xed04。至少那是我对函数描述的解释。

文档表明您需要使用 __HAL_RCC_CRC_CLK_ENABLE(); 启用 CRC 硬件时钟。你在做吗?