不知道为什么STM32的CRC计算单元不是常见的Crc32计算方法,可能是这样做硬件比较容易实现吧
数据传输的时候会用到Crc校验,STM32里面的计算方法又有点不一样
因此写了个用C实现的,可以用在上位机这样的程序里面
考虑到这段代码一般是在PC中运行,就没有写成查Table的方式了
//////////////////////////////////////////////////////////
///
/// CRC32 Calculator for STM32
/// Author: lxyppc
/// E-Mail: lxyppc@163.com
/// Version: 1.0
/// Data: 2009-04-13
///
/// This program is based on STOne-32's
/// http://www.st.com/mcu/forums-cat-7171-23.html
///
//////////////////////////////////////////////////////////
unsigned long CrcGen_STM32(unsigned long data[], unsigned long size)
{
unsigned long crc = 0xFFFFFFFF;
for(unsigned long i=0;i<size;i++){
unsigned long temp = data;
for(unsigned long j=0;j<32;j++){
if( (crc ^ temp) & 0x80000000 ){
crc = 0x04C11DB7 ^ (crc<<1);
}else{
crc <<=1;
}
temp<<=1;
}
}
return crc;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这种代码能编过么
u32 CrcGen_STM32(u32 data[], u32 size)
{
u32 crc = 0xFFFFFFFF;
for(u32 i=0;i<size;i++)
{
u32 temp = data[i];
for(u32 j=0;j<32;j++)
{
if( (crc ^ temp) & 0x80000000 )
{
crc = 0x04C11DB7 ^ (crc<<1);
}else
{
crc <<=1;
}
temp<<=1;
}
}
return crc;
}
一周热门 更多>