串行口是計算機一種常用的接口,具有連接線少,通訊簡單,得到廣泛的使用。常用的串口是RS-232-C接口(又稱EIA RS-232-C)它是在1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機終端生產(chǎn)廠家共同制定的用于串行通訊的標準。串口通訊指的是計算機依次以位(bit)為單位來傳送數(shù)據(jù),串行通訊使用的范圍很廣,在嵌入式系統(tǒng)開發(fā)過程中串口通訊也經(jīng)常用到通訊方式之一。
Linux對所有設備的訪問是通過設備文件來進行的,串口也是這樣,為了訪問串口,只需打開其設備文件即可操作串口設備。在linux系統(tǒng)下面,每一個串口設備都有設備文件與其關(guān)聯(lián),設備文件位于系統(tǒng)的/dev目錄下面。如linux下的/ttyS0,/ttyS1分別表示的是串口1和串口2。下面來詳細介紹linux下是如何使用串口的:
1. 串口操作需要用到的頭文件
#include /*標準輸入輸出定義*/
#include /*標準函數(shù)庫定義*/
#include /*Unix 標準函數(shù)定義*/
#include
#include
#include /*文件控制定義*/
#include /*POSIX 終端控制定義*/
#include /*錯誤號定義*/
#include /*字符串功能函數(shù)*/
2. 串口通訊波特率設置
波特率的設置定義在,其包含在頭文件里。
常用的波特率常數(shù)如下:
B0-------à0 B1800-------à1800
B50-----à50 B2400------à2400
B75-----à75 B4800------à4800
B110----à110 B9600------à9600
B134----à134.5 B19200-----à19200
B200----à200 B38400------à38400
B300----à300 B57600------à57600
B600----à600 B76800------à76800
B1200---à1200 B115200-----à115200
假定程序中想要設置通訊的波特率,使用cfsetispeed( )和cfsetospeed( )函數(shù)來操作,獲取波特率信息是通過cfgetispeed()和cfgetospeed()函數(shù)來完成的。比如可以這樣來指定串口通訊的波特率:
#include //頭文件定義.......................struct termios opt; /*定義指向termios 結(jié)構(gòu)類型的指針opt*//***************以下設置通訊波特率****************/cfsetispeed(&opt,B9600 ); /*指定輸入波特率,9600bps*/cfsetospeed(&opt,B9600);/*指定輸出波特率,9600bps*//************************************************/...................
一般來說,輸入、輸出的波特率應該是一致的。
3. 串口屬性配置
在程序中,很容易配置串口的屬性,這些屬性定義在結(jié)構(gòu)體struct termios中。為在程序中使用該結(jié)構(gòu)體,需要包含文件,該頭文件定義了結(jié)構(gòu)體struct termios。
該結(jié)構(gòu)體定義如下:
#define NCCS 19struct termios {tcflag_t c_iflag; /* 輸入?yún)?shù) */tcflag_t c_oflag; /* 輸出參數(shù) */tcflag_t c_cflag; /* 控制參數(shù)*/tcflag_t c_ispeed; /* 輸入波特率 */tcflag_t c_ospeed; /* 輸出波特率 */cc_t c_line; /* 線控制 */cc_t c_cc[NCCS]; /* 控制字符*/};其中成員c_line在POSIX(Portable Operating System Interface for UNIX)系統(tǒng)中不使用。對于支持POSIX終端接口的系統(tǒng)中,對于端口屬性的設置和獲取要用到兩個重要的函數(shù)是:
(1).int tcsetattr(int fd,int opt_DE,*ptr)
該函數(shù)用來設置終端控制屬性,其參數(shù)說明如下:
l fd:待操作的文件描述符
l opt_DE:選項值,有三個選項以供選擇:
TCSANOW: 不等數(shù)據(jù)傳輸完畢就立即改變屬性
TCSADRAIN:等待所有數(shù)據(jù)傳輸結(jié)束才改變屬性
TCSAFLUSH:清空輸入輸出緩沖區(qū)才改變屬性
l *ptr:指向termios結(jié)構(gòu)的指針
新聞熱點
疑難解答