在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > linux基礎復習(7)串口應用開發(fā)

      linux基礎復習(7)串口應用開發(fā)

      作者: 時間:2016-10-08 來源:網絡 收藏

      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);

      return 0;

      }

      [b]串口使用詳解[/b]

      在配置完串口的相關屬性后,就可對串口進行打開,讀寫操作了。其使用方式與文件操作一樣,區(qū)別在于串口是一個終端設備。

      [b]打開串口[/b]

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

      Open函數(shù)中除普通參數(shù)外,另有兩個參數(shù)O_NOCTTY和O_NDELAY。

      O_NOCTTY: 通知linix系統(tǒng),這個程序不會成為這個端口的控制終端。

      O_NDELAY: 通知linux系統(tǒng)不關心DCD信號線所處的狀態(tài)(端口的另一端是否激活或者停止)。

      然后,恢復串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入。用fcntl函數(shù):

      fcntl(fd, F_SETFL, 0);

      接著,測試打開的文件描述府是否引用一個終端設備,以進一步確認串口是否正確打開。

      isatty(STDIN_FILENO);

      串口的讀寫與普通文件一樣,使用read,write函數(shù)。

      read(fd,buff,8);

      write(fd,buff,8);

      實例

      #i nclude stdio.h>

      #i nclude string.h>

      #i nclude sys/types.h>

      #i nclude errno.h>

      #i nclude sys/stat.h>

      #i nclude fcntl.h>

      #i nclude unistd.h>

      #i nclude termios.h>

      #i nclude stdlib.h>

      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;

      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/ttyS0,/dev/ttyS1,/dev/ttyS2};

      long vdisable;

      if (comport==1)

      { fd = open( /dev/ttyS0, O_RDWR|O_NOCTTY|O_NDELAY);

      if (-1 == fd){

      perror(Can't Open Serial Port);

      return(-1);

      }

      else

      printf(open ttyS0 .....n);

      }

      else if(comport==2)

      { fd = open( /dev/ttyS1, O_RDWR|O_NOCTTY|O_NDELAY);

      if (-1 == fd){

      perror(Can't Open Serial Port);

      return(-1);

      }

      else

      printf(open ttyS1 .....n);

      }

      else if (comport==3)

      {

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

      if (-1 == fd){

      perror(Can't Open Serial Port);

      return(-1);

      }

      else

      printf(open ttyS2 .....n);

      }

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

      printf(fcntl failed!n);

      else



      關鍵詞:

      評論


      相關推薦

      技術專區(qū)

      關閉