文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于Linux串口测试工具代码实现

关于Linux串口测试工具代码实现

时间:2010-08-19  来源:mydear

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

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

  1. /* rs232_send.c*/
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. #defineBAUDRATEB115200//38400
  12. #defineMODEMDEVICE"/dev/ttyS1"
  13. int main()
  14. {
  15. int fd,c=0,res;
  16. struct termios oldtio,newtio;
  17. intch;
  18. static char s1[20],buf[19];
  19. printf("start ...n");
  20. /*打开PC的COM1口*/
  21. fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);
  22. if (fd
  23. {
  24. perror(MODEMDEVICE);
  25. exit(1);
  26. }
  27. printf("open...n");
  28. /*将旧的通讯参数存入oldtio结构*/
  29. tcgetattr(fd,&oldtio);
  30. /*初始化新的newtio */
  31. bzero(&newtio,sizeof(newtio));
  32. /*8N1*/
  33. newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
  34. newtio.c_iflag = IGNPAR;
  35. newtio.c_oflag = 0;
  36. /*正常模式*/
  37. /*newtio.c_lflag = ICANON;*/
  38. /*非正常模式*/
  39. newtio.c_lflag = 0;
  40. newtio.c_cc[VTIME] = 0;
  41. newtio.c_cc[VMIN] = 10;
  42. tcflush(fd,TCIFLUSH);
  43. /*新的temios作为通讯端口参数*/
  44. tcsetattr(fd,TCSANOW,&newtio);
  45. printf("writing...n");
  46. while(1)
  47. {
  48. res = read(fd,buf,10);
  49. res = write(fd,buf,7);
  50. if(buf[0]==9) break;
  51. }
  52. printf("close...n");
  53. close(fd);
  54. /*还原旧参数*/
  55. tcsetattr(fd,TCSANOW,&oldtio);
  56. return 0;
  57. }


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

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


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载