免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1336 | 回复: 0
打印 上一主题 下一主题

串口达人请入帮忙,谢谢:-) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-09 18:27 |只看该作者 |倒序浏览
两台linux机器通过串口相连,send端只负责发,recv端只负责收,(每隔两秒传输7个字节),传输过程中偶尔会出现传输的数据不对的情况。

example:

send buf
p[0] = 1
p[1] = 17
p[2] = 88
p[3] = 4
p[4] = 42 //注意这里
p[5] = 5
p[6] = -85

recv buf
p[0] = 1
p[1] = 17
p[2] = 88
p[3] = 4
p[4] = 45 //注意这里
p[5] = 5
p[6] = -85

很是头疼啊,不知道为什么会出现这种现象。
出错的几率随机,有时候传输20-30次才出错一次,有时候传输几次就出错一次。
出错的位置随机,有时候是第4个字节位置错误,有时候是第5个字节位置出错。
但是出错的时候有个共同点就是send端发出来的数据和recv端收到的数据相差3,如:send端p[4]=42,recv端p[4]=45。

现在不知道该如何定位,到底是硬件问题还是程序问题?

附:设置串口函数

  1. int open_device(int mode)
  2. {
  3.     int ret;
  4.     int fd = open("/dev/ttyS1", mode | O_NOCTTY | O_NONBLOCK);
  5.     if (-1 == fd)
  6.     {
  7.             perror("open serial port ttyS0 failed");
  8.         return -1;
  9.     }

  10.     struct termios options;
  11.     ret = tcgetattr(fd, &options);
  12.     if (0 != ret)
  13.     {
  14.             perror("tcgetattr failed");
  15.         close(fd);
  16.         return -1;
  17.     }

  18. #if 1
  19.     cfsetispeed(&options, B115200);
  20.     cfsetospeed(&options, B115200);
  21. #else
  22.     //与波特率无关,2400一样出错
  23.     cfsetispeed(&options, B2400);
  24.     cfsetospeed(&options, B2400);
  25. #endif

  26.     options.c_cflag &= ~PARENB;
  27.     options.c_cflag &= ~CSTOPB;
  28.     options.c_cflag &= ~CSIZE;
  29.     options.c_cflag |= CS8;
  30.     options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
  31.     options.c_oflag &= ~OPOST;

  32.     ret = tcsetattr(fd, TCSANOW, &options);
  33.     if (0 != ret)
  34.     {
  35.             perror("tcsetattr failed");
  36.         close(fd);
  37.         return -1;
  38.     }
  39.     tcflush(fd, TCIOFLUSH);
  40.     fcntl(fd, F_SETFL, O_NONBLOCK);

  41.     return fd;
  42. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP