Linux下串列埠入門

2021-09-02 23:12:00 字數 2648 閱讀 2737

簡介:

linux作業系統從一開始就對序列口提供了很好的支援,本文就linux下的序列口通訊程式設計進行簡單的介紹。

串列埠簡介

序列口是計算機一種常用的介面,具有連線線少,通訊簡單,得到廣泛的使用。常用的串列埠是rs-232-c介面(又稱eia rs-232-c)它是在2023年由美國電子工業協會(eia)聯合貝爾系統、數據機廠家及計算機終端生產廠家共同制定的用於序列通訊的標準。它的全名是"資料終端裝置(dte)和資料通訊裝置(dce)之間序列二進位制資料交換接**術標準"該標準規定採用乙個25個腳的db25聯結器,對聯結器的每個引腳的訊號內容加以規定,還對各種訊號的電平加以規定。傳輸距離在碼元畸變小於4%的情況下,傳輸電纜長度應為50英呎。

linux作業系統從一開始就對序列口提供了很好的支援,本文就linux下的序列口通訊程式設計進行簡單的介紹,如果要非常深入了解,建議看看本文所參考的《serial programming guide for posix operating systems》

串列埠操作

串列埠操作需要的標頭檔案

#include /標準輸入輸出定義/

#include /標準函式庫定義/

#include /unix 標準函式定義/

#include

#include

#include /檔案控制定義/

#include /ppsix 終端控制定義/

#include /錯誤號定義/

開啟串列埠

在 linux 下串列埠檔案是位於 /dev 下的。串列埠一 為 /dev/ttys0,串列埠二 為 /dev/ttys1。開啟串列埠是通過使用標準的檔案開啟函式操作:

int fd; /以讀寫方式開啟串列埠/

fd = open( 「/dev/ttys0」, o_rdwr);

if (-1 == fd)

;int name_arr = ;

void set_speed(int fd, int speed)

int i;

int status;

struct termios opt;

tcgetattr(fd, &opt);

for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)

tcflush(fd,tcioflush);

}}

設定效驗的函式:

int set_parity(int fd,int databits,int stopbits,int parity)

struct termios options;

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

options.c_cflag &= ~csize;

switch (databits) /*設定資料位數*/

switch (parity)

/* 設定停止位*/

switch (stopbits)

/* set input parity option */

if (parity != 'n')

options.c_iflag |= inpck;

tcflush(fd,tciflush);

options.c_cc[vtime] = 150; /* 設定超時15 seconds*/

options.c_cc[vmin] = 0; /* update the options and do it now */

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

return (true);

需要注意的是: 如果不是開發終端之類的,只是串列埠傳輸資料,而不需要串列埠來處理,那麼使用原始模式(raw mode)方式來通訊,設定方式如下:

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

options.c_oflag &= ~opost; /output/

讀寫串列埠

設定好串列埠之後,讀寫串列埠就很容易了,把串列埠當作檔案讀寫就是。

char buffer[1024];

int length;

int nbyte;

nbyte = write(fd, buffer ,length)

·讀取串列埠資料

使用檔案操作read函式讀取,如果設定為原始模式(raw mode)傳輸資料,那麼read函式返回的字元數是實際串列埠收到的字元數。可以使用操作檔案的函式來實現非同步讀取,如fcntl,或者select等來操作。

char buff[1024];

int len;

int readbyte = read(fd,buff,len);

關閉串列埠

關閉串列埠就是關閉檔案。

close(fd);

例子下面是乙個簡單的讀取串列埠資料的例子,使用了上面定義的一些函式和標頭檔案

#define false -1

#define true 0

int opendev(char *dev)

else

return fd;

}int main(int argc, char **argv)

while (1)

}close(fd);

Linux下串列埠程式設計入門

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

Linux串列埠程式設計入門

fedora12 gcc 4.4.4 linux的串列埠程式設計使用posix終端控制函式,關於posix終端控制函式的詳細情況可以檢視 serial programming guide for posix operating systems 我的翻譯 posix作業系統的串列埠程式設計指南 ter...

Linux下串列埠通訊

1.開啟串列埠 與其他的關於裝置程式設計的方法一樣,在linux下,操作 控制串列埠也是通過操作起裝置檔案進行的。在linux下,串列埠的裝置檔案是 dev ttys0或 dev ttys1等。因此要讀寫串列埠,我們首先要開啟串列埠 char dev dev ttys0 串列埠1 int fd op...