問題:在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變量