OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3316|回复: 8

CRC校验

[复制链接]

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
发表于 2016-11-9 22:41:09 | 显示全部楼层 |阅读模式
5金钱
//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 ) 来获取高字节;
//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-1 ) && 0X00FF ) 来获取低字节;


//现在遇到的问题是:获取不到正确的CRC值,请各路大神帮忙分析下,是获取方式不对,还是CRC校验程序不对,谢谢!



//CRC查表校验函数
//puchMsgg为待校验数据的首地址?DataLen为待校验数据个数,返回值为校验结果
u16 CRC16( u8 puchMsgg, u8 DataLen )
{        
u8 uchCRCHi=0xFF;  //CRC高字节初始化
u8 uchCRCLo=0xFF;  //CRC低字节初始化
u8 uIndex;  //CRC循环中的索引
crc16_Base_address=0;

while( DataLen-- )  //传输消息缓冲区
{
//  uIndex=uchCRCHi^puchMsgg++;  //计算CRC         
  uIndex=uchCRCHi^puchMsgg;
  crc16_Base_address+=1;         
         
  uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
  uchCRCLo=auchCRCLo[uIndex];         
}
  return( (uchCRCHi<<8) | uchCRCLo );
}        




      //CRC高低字节顺序为,高字节在前,低字节在后;
      //通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 ) 来获取高字节;
      //通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-1 ) && 0X00FF ) 来获取低字节。


      //如果接收到的高字节校验码,与计算出来的高字节校验码一致
      if( rcv_bufferfer_temp[rcv_num_temp-2]== CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 )  
                  {

                    //如果接收到的低字节校验码,与计算出来的低字节校验码一致
                    if( rcv_bufferfer_temp[rcv_num_temp-1]== CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0X00FF )                  
                          {
                            rcv_data_correct= 1;  //接收到了一帧正确的数据
                                       
                          }                        
                 }

最佳答案

查看完整内容[请看2#楼]

两个&&符号是条件真假的与。 单个&是位与。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
731
金钱
731
注册时间
2014-12-2
在线时间
745 小时
发表于 2016-11-9 22:41:10 | 显示全部楼层
两个&&符号是条件真假的与。
单个&是位与。
回复

使用道具 举报

7

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-10-11
在线时间
43 小时
发表于 2016-11-9 22:54:36 | 显示全部楼层
兄弟。。。你直接参考别人的代码。。。这段程序直接copy,,,很成熟,,没啥问题的
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-10 10:33:44 | 显示全部楼层
网上有很多CRC的算法,从16位到32位都有
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-11-10 19:20:42 | 显示全部楼层
dingyu000111 发表于 2016-11-9 22:54
兄弟。。。你直接参考别人的代码。。。这段程序直接copy,,,很成熟,,没啥问题的

这段CRC是从网上复制的,但现在不知道哪里有问题,谢谢
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-11-10 19:21:09 | 显示全部楼层
Ω囿圉Ω 发表于 2016-11-9 23:05
两个&&符号是条件真假的与。
单个&是位与。

谢谢,学习了
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-11-10 19:21:32 | 显示全部楼层
小陀螺爱炒蛋 发表于 2016-11-10 10:33
网上有很多CRC的算法,从16位到32位都有

是从网上复制的,谢谢
回复

使用道具 举报

6

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2016-9-24
在线时间
80 小时
发表于 2016-11-10 20:54:27 | 显示全部楼层
本帖最后由 lygxnb 于 2016-11-10 20:56 编辑

这个是查表的吗,没有看到你的表呢。应该很成熟啊!我都是copy查表的
回复

使用道具 举报

6

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2016-9-24
在线时间
80 小时
发表于 2016-11-10 20:55:07 | 显示全部楼层
楼主做MODBUS吗?我也正在做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 03:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表