涂鸦arduino中文社区活动
查看: 459|回复: 7

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

[复制链接]

该用户从未签到

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

这个串口缓冲区满了造成的,引起数据丢失,发送速度太快,读取太慢,可以增加缓存区大小试试。

该用户从未签到

 楼主| 发表于 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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

字符串是否对比该使用哪个函数?
字符串是否对比该使用哪个
现有问题是, 串口接收到的数据是正常的,(通过print函数打印串口收
VSCode+PIO开发环境中添加Blinker.h的问题
VSCode+PIO开发环境中添加
我在main.c中添加就没问题,但是添加在.h文件中就会出现编译错误,在其他.c文件添加此
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
这样写不对吗,为啥老是报错
这样写不对吗,为啥老是报
Python上位机控制WS2812B
Python上位机控制WS2812B
说在前面: 设计师对颜色有着天生的敏锐性,而工程师眼中这些都会幻化成数值。。
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表