谢谢城主分享,刚好用上这个。修改成了自己的习惯,测试没有问题
#define STM32_CRC_DEF 0x04c11db7 //STM32硬件CRC计数等式
u32 RETURN_CRC_DATA(u32 *DATA_BUF, u16 len)
{
u32 xbit = 0 ; //CRC计算式计算 扫描变量
u32 data = 0 ; //当前用于CRC的数据缓存
u32 CRC_DATA = 0xFFFFFFFF; // CRC数据寄存器 返回值
u8 bits = 0 ; //位计数变量
while (len--)
{
xbit = 0x80000000;
data = *DATA_BUF++;
for(bits = 0; bits < 32; bits++)
{
if(CRC_DATA & 0x80000000) //CRC计算式计算
{
CRC_DATA <<= 1;
CRC_DATA ^= STM32_CRC_DEF;
}
else
{
CRC_DATA <<= 1;
}
if (data & xbit) //CRC计算式计算
{
CRC_DATA ^= STM32_CRC_DEF;
}
xbit >>= 1;
}
}
return CRC_DATA;
}
|