STM32 CRC硬件单元
STM32采用的CRC校验模块使用的校验算法与主流CRC32校验算法不同。
下面是一个CRC在线校验网站:
http://www.ip33.com/crc.html
主流32位校验算法包括CRC-32 和 CRC-32/MPEG-2两种,而STM32采用的校验算法与这两种都不同,尽管形式上很像CRC-32/MPEG-2,但STM32是32为逐位计算的,而主流算法都是按字节计算的。
STM32CRC权值为0x4C11DB7,初始值为0xFFFFFFFF,,输入值和输出值不需要反转,输出值不需要异或运算,形式和 CRC-32/MPEG-2相同,但计算结果却不同。
以下为官方文档中给出的CRC计算单元的C语言描述:
DWORD dwPolynomial= 0x04c11db7;
DWORD cal_crc(DWORD *ptr, int len)
{
DWORD xbit;
DWORD data;
DWORD CRC= 0xFFFFFFFF; // init
while (len--)
{
xbit=1 << 31;
data= *ptr++;
for (int bits= 0; bits< 32; bits++)
{
if(CRC & 0x80000000)
{
CRC <<= 1;