九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 5525|回复: 1

贴一个串口测试程序

[复制链接]
发表于 2016-11-4 08:40:50 | 显示全部楼层 |阅读模式
  1. #include <termios.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include <fcntl.h>

  8. struct termios newtio;
  9. struct termios oldtio;

  10. int setUartOpt(int fd, int nSpeed, int nBits, char nEvent, int nStop)
  11. {
  12.         if(tcgetattr(fd,&oldtio) != 0)     
  13.         {     
  14.                 printf("SetupSerial\n");     
  15.                 return -1;     
  16.         }     

  17.         bzero(&newtio,sizeof(newtio));     
  18.         newtio.c_cflag |= CLOCAL |CREAD;     
  19.         newtio.c_cflag &= ~CSIZE;     

  20.         /***********数据位选择****************/      
  21.         switch(nBits)     
  22.         {     
  23.                 case 7:     
  24.                         newtio.c_cflag |= CS7;     
  25.                 break;     
  26.                 case 8:     
  27.                         newtio.c_cflag |= CS8;     
  28.                 break;         
  29.         }

  30.         /***********校验位选择****************/
  31.         switch(nEvent)
  32.         {
  33.                 case 'O':
  34.                         newtio.c_cflag |= PARENB;
  35.                         newtio.c_cflag |= PARODD;
  36.                         newtio.c_iflag |= (INPCK | ISTRIP);
  37.                 break;
  38.                 case 'E':
  39.                         newtio.c_iflag |= (INPCK |ISTRIP);
  40.                         newtio.c_cflag |= PARENB;
  41.                         newtio.c_cflag &= ~PARODD;
  42.                 break;
  43.                 case 'N':
  44.                         newtio.c_cflag &= ~PARENB;
  45.                 break;
  46.         }

  47.         /***********波特率选择****************/
  48.         switch(nSpeed)
  49.         {
  50.                 case 2400:
  51.                         cfsetispeed(&newtio,B2400);
  52.                         cfsetospeed(&newtio,B2400);
  53.                 break;
  54.                 case 4800:
  55.                         cfsetispeed(&newtio,B4800);
  56.                         cfsetospeed(&newtio,B4800);
  57.                 break;
  58.                 case 9600:
  59.                         cfsetispeed(&newtio,B9600);
  60.                         cfsetospeed(&newtio,B9600);
  61.                 break;
  62.                 case 57600:
  63.                         cfsetispeed(&newtio,B57600);
  64.                         cfsetospeed(&newtio,B57600);
  65.                 break;
  66.                 case 115200:
  67.                         cfsetispeed(&newtio,B115200);
  68.                         cfsetospeed(&newtio,B115200);
  69.                 break;
  70.                 case 460800:
  71.                         cfsetispeed(&newtio,B460800);
  72.                         cfsetospeed(&newtio,B460800);
  73.                 break;
  74.                 default:
  75.                         cfsetispeed(&newtio,B9600);
  76.                         cfsetospeed(&newtio,B9600);
  77.                 break;
  78.         }

  79.         /***********停止位选择****************/
  80.         if(nStop == 1) {     
  81.                 newtio.c_cflag &= ~CSTOPB;     
  82.         }     
  83.         else if(nStop ==2) {     
  84.                 newtio.c_cflag |= CSTOPB;     
  85.          }     
  86.         //newtio.c_cc[VTIME] = 1;     
  87.         //newtio.c_cc[VMIN] = FRAME_MAXSIZE;   //阻塞条件下有效  
  88.    
  89.         tcflush(fd,TCIFLUSH);     
  90.         if((tcsetattr(fd,TCSANOW,&newtio)) != 0)     
  91.         {     
  92.                 printf("com set error\n");     
  93.                 return -1;     
  94.         }

  95.         printf("set done!\n");     
  96.         return 0;     
  97. }   

  98. int main(int argc, char* argv[])
  99. {

  100.         if(argc < 2)
  101.         {
  102.                 printf("parameter error\n");
  103.         }
  104.         int m_nDevUart = open(argv[1], O_RDWR | O_NOCTTY);
  105.         if(m_nDevUart < 0)
  106.         {
  107.                 printf("uart initalize fail.\n");
  108.                 return -1;
  109.         }
  110.         printf("m_nDevUart = %d\n", m_nDevUart);

  111.         setUartOpt(m_nDevUart, 115200, 8, 'N', 1);
  112.         fd_set rfds;
  113.         unsigned char buf[256];
  114.         while(1)
  115.         {
  116.                 bzero(buf, 256);
  117.                 int n = read(m_nDevUart, buf, 256);
  118.                 printf("read buf %d data %s\n", n,buf);       
  119.                 write(m_nDevUart, "abcdefgh", 8);
  120.                 sleep(1);
  121.         }

  122. }
复制代码
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-12-14 03:21 , Processed in 0.018047 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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