免费注册 查看新帖 |

Chinaunix

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

linux串口测试程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 02:29 |只看该作者 |倒序浏览

由于已经完成了第一个HELLO程序,标志着整个编译环境已经没有问题了,下来准备做一下串口测试程序。由于串口驱动开发板已经作好了,所以就作一个Linux串口测试工具简单的数据收发看看。

Linux串口测试工具网上常见的版本都看起来比较烦琐,下面是一个简单一点的,这个程序功能是收到10个字节后会发前7个字节,如果所发的数据的第一个字节是9则退出。
 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <string.h>
  7. #include <termio.h>
  8. #include <time.h>

  9. #define BAUDRATE B9600
  10. #define MODEMDEVICE "/dev/ttyUSB1"



  11. int main()
  12.  {
  13.  int fd,c=0,res;
  14.  struct termios oldtio,newtio;
  15.  //intch;
  16.  static char s1[10],buf[10];
  17.  printf("start ...\n");
  18.  /*打开PC的COM1口*/
  19.  fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);
  20.  if (fd < 0)
  21.  {
  22.  perror(MODEMDEVICE);
  23.  exit(1);
  24.  }
  25.  printf("open...\n");
  26.  /*将旧的通讯参数存入oldtio结构*/
  27.  tcgetattr(fd,&oldtio);
  28.  /*初始化新的newtio */
  29.  bzero(&newtio,sizeof(newtio));
  30.  /*8N1*/
  31.  newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
  32.  newtio.c_iflag = IGNPAR;
  33.  newtio.c_oflag = 0;
  34.  /*正常模式*/
  35.  /*newtio.c_lflag = ICANON;*/

  36.  /*非正常模式*/
  37.  newtio.c_lflag = 0;
  38.  newtio.c_cc[VTIME] = 0;
  39.  newtio.c_cc[VMIN] = 10;

  40.  tcflush(fd,TCIFLUSH);
  41.  /*新的temios作为通讯端口参数*/
  42.  tcsetattr(fd,TCSANOW,&newtio);
  43.  printf("writing...\n");

  44.  while(1)
  45.  {
  46.  //printf("read...\n");
  47. res = read(fd,buf,10);
  48. //res = read(fd,s1,10);
  49. //strcat(buf,s1);
  50. // res = write(fd,buf,7);
  51.  printf("buf = %s\n", buf);
  52.  if(buf[0]==9) break;
  53.  }

  54.  printf("close...\n");
  55.  close(fd);
  56.  /*还原旧参数*/
  57.  tcsetattr(fd,TCSANOW,&oldtio);
  58.  return 0;
  59.  }


还有一点要注意,就是Linux串口测试工具串口有两种工作模式,即正规模式和非正规模式,如果习惯在串口调试器中用16进制发送,此时串口应该为非正规模式才行。

下面是这两种模式的说明
Linux串口测试工具正规模式(CANONICAL或者COOKED)
此模式下,终端设备会处理特殊字符,并且数据传输是一次一行的方式,既按回车后才开始发送和接收数据。例如LINUX的SHELL。
Linux串口测试工具非正规模式(NON-CANONICAL或者RAW)
此模式下,终端设备不会处理特殊字符,并且数据传输是一次一个字符的方式,既不用按回车换行。例如LINUX的VIM。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP