[原创]STM32 CRC32计算单元的C实现

2019-12-23 18:38发布

不知道为什么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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
卢台长
1楼-- · 2019-12-24 18:04
你这个真的能编译通过、  unsigned long temp = data?我就呵呵。真的是误人子弟。
canspider
2楼-- · 2019-12-24 19:44
楼主这是在挖坑呢
这种代码能编过么
wind2100
3楼-- · 2019-12-24 20:20
顶一下 你这个对了 但是你上面写 漏了几个字符  我来帖上   

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;
}

一周热门 更多>