极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14103|回复: 2

串口接收指定长度数据问题 求助!

[复制链接]
发表于 2015-11-22 19:50:38 | 显示全部楼层 |阅读模式

小弟我最近做串口接收数据的函数,接收数据格式"+PID,5,2:AD"(引号内为传输数据),+PID是抬头,5为标号,2为数据长度,冒号后面为数据,即为数据长度为10时,冒号后面有十个字节的数据,现在是数据长度为50左右时,接受到的数据正常,数据长度上了60后,就接收不完整了!我是机械出身,还请给位大侠不吝赐教!谢谢!

比如发送串口数据:+PID,5,50:##QWERT11111111112222222211111111112221111111111**  arduino接受后串口打印:##QWERT11111111112222222211111111112221111111111**


而发送:+PID,5,60:##QWERT111111111122221111111111222211111111112221111111111**,串口打印的是:##QWERT1111111111222211111111112222111111111122211111                     后面有一截空白

下面是我测试的代码!请指教!
  1. #define SERIAL_TX_BUFFER_SIZE 256
  2. #define SERIAL_RX_BUFFER_SIZE 256
  3. String re="";
  4. void setup()
  5. {
  6.   Serial.begin(250000);
  7. }

  8. int scan_serial(String *s)
  9. {
  10.   int flag=0;
  11.   String temp="";
  12.   String dd="";
  13.   char a;
  14.   while(Serial.available()>0)
  15.   {
  16.     a=Serial.read();
  17.     if(a=='+')
  18.     {
  19.       while(Serial.available()>0)
  20.       {
  21.         temp+=char(Serial.read());
  22.         if(temp[temp.length()-1]==':')
  23.         {
  24.           int i=temp.indexOf(',',0);
  25.           i=temp.indexOf(',',i+1);
  26.           int m=(temp.substring(i+1,temp.length()-1)).toInt();
  27.           Serial.println(m);
  28.           temp="";
  29.           for(int l=0;l<m;)
  30.           {
  31.             dd+=char(Serial.read());
  32.             if(dd.length()>0)
  33.             {
  34.               temp+=dd;
  35.               dd="";
  36.               l++;
  37.             }
  38.             delay(2);
  39.           }
  40.           Serial.println(temp);
  41.           *s=temp;
  42.           Serial.flush();
  43.           return 1;
  44.         }        
  45.       }
  46.     }
  47.   }
  48. }
  49. void loop()
  50. {
  51.   delay(100);
  52.   if(scan_serial(&re)==1)
  53.   {
  54.     Serial.println(re);
  55.     re="";
  56.   }
  57. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-11-22 22:23:01 | 显示全部楼层
不知道是不是和arduino 串口buffer长度有关系,接收buffer只有 64
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 12:28:47 | 显示全部楼层
zoologist 发表于 2015-11-22 22:23
不知道是不是和arduino 串口buffer长度有关系,接收buffer只有 64

确实!我将缓存大小改到512  发送280多个字节的数据能正常接收了!谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 10:29 , Processed in 0.037048 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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