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

分享一个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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版