野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18139|回复: 1

CRC校验

[复制链接]
发表于 2016-11-9 22:42:50 | 显示全部楼层 |阅读模式
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;  //接收到了一帧正确的数据
                                       
                          }                        
                 }

回复

使用道具 举报

发表于 2016-11-9 23:07:05 | 显示全部楼层
这里也有啊,在正点原子那回复你,参考一下。
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-16 16:13 , Processed in 0.054980 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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