STM32 CRC校验

2019-07-21 07:37发布

STM32  CRC32校验很简单,只要调用库函数就可以
可是我现在有一个u8的数组,也想CRC校验,是不是就得自己写代码了啊!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
叶萌球
1楼-- · 2019-07-23 09:54
CRC校验原理都一样,只是选的多项式不同,因此会有各种不同的多项式算法.选择的时候一定要注意对应的多项式是不是我们的多项式.
此外校验还有方向的区别,从低位到高位和从高位到低位是不同的.(这点不算很清楚)
推荐两个能计算任意CRC的网站,可以来确定程序源码是否有误.
https://ghsi.de/CRC/
http://www.lammertbies.nl/comm/info/crc-calculation.html
电子玩霸
2楼-- · 2019-07-23 10:20
回复【7楼】原味_郭:
---------------------------------
我再STM32F10X的手册CRC一节看到这样一句话  Each write operation into the data register creates a combination of the previous CRC value and the new one,甚是不解,为什么会与之前的值进行结合呢
战舰水手
3楼-- · 2019-07-23 10:33
看看内容来
513393302@qq.co
4楼-- · 2019-07-23 12:47
楼主可以参考下面的代码,测试没有问题,和STM32F1 及F4内部CRC计算结果完全相同
#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;
}

njjh1718
5楼-- · 2019-07-23 13:21
 精彩回答 2  元偷偷看……
钩月黄昏
6楼-- · 2019-07-23 18:51
那如果用STM32自带的CRC校验,但是字节数量不是4的倍数怎么办

一周热门 更多>