2024年11月Linux系统中设置串口属性的基本流程(2)

发布时间:

  ⑴用到函数tcsetattr:

  ⑵函数原型:tcsetattr(fd,OPTION,&newtio;

  ⑶这里的newtio就是termios类型的变量,OPTION可能的取值如下:

  ⑷TCSANOW:改变的配置立即生效

  ⑸TCSADRAIN:改变的配置在所有写入fd的输出都结束后生效

  ⑹TCSAFLUSH:改变的配置自爱所有写入fd引用对象的输出都被结束后生效,所有已接受但为读入的输入都在改变发生前丢弃。

  ⑺该函数调用成功返回,失败-.

  ⑻if((tcsetattr(fd,TCSANOW,&newtio!=

  ⑼perror(“ set error”;

  ⑽return -;

  ⑾/*串口配置的完整函数,为了函数的通用性,通常将常用的选项都在函数中列出,可大大方便以后用户的调试使用

  ⑿*/ int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop { struct termios newtio,oldtio; /*

  ⒀保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息

  ⒁*/ if(tcgetattr(fd,&oldtio!= { perror(“SetupSerial ”;

  ⒂return -; } bzero(&newtio,sizeof(newtio; /*

  ⒃步骤一,设置字符大小

  ⒄*/ newtio.c_cflag |= CLOCAL | CREAD;

  ⒅newtio.c_cflag &= ~CSIZE; /*

  ⒆*/ switch(nBits { case :

  ⒇newtio.c_cflag |=CS;

  ⒈break; case :

  ⒉newtio.c_cflag |=CS;

  ⒊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 :

  ⒑cfsetispeed(&newtio,B;

  ⒒cfsetospeed(&newtio,B;

  ⒓break; case :

  ⒔cfsetispeed(&newtio,B;

  ⒕cfsetospeed(&newtio,B;

  ⒖break; case :

  ⒗cfsetispeed(&newtio,B;

  ⒘cfsetospeed(&newtio,B;

  ⒙break; case :

  ⒚cfsetispeed(&newtio,B;

  ⒛cfsetospeed(&newtio,B;

  ①break; case :

  ②cfsetispeed(&newtio,B;

  ③cfsetospeed(&newtio,B;

  ④break; default:

  ⑤cfsetispeed(&newtio,B;

  ⑥cfsetospeed(&newtio,B;

  ⑦break; } /*

  ⑧设置停止位*/ if(nStop==

  ⑨newtio.c_cflag &= ~CSTOPB; else if(nStop==

  ⑩newtio.c_cflag |= CSTOPB; /*

  Ⅰ设置等待时间和最小接收字符

  Ⅱ*/ newtio.c_[VTIME] =; newtio.c_[VMIN]=; /*

  Ⅲ*/ tcflush(fd, TCIFLUSH; /*

  Ⅳ*/ if((tcsetattr(fd,TCSANOW,&newtio!=

  Ⅴperror(“ set error”;

  Ⅵreturn -;

  Ⅶprintf(“set done!

  Ⅷreturn ;

  Ⅸ上面就是Linux下串口设置的介绍了,需要设置的地方有点多,初学者可能会用到该方面的知识,希望上面介绍的方法能够帮助到你。