關於嵌入式linux下的串口通信問題---需增長回車/換行才能接收

問題:在Linux應用層,直接從/dev/tty***使用read()函數讀數據,沒法讀到,只有在數據末尾加上0a/0d才能夠讀到數據(這裏是發送十六進制的數據,ASCLL碼同理,增長回車才能夠讀到數據)linux

緣由:在linux內核中增長了行緩存的機制,必須出現一個結束符read函數才能從緩衝區裏讀出數據ios

解決:緩存

       改變termio這個類型定義的結構體變量,改變Linux串口設置參數函數

       termio這個結構體的介紹須要學習的詳細參考:https://blog.csdn.net/querdaizhi/article/details/7436722學習

      最簡單直接的修改方式,代碼以下.net

       #define DEV_NAME  "/dev/ttyPS1"blog

        int *pRS485fdget

       *pRS485fd = open(DEV_NAME, O_RDWR | O_NOCTTY);
       struct termios options;
       tcgetattr(*pRS485fd, &options);                 //得到屬性
       options.c_lflag &= ~(ICANON | ECHO | ECHOE);
       tcsetattr(*pRS485fd, TCSANOW, &options);        //設置屬性io

    

       修改其餘的串口參數能夠詳細參考:https://blog.csdn.net/michaelcao1980/article/details/52383910變量

相關文章
相關標籤/搜索