您的位置:首页 > 运维架构 > Linux

linux 串口编程初始化函数

2017-06-07 21:38 323 查看
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

 struct termios newtio,oldtio;

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

  perror("SetupSerial 1");

  return -1;

 }

 bzero( &newtio, sizeof( newtio ) );

 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;

  break;

 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;

 case 460800:

  cfsetispeed(&newtio, B460800);

  cfsetospeed(&newtio, B460800);

  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\r");

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: