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


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

原因:在linux內核中增加了行緩存的機制,必須出現一個結束符read函數才能從緩沖區里讀出數據

解決:

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

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

      最簡單直接的修改方式,代碼如下

       #define DEV_NAME  "/dev/ttyPS1"

        int *pRS485fd

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

    

       修改其他的串口參數可以詳細參考:https://blog.csdn.net/michaelcao1980/article/details/52383910


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM