c - 如何设置STM32生成标准的CRC32

标签 c microcontroller stm32 crc32

我正在尝试使用 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/

相关文章:

c - 根据另一个数组中设置的值打印一个数组的元素

c - 如何修改 ListView 子项中单个字符的字体颜色?

c - 使用 Atmel 89C2051 微 Controller 开发固件应用程序需要哪些软件?

c - 我在哪里可以学习串行/终端接口(interface)编程?

c - [USART-STM32F4xx] : How to wait until character arrives on Status Register (USART_SR)?

c++ - TCHAR[] 转换为字符串

c - Linux 文件管理

c - 为什么 "lcd_puts"在 LCD 16*2 上不显示变量值?

c - 编译 Dcmi 时出现 xError

c - 主从配置中的 STM32 奇数定时器 1 行为 - mb 代码问题