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