串口丢失接收的字符-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4537|回复: 8

[未解决] 串口丢失接收的字符

[复制链接]
发表于 2021-1-18 17:43 | 显示全部楼层 |阅读模式
  1. /**
  2. * 程序是循环发送字符串 abc 给uno板
  3. * 然后测试uno板有没有正确的接收到字符串 abc
  4. * 测试的结果是字符串口接收总是出错
  5. * 总是会丢失字符c
  6. * */
  7. void setup() {
  8.   // put your setup code here, to run once:
  9.   Serial.begin(115200);
  10. }

  11. void loop() {
  12.   
  13.   char i;
  14.   char j[] = {'i','v','a','l','u','e','i','s',':','\n'};
  15.   int k=0;
  16.   char mark = 'a';
  17.   // 等待接收
  18.   // 串口工具这边循环发送字符串 abc
  19.   while(Serial.available()>0)
  20.   {
  21.     i = Serial.read();
  22.     // 打印ivalueis:
  23.     while(j[k] != '\n'){
  24.       Serial.write(j[k]);
  25.       k++;
  26.     }
  27.     // 打印i的值
  28.     Serial.println(i);
  29.     delay(100);
  30.     k=0;
  31.     // 因为一直发送串口命令来测试串口接收数据的正确性
  32.     // 串口面板输出信息较多,使用mark来对比串口接收
  33.     // 到的数据,出错就打印错误信息
  34.     Serial.print("mark is :");
  35.     Serial.println(mark);
  36.     if ( i != mark) {
  37.       Serial.println("recived data error! ");
  38.       Serial.print("mark is :");
  39.       Serial.println(mark);
  40.       mark = i;
  41.     }
  42.     if(mark == 'a'){
  43.       mark = 'b';
  44.     }else if(mark == 'b'){
  45.       mark = 'c';
  46.     }else {
  47.       mark = 'a';
  48.     }
  49.   }
  50. }
复制代码

程序是循环发送字符串 abc 给uno板,然后测试uno板有没有正确的接收到字符串 abc,测试的结果是字符串口接收总是出错,总是会丢失字符c。串口打印的信息如下,总是会出错,有没有谁知道原因?




1610962891(1).jpg
发表于 2021-1-21 23:27 | 显示全部楼层
qq1260746351 发表于 2021-1-21 19:45
不是一开始就会出错,大概要等个十来秒后,数据就开始出错了。你可以再试试 ...

这个串口缓冲区满了造成的,引起数据丢失,发送速度太快,读取太慢,可以增加缓存区大小试试。
发表于 2021-1-18 19:57 | 显示全部楼层

回帖奖励 +10 金币

降低速度试试,或换一片MCU
发表于 2021-1-18 20:37 | 显示全部楼层
没有问题吧,我试了试
 楼主| 发表于 2021-1-21 19:44 | 显示全部楼层
Highnose 发表于 2021-1-18 19:57
降低速度试试,或换一片MCU

我需要在这个波特率下工作,我有尝试降低发送数据的频率,但是还是会出错
 楼主| 发表于 2021-1-21 19:45 | 显示全部楼层
sangshu 发表于 2021-1-18 20:37
没有问题吧,我试了试

不是一开始就会出错,大概要等个十来秒后,数据就开始出错了。你可以再试试
 楼主| 发表于 2021-1-22 09:55 | 显示全部楼层
sangshu 发表于 2021-1-21 23:27
这个串口缓冲区满了造成的,引起数据丢失,发送速度太快,读取太慢,可以增加缓存区大小试试。 ...

这是未修改缓冲区大小,默认是64字节的情况,串口工具连续发送大概300字节左右的时候就一定会出现错误。
1.jpg
2.jpg
 楼主| 发表于 2021-1-22 10:04 | 显示全部楼层
qq1260746351 发表于 2021-1-22 09:55
这是未修改缓冲区大小,默认是64字节的情况,串口工具连续发送大概300字节左右的时候就一定会出现错误。
...

把串口缓冲区修改为128字节后,情况是,在串口工具发送600字节左右的时候,数据接收一定会出错。
感觉还是要接收速度要比发送速度快才行,不然一定会出现错误。感谢 sangshu
4.jpg
3.jpg
 楼主| 发表于 2021-7-14 18:09 | 显示全部楼层
@管理员 改下已解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 03:50 , Processed in 0.084174 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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