请选择 进入手机版 | 继续访问电脑版

通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1051|回复: 0

通用CRC32校验程序,可完美匹配STM32硬件CRC算法

[复制链接]
发表于 2019-1-8 09:42:13 | 显示全部楼层 |阅读模式
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。





2. 打开 #define STM32_CRC 宏定义,计算结果和STM32硬件算法一致:0x379e9f06。


STM32的CRC示例程序

3. C程序源代码
源码下载:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TongYe R&D Inc. ( 粤ICP备17061194号-1 )

GMT+8, 2020-8-7 05:12 , Processed in 0.129008 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表