linux下串列埠通訊引數設定

2021-06-21 11:52:21 字數 3806 閱讀 1970

6.7.2 設定串列埠通訊引數

串列埠通訊引數指的是波特率、資料位、奇偶校驗位和停止位。對串列埠實現控制的時候同樣要用到termio結構體。下面將結合具體的**說明如何設定這些引數。

1.波特率設定

獲得埠波特率資訊是通過cfgetispeed函式和cfgetospeed函式來實現的。cfgetispeed函式用於獲得結構體termios_p中的輸入波特率資訊,而cfgetospeed函式用於獲得結構體termios_p中的輸出波特率資訊。這兩個函式的具體資訊如表6.9所示。

表6.9 cfgetispeed函式和cfgetospeed函式

標頭檔案

函式形式

speed_t cfgetispeed(const struct termios*termios_p);

speed_t cfgetospeed(const struct termios*termios_p);

返回值成功

失敗是否設定

errno

返回termios_p

結構中的輸入

/輸出埠的波特率?1是

cfsetispeed函式和cfsetospeed函式用於設定埠的輸入/輸出波特率。一般情況下,輸入和輸出波特率是相等的。cfsetispeed函式和cfsetospeed函式的函式宣告資訊如表6.10所示。

表6.10 cfsetispeed函式和cfsetospeed函式

標頭檔案

函式形式

int cfsetispeed(struct termios*termios_p, speed_t speed);

int cfsetospeed(struct termios*termios_p, speed_t speed);

返回值成功

失敗是否設定

errno

返回termios_p

結構中的輸入

/輸出埠的波特率?1是

cfsetispeed函式和cfsetospeed函式會修改結構體termios_p中的波特率資訊,其中引數speed可以使用表6.11中所列出的巨集。

表6.11 speed引數常用波特率資訊巨集

定義波特率(單位:

bit/s)巨集

定義波特率(單位:

bit/s)b0

0b1800

1800

b5050

b2400

2400

b7575

b4800

4800

b110

110b9600

9600

b134

134b19200

19200

b150

150b38400

38400

b200

200b57600

57600

b300

300b115200

115200

b600

600b230400

230400

b1200

1200

使用cfsetispeed函式和cfsetospeed函式進行串列埠波特率設定具體**如下所示:

2.資料位

資料位指的是每位元組中實際資料所佔的位元數。要修改資料位可以通過修改termios結構體中c_cflag成員來實

現。cs5、cs6、cs7和cs8分別表示資料位為5、6、7和8。必須要注意的是,在設定資料位時,必須先使用csize做位遮蔽才可以哦。具體設定**如下:

#include //標頭檔案定義

#include

#include < termios.h >

……struct termios opt;

.......

//第一步:獲取。獲得串列埠指向termios結構的指標

tcgetattr(fd, &opt);

//先遮蔽其他標誌

opt.c_cflag&=~csize;

//緊接著將資料位修改為8bit

opt.c_cflag |=cs8;

//最後一步:改完後儲存。將修改後的termios資料設定到串列埠中

tcsetattr(fd,tcanow,&opt);

……3.奇偶校驗位

奇偶校驗可以選擇偶校驗、奇校驗、空格等方式,也可以不使用校驗。如果要設定為偶校驗的話,首先要將termios結構體中c_cflag設定parenb標誌,並清除parodd標誌。如果要設定奇校驗,要同時設定termios結構體中c_cflag設定parenb標誌和parodd標誌。如果不想使用任何校驗的話,清除termios結構體中c_cflag的parenb位。表6.12所示為設定奇偶校驗的具體方法。

表6.12 設定奇偶校驗位

置具體代

碼無校驗

opt.c_cflag&= ~parenb;

奇校驗opt.c_cflag |=(parodd | parenb);

偶校驗opt.c_cflag&= ~ parenb;

opt.c_cflag&= ~parodd; 空格

opt.c_cflag&= ~parenb;

opt.c_cflag&= ~cstopb;

下面給出將串列埠通訊的奇偶校驗設定為偶校驗的例子,具體**如下:

#include //標頭檔案定義

#include

#include < termios.h >

……struct termios opt;

……//獲得串列埠指向termios結構的指標

tcgetattr(fd, &opt);

…opt.c_cflag &= ~ parenb;

opt.c_cflag &= ~parodd;

…//將修改後的termios資料設定到串列埠中

tcsetattr(fd,tcanow,&opt);

……4.資料流控制

資料流控制指是使用何種方法來標誌資料傳輸的開始和結束。可以選擇不使用資料流控制、使用硬體進行流控制和使用軟體進行流控制。資料流控制設定如表6.13所示。

表6.13 資料流控制設定

置具體代

碼不使用資料流控制

opt.c_cflag&= ~crtscts 硬體

opt.c_cflag |=crtscts 軟體

opt.c_cflag | =ixon|ixoff|ixany

由於使用硬體流控制需要相應連線的電纜(就是rts,cts那兩根線要連起來)常用的流控制方法還是使用軟體進行流控制(雖然硬體流ms更牛,但還是軟體流更常用)#include //標頭檔案定義

#include

#include < termios.h >

……struct termios opt;

……//獲得串列埠指向termios結構的指標

tcgetattr(fd, &opt);

…opt.c_cflag &= ~crtscts…

//將修改後的termios資料設定到串列埠中

tcsetattr(fd,

tcanow,&opt);

Linux串列埠引數設定

在linux中man串列埠有關的資訊,在以下鏈結中 termios,tcgetattr,tcsetattr,tcsendbreak,tcdrain,tcflush,tcflow,cfmakeraw,cfgetospeed,cfgetispeed,cfsetispeed,cfsetospeed,cfs...

linux 串列埠阻塞與非阻塞引數設定

在串列埠設定中,有以下兩個引數可以決定是否阻塞。在開啟串列埠時不加o nodelay,可用下面的第二種方法,來進行阻塞 非阻塞的設定 c cc vtime 非規範模式讀取時的超時時間 單位 百毫秒 可以這麼理解,從接收到後乙個位元組開始計時,如果超時,則退出read c cc vmin 非規範模式讀...

引數設定 pandas引數設定小技巧

python大資料分析記錄 分享 成長 在日常使用pandas的過程中,由於我們所分析的資料表規模 格式上的差異,使得同樣的函式或方法作用在不同資料上的效果存在差異。而pandas有著自己的一套 引數設定系統 可以幫助我們在遇到不同的資料時靈活調節從而達到最好的效果,本文就將介紹pandas中常用的...