查看: 774|回复: 1

[原创DIY] 圆点博士小四轴2014版通讯协议之---如何接收上位机数据

[复制链接]

107

主题

11

好友

1583

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    2013-7-4 23:49
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    论坛版主职务勋章

    发表于 2014-4-30 21:42:53 |显示全部楼层
    一:小四轴通讯协议。小四轴和上位机采用下面的协议方式进行通讯:数据头+数据+校验码+数据尾。所有数据采用ASC码的方式进行通信。
    数据头: 0x3A(对应字符:)
    数据区:0x30-0x39,0x41-0x46 (分别对应0-9,A-F的ASC码)
    检验码:采用相加和为00的方式
    数据尾:0x2F (对应字符/)
    二:小四轴接收数据的代码结构。小四轴在串口中断中接收数据,并完成数据的校验。具体实现方法是:
    第1步:串口中断触发,如果是接收中断,则从串口缓冲读取数据。相对应的实现代码是:com_receive_data=USART_ReceiveData(USART1);
    第2步: 检查该数据是不是数据头:0x3A(对应字符:),如果是,则把接收数据的缓冲区指针移到开头。相对应的实现代码是:
    if(com_receive_data==AnBT_Command_Head) com_receive_str_index=0;
    第3步:检查该数据是不是数据尾:0x2F (对应字符/),如果是,则进行数据校验。相对应的实现代码是:
    else if(com_receive_data==AnBT_Command_Tail)  …
    第4步:如果不是数据头,也不是数据尾,则把数据装入缓冲区,并移动数据缓冲区指针到下一个位置。相对应的实现代码是:
    else   {com_receive_str_buf[com_receive_str_index] = com_receive_data;
             com_receive_str_index++;  }
    通过上述步骤,数据缓冲区包含了上述协议中所描述的数据区和校验码,并且通过数据缓冲区指针,我们可以知道数据缓冲区中数据的长度。
    三:小四轴接收数据的校验方法。
    第1步:首先把数据区的数据进行相加。由于数据缓冲区包含了数据区和校验码,所以在数据相加的时候,注意不要包含校验码的相加。相对应的实现代码是:
    for(i=0;i
    com_data_checksum += com_receive_str_buf;
    第2步:把校验码从数据缓冲区取出。由于校验码位于数据缓冲区的最后位置,所以相对应的实现代码是:
    receive_data_checksum_low=com_receive_str_buf[com_receive_str_index-1];
    receive_data_checksum_high=com_receive_str_buf[com_receive_str_index-2];
    第3步:把校验码从ASC码转换成数据。我们知道,数字0到9的ASC码是48-57,字符A-Z的ASC码是65-90,所以对应的转换代码是:
    if(receive_data_checksum_low>58) com_receive_data_checksum_low-=55;
    else receive_data_checksum_low-=48;
    第4步:合并校验码的高位和低位:
    com_receive_data_checksum=
    ((receive_data_checksum_high<<4)&0xf0)|( receive_data_checksum_low&0x0f)
    第5步:把从第1步中计算出来的数据区校验和和第4步中得到的校验码进行相加,并检查结果是否为0,对应的代码是:
    com_data_checksum=com_data_checksum+receive_data_checksum;
    if(com_data_checksum==0) …
    通过上述步骤,我们实现了对数据的校验。

    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-11 16:04 , Processed in 0.205406 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部