導航:首頁 > 操作系統 > linux下的串口通信

linux下的串口通信

發布時間:2022-05-16 07:53:01

linux下實現了雙向串列通信,目前只能發送字元串,但如何實現:1.漢字的通信 如何實現 2.聊

1、串口有通信位元組位數限制,所以中文最好用 base64 編碼後發送,保證都是 7bit 編碼。
2、聊天窗口看你水平了,圖形界面函數庫 GTK 或者 QT 自己選。字元界面用 ncurses ,不過在字元界面跑中文支持需要外掛程序,cce 或者 zhcon 都很老了,但沒別的可選了。

3、中文輸入圖形界面現在都是統一的,圖形界面你的系統能用中文就都能用。字元界面中文環境會模擬成一個新的字元終端。
4、編程時不要用中文直接寫道源代碼里。最好用外掛式,源代碼裡面最好只有 ASCII 字元。
5、Linux 系統內部統一用 UTF8 處理,你的程序在輸出輸入時,最好做一次當前系統編碼和UTF8的互相轉換。
6、當前 Linux 默認基本都是 UTF8 ,但不排除有其他想法的發行版使用別的編碼。

Ⅱ 怎麼提高linux下的串口通信效率

MASK ICANON位,選擇RAW,跳過TTY線路規程。 如果你對MASK操作不熟悉,說明你C語言不是很純熟,&與~的結合是屏蔽某幾位的意思。

Ⅲ 如何在linux上使用串口設備

簡單的運行 dmesg 命令
$ dmesg | grep tty
輸出:
[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A

setserial 命令
setserial 是一個程序用於設定並/或報告某個串口關聯的配置信息。該信息包括串口用到的I/O 埠和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:
$ setserial -g /dev/ttyS[0123]
輸出:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

帶-g選項的setserial幫助找到你的Linux板子上的物理串口。
Linux 串口控制台程序
一旦串口被確定了,你就能使用許多的工具來配置Linux板子:
minicom- 用於控制modem和連接到mp 設備的最好的串口通信程序。
wvidial or other GUI dial up networking program - 一個內建智能PPP 撥號器。
getty / agetty - agetty 打開一個 tty 埠, 提示登錄名稱並調用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統控制台。

Ⅳ 如何查看linux下串口是否可用串口名稱等

1、查看串口是否可用,可以對串口發送數據比如對com1口,echo lyjie126 > /dev/ttyS0

2、查看串口名稱使用 ls -l /dev/ttyS* 一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;

3、查看串口驅動:cat /proc/tty/drivers/serial

4、查看串口設備:dmesg | grep ttyS*

(4)linux下的串口通信擴展閱讀

介面劃分標准

同步串列介面(英文:SynchronousSerialInterface,SSI)是一種常用的工業用通信介面。。

非同步串列是指UART(Universal Asynchronous Receiver/Transmitter),通用非同步接收/發送。UART是一個並行輸入成為串列輸出的晶元,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。 TTL電平是3.3V的,而RS232是負邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平,MDS2710、MDS SD4、EL805等是RS232介面,EL806有TTL介面。

串列介面按電氣標准及協議來分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422與RS-485標准只對介面的電氣特性做出規定,不涉及接插件、電纜或協議。

Ⅳ linux系統怎麼串口通信

裝個minicom吧,實現串口通信。

Ⅵ Linux下串口通信丟位元組的問題是怎麼樣解決

int con=atoi(portstr);
unsigned char Port_file_name[30];
int fd0,rc;
struct termios ts0;
switch (con)
{ //選項O_NOCTTY 表示不能把本串口當成控制終端,否則用戶的鍵盤輸入信息將影響程序的執行
//O_NDELAY表示打開串口的時候,程序並不關心另一端的串口是否在使用中
case 1: fd0=open("/dev/ttyM0",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 2: fd0=open("/dev/ttyM1",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 3: fd0=open("/dev/ttyM2",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 4: fd0=open("/dev/ttyM3",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 5: fd0=open("/dev/ttyM4",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 6: fd0=open("/dev/ttyM5",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 7: fd0=open("/dev/ttyM6",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 8: fd0=open("/dev/ttyM7",O_RDWR | O_NOCTTY | O_NDELAY); break;
default : fd0=open("/dev/ttyM0",O_RDWR | O_NOCTTY | O_NDELAY); break;
}

tcgetattr(fd0,&ts0);
bzero(&ts0,sizeof(struct termios));
switch (gytype)
{
case 1:{ts0.c_cflag |= B300 | CS7 | CLOCAL | CREAD | PARENB ;
ts0.c_cflag &= ~PARODD; // 轉換為偶效驗
ts0.c_iflag |= INPCK; // Disnable parity checking
break; }
case 2:{ts0.c_cflag |= B1200 | CS8 | CLOCAL | CREAD | PARENB ;
ts0.c_cflag &= ~PARODD; // 轉換為偶效驗
ts0.c_iflag |= INPCK; // Disnable parity checking
break;
}
case 3:{
ts0.c_cflag |= B9600 | CS8 | CLOCAL | CREAD ;
ts0.c_cflag &= ~PARENB; // Clear parity enable
ts0.c_iflag &= ~INPCK; // Enable parity checking
break;
}
case 4:{ts0.c_cflag |= B9600 | CS8 | CLOCAL | CREAD | PARENB ;
ts0.c_cflag &= ~PARODD; // 轉換為偶效驗
ts0.c_iflag |= INPCK; // Disnable parity checking
break;
}
}

ts0.c_lflag &= ~ECHO;
ts0.c_lflag &= ~ECHONL;
ts0.c_iflag &= ~IXOFF;
ts0.c_iflag &= ~IXON;
ts0.c_cflag &= ~CSIZE;
switch (gytype)
{
case 1:{ts0.c_cflag |= CS7 ; break;}
case 2:{ts0.c_cflag |= CS8 ; break;}
case 3:{ts0.c_cflag |= CS8 ; break;}
case 4:{ts0.c_cflag |= CS8 ; break;}
}

ts0.c_lflag &= ~ICANON; //如果設置使能規范輸入,否則使用原始數據(本文使用)
ts0.c_oflag &= ~ONLCR; //如果設置將NL轉換成CR-NL後輸出
ts0.c_iflag &= ~INLCR; //如果設置將接收到的NL(換行)轉換成CR(回車)。
ts0.c_cc[VMIN] = 0; //最少可讀數據
ts0.c_cc[VTIME] = 0; //等待數據時間(10秒的倍數)
ts0.c_cflag &= ~CSTOPB; //如果設置則使用兩個停止位 ,如果取消則使用一個停止位
ts0.c_iflag |= IGNBRK; //如果設置則忽略接收到的break信號
ts0.c_lflag &= ~IEXTEN; //如果設置則啟用實現自定義的輸入處理
ts0.c_lflag |= NOFLSH; //如果設置則禁止產生SIGINT,SIGQUIT和SIGSUSP信號時刷新輸入和輸出隊列
switch (gytype)
{
case 1:{rc = cfsetospeed(&ts0,B300);break; }
case 2:{rc = cfsetospeed(&ts0,B1200);break; }
case 3:{rc = cfsetospeed(&ts0,B9600);break; }
case 4:{rc = cfsetospeed(&ts0,B9600);break; }
}
rc = tcsetattr(fd0,TCSAFLUSH,&ts0);
return fd0;

Ⅶ linux串口通信代碼解釋,一句一句來

簡單說幾句吧,linux下的設備都是文件,流程也無非是open, read/write, close等
當然,串口你得設置各種屬性才行對不對,比如在win下的超級終端就設置了波特率啊,停止位啊,奇偶校驗啊什麼的,這些屬性都通過
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);函數來設置。
完整代碼嗎自己去google,一把一把的,其實最重要的是設置好屬性,剩下的就是read,write的問題咯。
希望對你有用
對了,了解終端函數的詳情請在linux命令行終端獲取: man termios

Ⅷ linux系統中串口如何通訊

這個難實現,試試iptables的轉發思路能用嗎?

轉發TCP 8081到xx.xx.xx.xx:
#iptables -t nat -I PREROUTING -p tcp –dport 8081 -j DNAT –to xx.xx.xx.xx

Ⅸ linux串口通訊簡單問題

這個write程序向串口(/dev/ttyS0)寫入數據,由於這個文件取名與系統自帶的write命令重名,因此執行時鍵入:
./write
再試試。

Ⅹ linux下串口通信問題

MASK ICANON位,選擇RAW,跳過TTY線路規程。

如果你對MASK操作不熟悉,說明你C語言不是很純熟,&與~的結合是屏蔽某幾位的意思。

閱讀全文

與linux下的串口通信相關的資料

熱點內容
做程序員的沒朋友嗎 瀏覽:355
阿里雲伺服器傳奇微端 瀏覽:922
phplinux時間 瀏覽:447
雲伺服器20性能 瀏覽:986
android強制系統橫屏 瀏覽:280
怎麼提前看未播出的電視劇app 瀏覽:666
cad轉pdf圖層 瀏覽:600
程序員接私活初級 瀏覽:434
全無油潤滑壓縮機 瀏覽:185
代碼加密常用方法 瀏覽:953
安卓手機如何解除已禁用 瀏覽:396
演算法的隨機性 瀏覽:486
高中解壓體育游戲 瀏覽:533
androidstudior丟失 瀏覽:345
命令行筆記 瀏覽:739
360目標文件夾訪問拒絕 瀏覽:520
3b編程加工指令 瀏覽:790
c8051f系列單片機選型手冊 瀏覽:773
南昌php程序員 瀏覽:514
bcs命令 瀏覽:447