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中常用的...