STM32 HAL_CRC 16 位

问题描述 投票:0回答:2

我尝试在 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()
的返回值是
uint32_t
,所以我的结果将是两个较低字节 - 在本例中为
0xed04
。至少这是我对功能描述的解释。

c stm32 hal crc16
2个回答
2
投票

文档指出您需要使用

__HAL_RCC_CRC_CLK_ENABLE();
启用 CRC 硬件时钟。你这样做吗?


0
投票

有谁知道,为什么我在尝试复制/粘贴有问题的代码时收到此错误:

'CRC_HandleTypeDef' has no member named 'Init'

我使用的是STM32F103C8。

© www.soinside.com 2019 - 2024. All rights reserved.