導航:首頁 > 操作系統 > linuxtermios

linuxtermios

發布時間:2022-08-06 13:59:04

1. linux串口編程(termios)相關的使用問題

你好樓主,前一陣正好研究了一下linux串口編程,苦惱了一陣,不過總算弄通了,下面說一下我的思路和理解。
struct termios state; 這是一個設計到串口屬性的結構體,通過給結構體內的屬性賦值來設計串口
的一些屬性。
tcgetattr (STDIN_FILENO, &state); 這是獲取當前的串口的屬性,並賦給STDIN_FILENO這個設
備。計算機中已定義STDIN_FILENO這是一個標准輸入的設
備,通常是寫在屏幕上(就是在屏幕上顯示)。如樓主所說
的A與B相連,可能就是從A寫到B了。
=====下面是重新給串口的結構體的屬性賦值,以達到自己想設計一個什麼功能的串口========
state.c_iflag &= ~(ICRNL | INPCK | ISTRIP | BRKINT); c_iflag是控制輸入屬性的標志位,打個比
方,c_iflag原來是111,ICRNL代表001 ,ICRNL代表010,ISTRIP代表100,這三
個常量按位或ICRNL | INPCK | ISTRIP 得出的結果就是111 然後再取 ~(非)符號
得的結果就是 000。就代表最終c_iflag的值是000。然後計算機就會根據這一竄二
進制的數字來判斷輸入的到底是什麼屬性。向ICRNL 這些常量的值都是在計算機
中已經定義好的了。但是字元串的位數要比我舉例子的要多,我只是說了個大概的
意思。 下面我說一下上面個參數的意思。
ICRNL 代表將輸入中的回車換為新行。
INPCK 代表啟用奇偶校驗。
ISTRIP 代表去掉第八位,(就是傳輸是只傳7位)
BRKINT 代表 如果設置了IGNBRK,將忽略BREAK。如果沒有設置,但是設置了
BRKINT,那麼BREAK將使得輸入和輸出隊列被刷新(影響應該不大)
state.c_iflag |= IXON; IXON 表示可以用ctrl-s暫停輸出 。
state.c_lflag &= ~(ICANON | IEXTEN | ISIG | ECHO);
c_lflag 代表本地屬性(local),原理同上,下面介紹下個參數的用意。
ICANON代表允許一些特殊字元以及按行緩沖。
IEXTEN 當設置 時可被識別,不再作為輸入傳遞。
ISIG 代表當接收到INTR QUIT SUSR 或 DSUSP時產生信號。
ECHO 顯示輸入字元。
state.c_oflag &= ~OPOST; c_oflag 代表輸出控制標志位。
OPOST 代表程序可以選擇加工過的輸入
state.c_cflag |= CS8; c_cflag 代表控制標志位(ctrl)
CS8代表字元長度掩碼是8為,(如會看到串口一些數據
「 9600 -8-n-1」 代表頻率9600,字元長度8位,無奇偶校驗,一
位停止位)。
state.c_cflag |= CREAD; CREAD代表設置接受使能。

state.c_cc[VMIN] = 1; 代表非常規模式下讀的最小的字元數。
state.c_cc[VTIME] = 0; 代表非常規模式下讀的最小延遲。
==========================================================================
tcsetattr (STDIN_FILENO, TCSAFLUSH, &state); 這是把剛才設置好的屬性又賦值給
STDIN_FILENO這個設備。
TCSAFLUSH代表當清空輸入輸出緩沖區時
才改變。
以上是我的看法,希望這些對你有幫助, 歡迎有問題與我交流。

2. 如何查看linux串口cts

在Linux環境下,串口名從ttyS0開始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作為通信串口。在打開ttyS0的時候,選項 O_NOCTTY 表示不能把本串口當成控制終端,否則用戶的鍵盤輸入信息將影響程序的執行; O_NDELAY表示打開串口的時候,程序並不關心另一端 的串口是否在使用中。在Linux中,打開串口設備和打開普通文件一樣,使用的是open()系統調用。比如我么打開串口設備1也就是COM1,只需要: fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY ); 打開的串口設備有很多設置選項。本文中使用int setup_com(int fd)設置。在系統頭文件<termios.h>中 定義了終端控制結構struct termios,tcgetattr()和tcsetattr()兩個系統函數獲得和設置這些屬性。結構 struct termios中的域描述的主要屬性包括: c_cflag : 控制選項 c_lflag : 線選項 c_iflag : 輸入選項 c_oflag :輸出選項 c_cc :控制字元 c_ispeed :輸入數據波特率 c_ospeed :輸出數據波特率 如果要設置某個選項,那麼就使用"|="運算,如果關閉某個選項就使用"&="和"~"運算。本文使用的各個選項的意義定義如下: c_cflag: CLOCAL 本地模式,不改變埠的所有者 CREAD 表示使能數據接收器 PARENB 表示偶校驗 PARODD 表示奇校驗 CSTOPB 使用兩個停止位 CSIZE 對數據的bit使用掩碼 CS8 數據寬度是8bit c_lflag: ICANON 使能規范輸入,否則使用原始數據(本文使用) ECHO 回送(echo)輸入數據 ECHOE 回送擦除字元 ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信號 c_iflag: IXON 使能輸出軟體控制 IXOFF 使能輸入軟體控制 IXANY 允許任何字元再次開啟數據流 INLCR 把字元NL(0A)映射到CR(0D) IGNCR 忽略字元CR(0D) ICRNL 把CR(0D)映射成字元NR(0A) c_oflag: OPOST 輸出後處理,如果不設置表示原始數據(本文使用原始數據) c_cc[VMIN]: 最少可讀數據 c_cc[VTIME]: 等待數據時間(10秒的倍數) 根據以上設置的定義,串口埠設置函數setup_com()定義如下: int setup_com(int fd){ struct termios options; tcgetattr(fd, &options); /* Set the baud rates to 38400...*/ cfsetispeed(&options, B38400); cfsetospeed(&options, B38400); /* Enable the receiver and set local mode...*/ options.c_cflag |= (CLOCAL | CREAD); /* Set c_cflag options.*/ options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Set c_iflag input options */ options.c_iflag &=~(IXON | IXOFF | IXANY); options.c_iflag &=~(INLCR | IGNCR | ICRNL); options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Set c_oflag output options */ options.c_oflag &= ~OPOST; /* Set the timeout options */ options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 10; tcsetattr(fd, TCSANOW, &options); return 1; } 6.7.2 設置串口通信參數 串口通信參數指的是波特率、數據位、奇偶校驗位和停止位。對串口實現控制的時候同樣要用到termio結構體。下面將結合具體的代碼說明如何設置這些參數。 1.波特率設置 獲得埠波特率信息是通過cfgetispeed函數和cfgetospeed函數來實現的。cfgetispeed函數用於獲得結構體 termios_p中的輸入波特率信息,而cfgetospeed函數用於獲得結構體termios_p 中的輸出波特率信息。這兩個函數的具體信息如表 6.9所示。 表6.9 cfgetispeed函數和cfgetospeed函數 頭文件 <termios.h> <unistd.h> 函數形式 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函數 頭文件 <termios.h> <unistd.h> 函數形式 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 0 B1800 1800 B50 50 B2400 2400 B75 75 B4800 4800 B110 110 B9600 9600 B134 134 B19200 19200 B150 150 B38400 38400 B200 200 B57600 57600 B300 300

3. vim 怎麼查詢 linux 系統中有沒有termios庫文件

通過命令+文件名查看內容。如下命令可以查看。 1, cat :由第一行開始顯示文件內容; 2,tac:從最後一行開始顯示,可以看出tac與cat字母順序相反; 3,nl:顯示的時候輸出行號; 4,more:一頁一頁的顯示文件內容

4. termios.h是什麼只有在linux下可以用么為什麼在windows的VC中說沒有這個文件

1、這是Linux 下串口驅動頭文件。
2、一般只能在Linux下。
3、不能在windows上使用,是因為這不屬於C標准庫或者WINDOWS標准庫頭文件。
4、要想在windows上使用,需要有開發庫的支持。
5、Windows的驅動開發,有專門的驅動包,叫WDK,自己可以去微軟官網搜索下載。

5. 在linux下終端參數,讓用戶輸入的字元如何被立即送到程序,而不敲回車

termios。在程序中或者終端設置中改一下teminal的設置就行了。具體的話,參見任何一本linux編程書中的terminal這一章。很簡單的,就兩三句話。

6. termios.h是什麼只有在linux下可以用么為什麼在windows的VC中說沒有這個文件

1、這是linux
下串口驅動頭文件。
2、一般只能在linux下。
3、不能在windows上使用,是因為這不屬於c標准庫或者windows標准庫頭文件。
4、要想在windows上使用,需要有開發庫的支持。
5、windows的驅動開發,有專門的驅動包,叫wdk,自己可以去微軟官網搜索下載。

7. termios.h是什麼只有在linux下可以用嗎為什麼在windows的VC中說無此文件

1、這是Linux 下串口驅動頭文件。

2、一般只能在Linux下。

3、不能在windows上使用,是因為這不屬於C標准庫或者WINDOWS標准庫頭文件。

4、要想在windows上使用,需要有開發庫的支持。

5、Windows的驅動開發,有專門的驅動包,叫WDK,自己可以去微軟官網搜索下載。

8. linux中termios.h 頭文件里怎麼沒有tiocmget

頭文件中有函數的申明,庫文件實現函數的定義。
比如,printf函數。使用時應包括stdio.h,打開stdio.h你只能看到,printf這

個函數的申明,卻看不到printf具體是怎麼實現的,而函數的實現在相應的C庫

中。而庫文件一般是以二進制形式而不是C源文件形式提供給用戶使用的。程序

中包括了stdio.h這個頭文件。鏈接器就能根據頭件中的信息找到printf這個函

數的實現並鏈接進這個程序代碼段里。

總結起來就是,庫文件通過頭文件向外導出介面。用戶通過頭文件找到庫文件中

函數實現的代碼從而把這段代碼鏈接到用戶程序中去。

9. linux串口設置時struct termios中各個選項的具體意思是什麼

設置串口

最基本的設置串口包括波特率設置,效驗位和停止位設置。串口的設置主要是設置 struct termios 結構體的各成員值。

struct termio
{ unsigned short c_iflag; /* 輸入模式標志 */
unsigned short c_oflag; /* 輸出模式標志 */
unsigned short c_cflag; /* 控制模式標志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};

設置這個結構體很復雜,我這里就只說說常見的一些設置:

波特率設置 下面是修改波特率的代碼:

struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*設置為19200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);

一般簡單的問題,網路和google都有,搜索一下就有了。

閱讀全文

與linuxtermios相關的資料

熱點內容
3dmax擠出命令英語 瀏覽:903
靶心率的定義和演算法 瀏覽:513
3d模術師app哪裡下載 瀏覽:474
php中文api文檔 瀏覽:458
安卓設計怎麼加入輸入框 瀏覽:184
主根伺服器什麼時候開始 瀏覽:738
奇門遁甲完整版pdf 瀏覽:901
app軟體怎麼用的 瀏覽:802
電子書pdf購買 瀏覽:193
浪潮伺服器如何做系統 瀏覽:111
冒險島img格式加密 瀏覽:596
我的世界手游如何復制命令 瀏覽:659
天刀自動彈琴腳本源碼 瀏覽:970
打開其它app微信怎麼收不到 瀏覽:447
安卓游戲耳機怎麼戴 瀏覽:18
不越獄怎麼去除app廣告 瀏覽:178
ipadminipdf閱讀 瀏覽:506
文件夾無限制壓縮會不會降低內存 瀏覽:412
榮耀怎樣創建文件夾 瀏覽:631
如何用本機登陸遠程伺服器地址 瀏覽:682