linux串口通信

#include<stdio.h>

#include<string.h>

#include<sys/types.h>

#include<errno.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<termios.h>

#include<stdlib.h>

 

int set_opt(int fd,int nSpeed,intnBits,char nEvent,int nStop)

{

 struct termios newtio,oldtio;

 if(tcgetattr(fd,&oldtio) != 0)

  {

   perror("SetupSerial 1");

   return -1;

  }

 bzero(&newtio,sizeof(newtio));//全部设为0

 newtio.c_cflag |= CLOCAL | CREAD;

 newtio.c_cflag &= ~CSIZE;

 

 switch(nBits)

 {

 case 7:

      newtio.c_cflag |= CS7;

      break;

 case 8:

      newtio.c_cflag |= CS8;

      break;

 }

 switch(nEvent)

  {

   case 'O':

            newtio.c_cflag |= PARENB;

            newtio.c_cflag |= PARODD;

            newtio.c_iflag |=(INPCK |ISTRIP);//偶校验

            break;

  case 'E':

           newtio.c_iflag |= (INPCK | ISTRIP);

           newtio.c_cflag |= PARENB;

           newtio.c_cflag |= ~PARODD;//奇校验

 case 'N':

           newtio.c_cflag &= ~PARENB;

           break;//不校验

  }

 switch(nSpeed)

  {

   case 2400:

           cfsetispeed(&newtio,B2400);

           cfsetospeed(&newtio,B2400);

           break;

   case 4800:

           cfsetispeed(&newtio,B4800);

           cfsetospeed(&newtio,B4800);

           break;

   case 9600:

           cfsetispeed(&newtio,B9600);

           cfsetospeed(&newtio,B9600);

           break;

   case 115200:

           cfsetispeed(&newtio,B115200);

           cfsetospeed(&newtio,B115200);

           break;

 

   default:

           cfsetispeed(&newtio,B9600);

           cfsetospeed(&newtio,B9600);

           break;

   }

 if(nStop ==1)

   newtio.c_cflag &= ~CSTOPB;

 else if(nStop ==2)

   newtio.c_cflag |= CSTOPB;

 newtio.c_cc[VTIME] = 0;

 newtio.c_cc[VMIN] = 0;

 tcflush(fd,TCIFLUSH);

 if((tcsetattr(fd,TCSANOW,&newtio))!=0)

   {

    perror("com set error");

    return (-1);

   }

 printf("set done!\n");

 return 0;

}

int Open_port(int fd,int comport)

{

 char*dev[]={"/dev/ttyUSB0","/dev/ttySAC1","/dev/ttySAC2","/dev/ttySAC3"};

 long vdisable;

 if(comport==1)

   {

    fd = open("/dev/ttyUSB0",O_RDWR);

    if(-1==fd)

    {

      perror("Can't Open Serial Port");

      return (-1);

    }

    else

      printf("Open ttySAC0 >>>>>..\n");

  }

 else if(comport==2)

  {

   fd = open("/dev/ttySAC1",O_RDWR|O_NOCTTY|O_NDELAY);

 

   if(-1 == fd)

    {

       perror("Can't Open Serial Port");

       return (-1);

    }

  else

   printf("Open ttySAC1klldkkfjkasdjfakl\n");

  }

 elseif(comport==3)

 {

   fd = open("/dev/ttySAC2",O_RDWR|O_NOCTTY|O_NDELAY);

   if(-1 == fd)

    {

      perror("Can't Open Serial Port");

      return (-1);

    }

   else

     printf("Open ttySAC2 ..............\n");

  }

 elseif(comport == 4)

 {

   fd = open("/dev/ttySAC3",O_RDWR | O_NOCTTY|O_NDELAY);

   if(fd == -1)

     {

       perror("Can't Open serial Port");

       return (-1);

     }

   else

       printf("OpenttySAC3.......................\n");

 }

 if(fcntl(fd,F_SETFL,0)<0)

   printf("fcntl falled !\n");

 else

   printf("fcntl =%d\n",fcntl(fd,F_SETFL,0));

 if(isatty(STDIN_FILENO)==0)

 printf("standard input is not a terminal device\n");

 else

  printf("isatty success!\n");

 printf("fd-open=%d\n",fd);

 return fd;

}

int main(void)

{

  intfd;

  inti,nwrite,nread;

 if((fd=Open_port(fd,2))<0)

   {

    perror("open_port error");

    return ;

   }

 if((i=set_opt(fd,9600,8,'N',1))<0)

   {

    perror("set_opt error");

    return ;

   }

 return;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值