野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12887|回复: 4

串口多机通信,从机接收数据问题,求大神指教

[复制链接]
发表于 2016-8-24 19:41:31 | 显示全部楼层 |阅读模式
        rcv_buf[uart1_rx_count++] = SBUF;           //将接收数据保存 上面是在串口接收中断里的,下面是在主函数里。       

        if((uart1_rx_count>=(Date_length-1)))    //判断接收的数据是否达到长度
                {
                   while(rcv_buf!=addr)                   //寻找地址位
                           {
                                            i++; //send_UART_one(0);
                                         if(i>=(Date_length-1))           //数据超过长度,重新计数
                                         {
                                           i=0;uart1_rx_count=0;         //接收数据从头开始接收
                                         }
                           }                     
                        if((i==0)&&(rcv_buf[4]==1))
                         {                                        send_UART_one(rcv_buf[0]);
                                  for(ck=1;ck<Date_length-2;ck++)                  //校验和计算
                                 {
                                          check_sum = check_sum + rcv_buf[ck];        //将地址位和数据相加,得到第四个数据                                                                   
                                 }
                                 send_UART_one(check_sum);
                                 send_UART_one(rcv_buf[1]);
                                 send_UART_one(rcv_buf[2]);
                                 if((check_sum == rcv_buf[Date_length-2]))                //判断校验和
                                 {       
                                    send_UART_one(rcv_buf[0]);
                                    send_UART_one(rcv_buf[1]);
                               
                                        uart1_rx_count=0;      //为下一次中断做准备
                                    check_sum=0;                            //校验和清零,准备下一次校验

                                if(rcv_buf[1]==0x01)
                                                {       
                                                    PWM_Var = rcv_buf[2];
                                                           send_UART_one(_OK_);          //从机校验成功,反馈给主机0xff命令,回复应答
                                                           CCAP0H = CCAP0L = PWM_Var;
                                                }


                                 }
                                 else
                                 {
                                 uart1_rx_count=0;check_sum=0;      //校验和不正确,可能发生帧错误,重新开始
                                 }
                         }

                   }

回复

使用道具 举报

 楼主| 发表于 2016-8-24 19:44:49 | 显示全部楼层
本帖最后由 栉风沐雨 于 2016-8-24 20:07 编辑

一开始发送本机地址的时候是正常的,换了其他地址,再换回来之后,接收到不正常,少了一个字节,求大神指点
少字节这个,校验和还能判断对,fe是校验和,

第二个图是换了地址之再换回来之后,返回的数据少了一个字节

第二个图是换了地址之再换回来之后,返回的数据少了一个字节

第一个图示本机地址,返回的数据

第一个图示本机地址,返回的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-24 19:48:01 | 显示全部楼层
@fire 火哥,求指教
回复 支持 反对

使用道具 举报

发表于 2016-8-25 09:45:32 | 显示全部楼层
帮顶
回复

使用道具 举报

 楼主| 发表于 2016-8-28 19:16:27 | 显示全部楼层

谢谢,解决了,又出现了新的问题,用485的时候,出现的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 20:30 , Processed in 0.038596 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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