OpenEdv-开源电子网

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

有关串口传输数据帧的异或,crc校验问题

[复制链接]

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2019-7-23
在线时间
22 小时
发表于 2020-1-4 23:15:27 | 显示全部楼层 |阅读模式
10金钱
最近在做串口数据帧通过蓝牙透传到移动端,发现课设需要在数据帧末端加一个异或校验,然后又想起常用的CRC校验,所以想知道一下这两个校验方法在STM32下是怎么实现的?
我用C语言做了一个异或校验,但是做不出0xhh这样的效果,源码是这样的:
static unsigned char Fun_Bcc_Create( char* p1, unsigned short int len)
{
    unsigned char bcc = 0;
    for (; len > 0; len--)
    {
        bcc ^= *p1++;
    }
    return bcc;
}

main函数中是这样的:
char str_test[] = "$GPRMC,100010.10,N,678890.7866,E,N*45";
Fun_Bcc_Create(str_test,strlen(str_test));
结果打印出来成了0XF21770,有两个问题
1.怎样才能做出0Xhh这样的异或校验呢?
2.怎样实现CRC校验?
感谢大佬翻牌子!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2019-7-23
在线时间
22 小时
 楼主| 发表于 2020-1-5 10:38:04 | 显示全部楼层
自己回复自己一波,我之前测试用的是visual studio,在Windows平台下的测试结果,在KEIL里面写的话自己来了一遍,程序如下:
u8 chk_xor(const void *data, u16 length)
{
  const u8 *buf = data;
  u8 retval = 0;
  while(length)
  {
    retval ^= *buf++;
    --length;
  }
  return retval;
}
因为这几天在出差,板子还在公司,所以不知道自己写的对不对。。。有大佬帮忙验证一下是最好的额,友情提示,数组也是用u8定义的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 09:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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