我正在尝试用STM32L4硬件模块生成CRC。我想验证fatfs文件,所以基本上我有字节数组。我使用此CRC generator。
不幸的是,我不知道如何设置STM32L4来生成相同的结果。
配置:
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
。
6条答案
按热度按时间dgiusagp1#
使用CubeMX,我使用这些设置生成:
CRC计算如下:
最后反转:
wsxa1bj12#
这对我很有效。
而手工方法
ogq8wdun3#
使用下面的代码来计算cc32。CRC32计算由STM32 CRC单元是不一样的,我们的标准CRC32,它没有使用大端,它不会与0xFFFFFFFF异或。
像这样计算CRC32:
zvms9eto4#
在使用外围设备时,实现应该非常简单-基本上是一个循环运行:
棘手的部分是正确设置选项(位翻转、初始值、要使用的多项式、XOR结果等)并确保以适当的数据宽度访问数据寄存器(即,指示它一次对1、2或4个字节进行操作)。https://crccalc.com/有助于显示您将获得的变化,这取决于位顺序是否颠倒,输出是否具有位XOR'd,我建议用几个任意字节测试你的实现,并将结果与该站点为相同数据生成的表进行比较。
下面是我的实现以供参考:
bvpmtnay5#
如果你想知道多项式
hcrc.Init.GeneratingPolynomial
和hcrc.Init.CRCLength
是什么意思,这是一个小提示。在你最初的例子中,你的多项式设置将给予:如果你安装了node.js,你可以使用下面我写的函数将stm32的crc生成多项式转换为crc多项式公式
...+x^2+x^1+1
的形式。使用这个方法,你可以确认你是否正确地设置了你的多项式。(因为很多crc标准使用多项式表示)
sulc1iza6#
我找到了这个教程(针对STM32F746),并将其与STM32F407VGT6一起使用,
有很多IDE配置,直接访问它们可能会更好,很抱歉我没有直接在这里嵌入所有内容:
Hands-on: CRC Checksum Generation
注意:在这种情况下,要写入的文件是ROM.hex(您需要配置STM32CubeIDE才能自动执行此操作,IDE使用 *.elf文件,请参阅下面的提示):
Some tips and solutions about this CRC usage (Windows/Linux)