<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    嵌入式linux串口設置(一)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    在linux中,所有的設備文件一般都位于“/dev”下,串口1和串口2對應的設備名依次為“/dev/ttyS0”, “/dev/ttyS1”,而且USB轉串口的設備名通常為“/dev/ttyUSB0”,在linux下對設備的操作方法與對文件的操作方法一樣。

    串口開發步驟:

    串口的設置主要是設置struct termios結構體的各成員值

    #include<termios>

    struct termios

    {

           Unsigned short c_iflag;            /*輸入模式標志*/

           Unsigned short c_oflag;           /*輸出模式標志*/

           Unsigned short c_cflag;           /*控制模式標志*/

           Unsigned short c_lflag;            /*本地模式標志*/

           Unsigned char c_line ;             /*線路規則*/

           Unsigned char c_cc[NCC];              /*控制特性*/

          Speed_t        c_ispeed;             /*輸入速度*/

         Speed_t        c_ospeed;            /*輸出速度*/

    };

    串口設置包括波特率設置,檢驗位和停止位設置,主要設置的是c_cflag結構體成員,注意,不能直接對c_cflag成員初始化,而要將其通過與或操作。

     

     

    int set_com_config(int fd,int baud_rate, int data_bits,char parity,int stop_bits)

    {

           struct termios new_cfg,old_cfg;

           int speed;

          

           /*保存并測試現有串口參數設置,在這里如果串口號等出錯,會有相關出錯信息*/

           if(tcgetattr(fd,&old_cfg) != 0)        /*該函數得到fd指向的終端配置參數,并將它們保存到old_cfg變量中,成功返回0,否則-1*/

           {

                  perror("tcgetttr");

                  return -1;

           }

          

           /*設置字符大小*/

           new_cfg=old_cfg;

           cfmakeraw(&new_cfg);    /*配置為原始模式*/

           new_cfg.c_cflag &= ~CSIZE;/*用位掩碼清空數據位的設置*/

          

           /*設置波特率*/

           switch(baud_rate)

           {

                  case 2400:

                                speed=B2400;

                                break;

               case 4800:

                                speed=B4800;

                                break;

                  case 9600:

                                speed=B9600;

                                break;   

                  case 19200:

                                speed=B19200;

                                break;                        

                  case 38400:

                                speed=B38400;

                                break;

                  default:

                  case 115200:

                                speed=B115200;

                                break;

           }

           cfsetispeed(&new_cfg,speed);

           cfsetospeed(&new_cfg,speed);

          

           /*設置停止位*/

           switch(data_bits)

           {

                  case 7:

                                new_cfg.c_cflag |= CS7;

                                break;

                  default:

                  case 8:

                                new_cfg.c_cflag |= CS8;

                                break;

           }

          

           /*設置奇偶校驗位*/

           switch(parity)

           {

                  default:

                  case 'n':

                  case 'N':

                  {

                         new_cfg.c_cflag &= ~PARENB;

                         new_cfg.c_iflag &= ~INPCK;

                  }

                  break;

                  case 'o':

                  case 'O':

                  {

                         new_cfg.c_cflag |= (PARODD | PARENB);

                         new_cfg.c_iflag |= INPCK;

                  }

                  break;

                  case 'e':

                  case 'E':

                  {

                         new_cfg.c_cflag |=  PARENB;

                         new_cfg.c_cflag &= ~PARODD;

                         new_cfg.c_iflag |= INPCK;

                  }

                  break;

                 

           }

          

           /*設置停止位*/

           switch(stopbits)

           {

                  default:

                  case 1:

                                new_cfg.c_cflag &= ~CSTOPB;

                                break;

                  case 2:

                                new_cfg.c_cflag |= CSTOPB;

                                break;

           }

          

           /*設置等待時間和最小接收字符*/

           new_cfg.c_cc[VTIME]=0;

           new_cfg.c_cc[VMIN]=1;

          

           /*處理未接收字符*/

           tcflush(fd,TCIFLUSH);

          

           /*激活新配置*/

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

           {

                  perror("tcsetattr");

                  return -1;

           }

           return 0;

    }

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全