Linux串列埠程式設計入門

2021-05-25 15:43:57 字數 2262 閱讀 1770

fedora12

gcc 4.4.4

linux的串列埠程式設計使用posix終端控制函式,關於posix終端控制函式的詳細情況可以檢視:

serial programming guide for posix operating systems

我的翻譯:

posix作業系統的串列埠程式設計指南

termios.h

在/usr/include目錄下,包含了posix終端控制函式的宣告,**中只包含這個標頭檔案即可。

bit/termios.h

在/usr/include/bit目錄下,定義了posix終端控制函式所需的資料結構和所有選項的巨集定義。

o_noctty:如果開啟的是終端裝置,不會成為程序的控制終端。

o_ndelay:該程式不關心dcd訊號的狀態,即另一端的串列埠是否開啟。

配置串列埠需要使用termios結構,它包含了串列埠的所有引數選項,它的定義在bits/termios.h檔案中:

posix標準提供了如下兩個函式用於獲得和設定串列埠的屬性:

int tcgetattr(int fd,struct termios *);

int tcsetattr(int fd,int actions,const struct termios *);

fd為檔案描述符;

tcgetattr將當前串列埠的引數放在乙個termios結構中;

tcsetattr根據termios指標指向的結構設定當前的串列埠,optional_action有三個可選引數:

tcsanow:立即進行修改;

tcsadraiin:等待當前輸出完成後再修改;

tcsaflush:等待當前輸出完成後再修改,但丟棄還未從read呼叫返回的當前可以的任何輸入。

1)設定波特率

設定波特率不可用直接操作termios結構的c_ispeed和c_ospeed成員,需要用函式cfsetispeed和cfsetospeed分別設定輸入和輸出的波特率,最好設定為相同:

函式引數baudrate是波特率,它的值可以使用bits/termios.h中的巨集定義,常用的有:

#define  b0

0000000

/* hang up */

#define  b4800

0000014

#define  b9600

0000015

#define  b19200

0000016

#define  b38400

0000017

#define  b57600   0010001

#define  b115200  0010002

tcflush函式用於清空輸入、輸出緩衝區,有三個選項:

tciflush:清空輸入

tcoflush:清空輸出

tcioflush:清空輸入和輸入

2)設定資料位、校驗位、停止位

這些屬性的設定都要修改termios結構中的c_cflag成員變數。

設定資料位:

設定奇偶校驗位:

如果使能了奇 偶校驗,最好用options.c_iflag |= inpck使能輸入奇偶校驗。

設定停止位: 3)

設定流控制 4)

本地模式

選擇canonical input:

canonical input是以行進行操作的。輸入的字元被放在乙個可以由使用者進行互動編輯的緩衝區,直到收到回車(cr)或換行(lf)字元。選擇這個模式的話,你需要選擇icanon,echo和echoe選項:

options.c_lflag |= (icanon | echo | echoe);

選擇raw input:

raw input 是不做任何處理的。輸入字元被收到後就直接傳送。你需要取消icanon、echo、echoe和isig選項來選擇raw input模式:

options.c_lflag &= ~(icanon | echo | echoe | isig);

如果只是做串列埠除錯,只需接受原始資料,選擇raw input即可。

5)輸出模式

輸出模式

在c_oflag

中設定,

主要用於對串列埠在

canonical input

模式時輸出的特殊字元處理,而對

raw input

模式無效

。如果設定了raw input,需要取消c_oflag中的opost:o

ptions.c_oflag &= ~opost;

取消opost選項時,c_oflag中的其他選項都將被忽略。

Linux下串列埠程式設計入門

簡介 linux作業系統從一開始就對序列口提供了很好的支援,本文就linux下的序列口通訊程式設計進行簡單的介紹。串列埠簡介 序列口是計算機一種常用的介面,具有連線線少,通訊簡單,得到廣泛的使用。常用的串列埠是rs 232 c介面 又稱eia rs 232 c 它是在1970年由美國電子工業協會 e...

入門 串列埠程式設計

目錄 一 硬體要求 硬線連線 虛擬串列埠軟體 二 軟體程式設計 如何獲得本機可用的串列埠列表 串列埠的常用操作 如何避免死鎖 指導手冊 serialport msdn microsoft.visualbasic.devices.computer pc pc newmicrosoft.visualba...

linux串列埠程式設計

include 標準輸入輸出定義 include 標準函式庫定義 include unix標準函式定義 include include include 檔案控制定義 include ppsix終端控制定義 include 錯誤號定義 brief 設定串列埠通訊速率 param fd 型別 int 開...