linux 串列埠設定流程

2021-06-21 10:49:26 字數 2080 閱讀 6491

串列埠設定主要是設定struct termios結構體成員值:

#include

struct termio ;

通過對c_cflag的賦值,可以設定波特率、字元大小、資料位、停止位、奇偶校驗位和硬體流控等。

1.       儲存原先串列埠配置

為了安全起見和以後除錯程式方便,可先儲存原先串列埠的配置,使用函式tcgetattr(fd,&oldtio)。該函式得到與fd指向物件的相關引數,並將它們儲存於lodtio引用的termios結構中。該函式可以測試配置是否正確、該串列埠是否可用等。除錯成功,函式返回0,失敗,函式返回-1.

if(tcgetattr(fd,&oldtio)!=0)

2.       啟用選項有clocal和cread

clocal和cread分別用於本地連線和接受使能,通過位掩碼的方式啟用這兩個選項。

newtio.c_cflag |= clocal | cread;

3.       設定波特率

設定波特率的函式主要有cfsetispeed和cfsetospeed。

cfsetispeed(&newtio,b115200);

cfsetospeed(&newtio,b115200);

一般地使用者需要將輸入輸出函式的波特率設定成一樣的。這幾個函式在成功時返回0,失敗-1。

4.       設定字元大小

沒有現成可用函式,需要位掩碼。一般先去除資料位中的位掩碼,再重新按要求設定。

options.c_cflag &= ~csize; /*mask the character size bits*/

options.c_cflag |= cs8;

5.       設定奇偶校驗位

先啟用c_cflag中的校驗位使能標誌parenb和是否要進行偶校驗,同時還要啟用c_iflag中的奇偶校驗使能。如使能奇校驗時,**如下:

newtio.c_cflag |= parenb;

newtio.c_cflag |=parodd;

newtio.c_iflag |= (inpck | istrip);

而使能偶校驗**為:

newtio.c_iflag |= (inpck | istrip);

newtio.c_cflag |= parenb;

newtio.c_cflag &= ~parood;

6.       設定停止位

通過啟用c_cflag中的cstopb而實現的。若停止位為1,則清除cstopb,若停止位為0,則啟用cstopb。下面是停止位為1時的**:

newtio.c_cflag &= ~cstopb;

7.       設定最少字元和等待時間

在對接收字元和等待時間沒有特別要求的情況下,可以將其設定為0:

newtio.c_cc[vtime] =0;

newtio.c_cc[vmin]=0;

8.       處理要寫入的引用物件

在串列埠重新設定之後,在之前要寫入的引用物件要重新處理,可呼叫函式tcflush(fd,queue_selector)來處理要寫入引用的物件。對於未傳輸的資料,或收到但未讀取的資料,其處理方法取決於queue_selector的值。

queue_selector可能取值:

tciflush:重新整理收到的資料但不讀

tcoflush:重新整理寫入的資料但不傳送

tciolflush:同時重新整理收到的資料但不讀,並且重新整理寫入的資料但不傳送

本例採用一:

tcflush(fd, tciflush)

9.       啟用配置

用到函式tcsetattr:

函式原型:tcsetattr(fd,option,&newtio);

這裡的newtio就是termios型別的變數,option可能的取值如下:

tcsanow:改變的配置立即生效

tcsadrain:改變的配置在所有寫入fd的輸出都結束後生效

tcsaflush:改變的配置自愛所有寫入fd引用物件的輸出都被結束後生效,所有已接受但為讀入的輸入都在改變發生前丟棄。

該函式呼叫成功返回0,失敗-1.

if((tcsetattr(fd,tcsanow,&newtio))!=0)

Linux系統中設定串列埠屬性的基本流程

使用者常見的資料通訊的基本方式可分為並行通訊和序列通訊。並行通訊是指利用多條資料傳輸線將乙個資料的各位同時傳送。特點是傳輸速度快,適用於短距離通訊,但要求傳輸速度較高的應用場合。序列通訊是指利用一條傳輸線將資料一位位的順序傳送。特點是通訊線路簡單,利用簡單的線纜就可以實現通訊,減低成本,適用於遠距離...

Linux串列埠的設定

設定流控制 termios new.c cflag crtscts 不使用流控制 termios new.c cflag crtscts 使用硬體流控制 termios new.c iflag ixon ixoff ixany 使用軟體流控制 設定資料位大小 termios new.c cflag ...

Linux串列埠ttyUSB設定

4 波特率等引數設定 5 確定有效埠 6 生成固定usb轉串列埠裝置節點 7 通訊 8 linux裝置和驅動載入的先後順序 參考控制板改版,之前電路中直接從工控機主機板引腳中連出com口 ttys 現在在ft4232h 配置ttl 之後又連線了adm3232earuz ttl轉rs232 需要使用u...