1. 程式人生 > >Linux串列埠程式設計

Linux串列埠程式設計

  • 串列埠通訊是指一次只傳送一個數據位。雖然在通訊的時候串列埠有 8 位或者 9 位等,但是在物理層面傳輸的時候,它仍然是以單個 bit 的方式傳輸的
  • 一般特指 RS232 標準的介面
  • 在 linux 下串列埠程式設計流程如下:
    這裡寫圖片描述

開啟串列埠

核心是用open函式開啟串列埠

if((fd = open(uart3,O_RDWR|O_CREAT,0777))<0){
        printf("open %s failed!\n",uart3);
    }
    else{
        printf("open %s is success!\n"
,uart3); }

串列埠初始化

初始化一般無論在哪個平臺都有現成程式碼,直接使用即可。這裡的介面形式為int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

  • fd為串列埠控制代碼
  • nSpeed為設定的波特率
  • nBites為資料位
  • nEvent為校驗位
  • nStop為停止位
  • 例如set_opt(fd, 115200, 8, 'N', 1);

串列埠傳送

核心是通過write函式傳送資料

if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0
){ printf("open %s is failed",uart3); } else{ printf("open %s is success\n",uart3); set_opt(fd, 115200, 8, 'N', 1); while(i--) { wr_static = write(fd,buffer, strlen(buffer)); if(wr_static<0) printf("write failed\n"
); else{ printf("wr_static is %d\n",wr_static); } sleep(1); } } close(fd);

串列埠接收

核心是通過read和write來讀取資料

if((fd = open(uart3, O_RDWR|O_NOCTTY))<0)
        printf("open %s is failed",uart3);
    else{
        set_opt(fd, 115200, 8, 'N', 1);
        write(fd,uart_out, strlen(uart_out));
        while(1){
            while((nByte = read(fd, buffer, 512))>0){
                buffer[nByte+1] = '\0';         
                write(fd,buffer,strlen(buffer));
                memset(buffer, 0, strlen(buffer));
                nByte = 0;
            }
        }
    }