[原创]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条回答
__STM32__
1楼-- · 2019-12-23 23:48
呵呵,去看看我的论证吧,所谓常见的CRC32计算方法,其实是个非典应用,因为以讹传讹变成了'常见'。

STM32内置CRC模块的使用
lxyppc
2楼-- · 2019-12-24 05:46
看了一下那边的讨论
个人觉得抛开硬件实现来谈CRC没有什么意义
只要用标准的多项式,至于移位顺序和初始值怎么方便怎么用
非要争个对错有点像在讨论茴香豆的茴有几种写法
__STM32__
3楼-- · 2019-12-24 07:58
是啊,对于明白人,那确实有点像在讨论茴香豆的茴有几种写法;但对于很多不明就里的人,就会把它当做ST芯片的Bug做文章了。
lxyppc
4楼-- · 2019-12-24 12:40
呵呵,和楼上深有同感:)
abc0010
5楼-- · 2019-12-24 13:26
 精彩回答 2  元偷偷看……
szddg
6楼-- · 2019-12-24 15:48
                 

一周热门 更多>