Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Byte STM 32上的CRC32 CRC外围设备:相同数据的字节流和字流给出不同的结果_Byte_Stm32_Word_Crc32 - Fatal编程技术网

Byte STM 32上的CRC32 CRC外围设备:相同数据的字节流和字流给出不同的结果

Byte STM 32上的CRC32 CRC外围设备:相同数据的字节流和字流给出不同的结果,byte,stm32,word,crc32,Byte,Stm32,Word,Crc32,我使用的是STM32 ARM CRC外围设备,当作为字节输入时,与作为字输入时相比,相同数据的CRC代码不同 使用字节字长和小字对齐的数据字符串: const char *ts4 = "The quick brown fox jumped over the lazy brown dog."; // 52 CHARS divisible by 4; 当缓冲区大小为strlen(ts4)时,CRC32的值为~0x01fba559 0xfe045aa6 然后为字大小配置CRC(将缓冲区大小设置为

我使用的是STM32 ARM CRC外围设备,当作为字节输入时,与作为字输入时相比,相同数据的CRC代码不同

使用字节字长和小字对齐的数据字符串:

 const char *ts4 = "The quick brown fox jumped over the lazy brown dog."; // 52 CHARS divisible by 4; 
当缓冲区大小为strlen(ts4)时,CRC32的值为~0x01fba559 0xfe045aa6

然后为字大小配置CRC(将缓冲区大小设置为strlen(ts4)/4),DMA引擎指向CRC数据寄存器。它给出了一个不同的CRC结果,~0xf2bd1910 0x0d42e6ef,所以我使用HAL_计算方法再次调用它来计算字大小(以确保DMA按预期工作)。这再次给出了~0xf2bd1910 0x0d42e6ef


CRC32算法是否针对不同的字长输入给出不同的结果?我真的不想把DMA引擎绑在传输字节上。是否有一个等效的“C”函数,用32位字输入计算CRC32?我曾尝试颠倒单词中字节的顺序,但这并不能解决问题(我认为这可能是一个大/小的尾端问题)。

这是51个字符,而不是52个字符。长度超过4等于12,而不是13。前48个字符的CRC预计与51个字符的CRC不同


另外,我认为您需要确保字符串从单词边界开始。

是的!现在一切都好了!在末尾添加了一个“.”,它们匹配。谢谢你。我现在有全速32位DMA的CRC。。。。。(这里有点新…我应该删除此线程吗)。。。它确实证明了ARM中的字节和字CRC32外设应该给出相同的结果。亲爱的用户50619,我有你的问题,得到了你的结果(0xf2bd1910)。请你解释清楚你是怎么解决的?在HAL_累积之前,我必须使用HAL_计算吗?我想我什么都试过了,我肯定有些东西我不明白。@Superfra@MarkAdler:):)非常好!无论如何谢谢你!