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 硬件时钟。你在做吗?
我尝试在我的 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 硬件时钟。你在做吗?