你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

分享一个CRC16、CRC32的计算库(Keil下调用)非源码

[复制链接]
wofei1314 发布时间:2016-11-10 11:42
Crc1632_Lib.rar (7.63 KB, 下载次数: 327)

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 2 评论15 发布时间:2016-11-10 11:42

举报

15个回答
jtc_88 回答时间:2016-11-10 16:54:04
/*modbus CRC16
生成  CRC  的过程为:
1. 将一个  16 位寄存器(称作  CRC 寄存器)初始赋值为十六进制  FFFF (全 1);
2. 将报文的第一个字节( 8位)与 16 位 CRC 寄存器的低字节异或,结果置于 CRC 寄存器;
3. 将  CRC 寄存器右移 1位  (向  LSB 方向), MSB 充零,并检测  LSB:
4. (如果 LSB(移出来的那一位) 为  0): 重复步骤  3 (另一次移位).   (如果 LSB 为 1): 对 CRC 寄存器异或多项式值  0xA001 (1010 0000 0000 0001).
5. 重复步骤  3 和 4,直到完成  8 次移位操作后,一个字节的处理完毕。
6. 对报文中的下一个字节重复步骤 2 到 5继续此操作,直至所有报文被处理完毕。
7. CRC 寄存器中的最终值为 CRC 值. 8. 当放置 CRC 值于报文时,注意高低字节必须交换。
*/
unsigned int CRC16 ( uchar *arr_buff, uchar len)
{

uint crc=0xFFFF;
uchar i, j, Data;
for ( j=0; j < len;j++ )
{

   crc=crc ^*arr_buff++;
   for ( i=0; i<8; i++)
  {

       if( ( crc&0x0001) >0)

       {

           crc=crc>>1;

           crc=crc^ 0xa001;

        }
      else

          crc=crc>>1;
   }
}
return ( crc);

}
stary666 回答时间:2016-11-10 12:46:03
看看,,,,,,
zero99 回答时间:2016-11-10 13:22:28
感谢楼主
天外流星_0 回答时间:2016-11-10 13:41:29
这有个卵用,源码也就那么几行,你还封装成库
asssdz-382474 回答时间:2016-11-10 17:45:05
SquallBest 回答时间:2016-11-11 12:15:06
额。被封装成库。。。
SquallBest 回答时间:2016-11-11 12:16:24
crc校验有两种方式的,一种是计算法,还有一种是恶心的查表法。
wofei1314 回答时间:2016-11-14 09:23:21
SquallBest 发表于 2016-11-11 12:16
crc校验有两种方式的,一种是计算法,还有一种是恶心的查表法。

我用的就是恶心的查表法,

不过,查表比较计算的要快,我倾向于查表

另外,封装起来调用就省事儿一些,感觉CRC8基本不用,所以就把CRC32和CRC16一起封装了
zengyi703-16313 回答时间:2016-11-14 17:21:58
谢谢楼上分享
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版