通用CRC32校验程序,可完美匹配STM32硬件CRC算法
CRC即循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC算法参数模型解释:
NAME:参数模型名称。
WIDTH:宽度,即CRC比特数。
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
REFIN:待测数据的每个字节是否按位反转,True或False。
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。
常见CRC参数模型如下:
CRC算法名称 |
多项式公式 |
宽度 |
多项式 |
初始值 |
结果异或值 |
输入值反转 |
输出值反转 |
CRC-4/ITU |
4+x+1 |
4 |
03 |
00 |
00 |
true |
true |
CRC-5/EPC |
4+x3+1 |
5 |
09 |
09 |
00 |
false |
false |
CRC-5/ITU |
5+x4+x2+1 |
5 |
15 |
00 |
00 |
true |
true |
CRC-5/USB |
5+x2+1 |
5 |
05 |
1F |
1F |
true |
true |
CRC-6/ITU |
6+x+1 |
6 |
03 |
00 |
00 |
true |
true |
CRC-7/MMC |
7+x3+1 |
7 |
09 |
00 |
00 |
false |
false |
CRC-8 |
8+x2+x+1 |
8 |
07 |
00 |
00 |
false |
false |
CRC-8/ITU |
8+x2+x+1 |
8 |
07 |
00 |
55 |
false |
false |
CRC-8/ROHC |
8+x2+x+1 |
8 |
07 |
FF |
00 |
true |
true |
CRC-8/MAXIM |
8+x5+x4+1 |
8 |
31 |
00 |
00 |
true |
true |
CRC-16/IBM |
16+x15+x2+1 |
16 |
8005 |
0000 |
0000 |
true |
true |
CRC-16/MAXIM |
16+x15+x2+1 |
16 |
8005 |
0000 |
FFFF |
true |
true |
CRC-16/USB |
16+x15+x2+1 |
16 |
8005 |
FFFF |
FFFF |
true |
true |
CRC-16/MODBUS |
16+x15+x2+1 |
16 |
8005 |
FFFF |
0000 |
true |
true |
CRC-16/CCITT |
16+x12+x5+1 |
16 |
1021 |
0000 |
0000 |
true |
true |
CRC-16/CCITT-FALSE |
16+x12+x5+1 |
16 |
1021 |
FFFF |
0000 |
false |
false |
CRC-16/X25 |
16+x12+x5+1 |
16 |
1021 |
FFFF |
FFFF |
true |
true |
CRC-16/XMODEM |
16+x12+x5+1 |
16 |
1021 |
0000 |
0000 |
false |
false |
CRC-16/DNP |
16+x13+x12+x11+x10+x8+x6+x5+x2+1 |
16 |
3D65 |
0000 |
FFFF |
true |
true |
CRC-32 |
32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 |
32 |
04C11DB7 |
FFFFFFFF |
FFFFFFFF |
true |
true |
CRC-32/MPEG-2 |
32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 |
32 |
04C11DB7 |
FFFFFFFF |
00000000 |
false |
false |
1. 关闭 #define STM32_CRC 宏定义,计算结果和主流算法一致:0xcbf43926。
在线CRC计算:https://www.lammertbies.nl/comm/info/crc-calculation.html
2. 打开 #define STM32_CRC 宏定义,计算结果和STM32硬件算法一致:0x379e9f06。
STM32的CRC示例程序
3. C程序源代码
源码下载地址:https://download.****.net/download/kezunhb/10670548
免积分下载地址:https://www.etdev.net/thread-20-1-1.html