Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 序列埠通訊完整指南:從基本原理到程式設計實作

編輯:Linux 教學

序列埠通訊是嵌入式與工控領域最基礎的資料傳輸方式。本文系統整理序列埠通訊原理、同步/非同步模式、RS-232 標準、全雙工/半雙工、流量控制、Linux 下裝置存取與程式設計要點。

一、什麼是序列埠通訊

電腦主機與外設、主機之間進行位元級串列傳輸,每個字元逐位傳送(1 或 0)。

二、通訊分類

1. 同步通訊

  • 連續串列傳輸,以「幀」為單位
  • 幀結構:同步字元 + 資料字元 + CRC 校驗
  • 單/雙同步字元幀
  • 缺點:要求收發時鐘嚴格同步

2. 非同步通訊

  • 以字元/位元組為單位組成「字元幀」
  • 收發端各自時鐘獨立,無需同步脈衝
  • 字元幀結構:起始位 + 資料位(5-8) + 奇偶校驗位 + 停止位
  • 優點:幀長度不受限;缺點:起始/停止位降低有效頻寬

關鍵指標

  • 波特率:每秒傳輸位元數(bps)
  • 字元幀格式:起始位、資料位、校驗位、停止位

三、RS-232 介面標準

  • EIA RS-232-C,1970 年制定
  • 定義電氣特性、訊號功能、連接器腳位
  • 常見 DB-9/DB-25 連接器

四、傳輸模式

  • 全雙工:同時收發,兩條獨立資料通道
  • 半雙工:收發互斥,單通道分時

五、流量控制

方式機制特點
軟體XON/XOFF (0x11/0x13)佔用資料頻寬,不適用二進制傳輸
硬體RTS/CTS 訊號線不佔用資料頻寬,可靠度高

六、Linux 下序列埠存取

1. 裝置檔案

/dev/ttyS0 (COM1)、/dev/ttyS1 (COM2) ... /dev/ttyUSB0 (USB 轉序列埠)

2. 開啟裝置


int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) perror("open");

注意權限:需將裝置檔案權限開放或加入 dialout 群組。

3. 參數配置(termios)


struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;      // 無校驗
options.c_cflag &= ~CSTOPB;      // 1 停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;          // 8 資料位
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 原始模式
tcsetattr(fd, TCSANOW, &options);

4. 讀寫操作


write(fd, "AT\r\n", 4);
char buf[256];
int n = read(fd, buf, sizeof(buf));

七、常見問題與除錯

  • 權限不足 → chmod 666 /dev/ttyS0 或加入 dialout 群組
  • 傳輸亂碼 → 確認波特率、資料位、停止位、校驗位雙端一致
  • 硬體流控失效 → 檢查 RTS/CTS 接線、驅動程式支援
Copyright © Windows教程網 All Rights Reserved