极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15376|回复: 8

关于SD数据存储再求助,数据只能收到低位

[复制链接]
发表于 2016-8-22 15:51:46 | 显示全部楼层 |阅读模式
接上一篇帖子http://www.geek-workshop.com/thread-27377-1-1.html
收到的数据如下,

可以看到数据几乎收了一半,正常数据是AA 01 01 0D 2D 00 00 03 FB 00 41 14 81 81 B2 2F B5 55 83 ,其中AA、55分别是起始位、停止位,中间部分数据位41、14收到的正确,但有些数据前不知道为什么加上FFFFFF,如下
FFFFFF81
FFFFFF81
FFFFFFB2
不是很理解,还有开始几位只收到每个字节的低位,如下,
1
D
2D
0
0
3
是不是串口把每个字节高位0给过滤掉了,我的程序没有过滤啊

程序还是之前的程序,大家指点一下,
  1. File myFile;
  2. char inByte;         // incoming serial byte

  3. void setup()
  4. {
  5.     Serial.begin(1200,SERIAL_8E2);
  6.   while (!Serial) {
  7.     ;
  8. }
  9.   pinMode(10, OUTPUT);

  10.   if (!SD.begin(4)) {
  11.         return;
  12.   }
  13. }

  14. void loop()
  15. {
  16.    myFile = SD.open("test01.txt", FILE_WRITE);
  17.    if (myFile)
  18.    {
  19.      
  20.    if (Serial.available() > 0)
  21.      {
  22.        inByte = Serial.read();
  23.        Serial.println(inByte,HEX);
  24.        myFile.println(inByte,HEX);
  25.         }
  26.    
  27.    delay(500) ;   
  28.   }
  29. }
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2016-8-22 18:44:53 | 显示全部楼层
程序中加了字符数组,结果收到的数据加转换的结果如下,一串比一串少一字节,会的朋友指点一下
  1. AA 01 01 0D 2D 14 82 81 B2 2F B5 55 7F
  2. AA 01 01 0D 2D 82 81 B2 2F B5 55 7F
  3. AA 01 01 0D 2D 81 B2 2F B5 55 80
  4. AA 01 01 0D 2D B2 2F B5 55 7F
  5. AA 01 01 0D 2D 2F B5 55 7F
  6. AA 01 01 0D 2D B5 55 7F
  7. AA 01 01 0D 2D 55 7F
  8. AA 01 01 0D 2D 7F
  9. AA 01 01 0D 2D
复制代码
附程序
  1. char inByte[20]="";      
  2. void setup()
  3. {
  4.     Serial.begin(1200,SERIAL_8E1);
  5.   while (!Serial) {
  6.     ; // wait for serial port to connect. Needed for Leonardo only
  7. }
  8.   pinMode(10, OUTPUT);
  9.    
  10.   if (!SD.begin(4)) {
  11.     //Serial.println("initialization failed!");
  12.     return;
  13.   }
  14.   }

  15. void loop()
  16. {
  17.   if (Serial.available() > 0) {
  18.     Serial.readBytes(inByte,20);
  19.    myFile = SD.open("test04.txt", FILE_WRITE);
  20.    if (myFile)

  21.     {
  22.    Serial.print(inByte);
  23.    myFile.print(inByte);
  24.    myFile.close();
  25.       
  26.        }
  27.    delay(100) ;   
  28.   }
  29. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2016-8-23 08:18:01 | 显示全部楼层
本帖最后由 275891381 于 2016-8-23 13:24 编辑
suoma 发表于 2016-8-22 18:44
程序中加了字符数组,结果收到的数据加转换的结果如下,一串比一串少一字节,会的朋友指点一下附程序


      if (mySerial.available()){
          Serial.println(Serial.readStringUntil('自己定义的结束码 或者\n'));
      }
用这句试试,还有你的波特率太低,速度太慢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-23 11:26:56 | 显示全部楼层
275891381 发表于 2016-8-23 08:18
if (mySerial.available()){
          Serial.println(mySerial.readStringUntil('自己定义的结束 ...

我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-23 11:28:45 | 显示全部楼层
275891381 发表于 2016-8-23 08:18
if (mySerial.available()){
          Serial.println(mySerial.readStringUntil('自己定义的结束 ...

波特率低的话,按理说抗干扰越强,数据丢失和波特率低没有关系吧
回复 支持 反对

使用道具 举报

发表于 2016-8-23 13:26:12 | 显示全部楼层
suoma 发表于 2016-8-23 11:26
我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了

要是高位丢零,你可以看看是不是发送方,发零有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-23 13:26:24 | 显示全部楼层
收到的数据没有了开始遇到的FFFFFF,比起之前好多了,但是一些数据还是只收到低位,没有收到高位0,不知道什么原因

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2016-8-23 13:26:35 | 显示全部楼层
suoma 发表于 2016-8-23 11:26
我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了

要是高位丢零,你可以看看是不是发送方,发零有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-23 13:29:59 | 显示全部楼层
275891381 发表于 2016-8-23 13:26
要是高位丢零,你可以看看是不是发送方,发零有问题

但是我单独通过串口软件接收的数据都正常,用上SD模块后,收到的数据有些就没高位0,同时从串口观察,也是这样。开始数据长度符合要求,19位。后面数据长度不对了,出现了漏码问题,不明白原因
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 17:09 , Processed in 0.044797 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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