> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/knowledge-base/uart.md).

# 串列埠通訊(UART)

### 什麼是 UART <a href="#uart" id="uart"></a>

UART（Universal Asynchronous Receiver/Transmitter）是一種非同步序列通訊方式，通常使用兩條資料線在兩個裝置之間傳送資料，是飛控系統中最常見的通訊介面之一。

在無人機與飛控應用中，UART 常用於連接 GPS、遙測模組、接收機、伴飛電腦、測距儀，以及系統除錯主控台等裝置。

### UART 的特性 <a href="#uart" id="uart"></a>

UART 是**點對點**通訊，不像 I2C 或 CAN 那樣屬於共享匯流排；一組 UART 連線通常只對應兩個裝置，且不使用位址機制。

這種方式的優點是結構簡單、相容性高、應用廣泛，但也代表每一個周邊通常都需要占用一組獨立的序列埠資源。

### UART 的基本訊號 <a href="#uart" id="uart"></a>

最基本的 UART 連線需要三條線：

| 訊號  | 用途      |
| --- | ------- |
| TX  | 傳送資料輸出。 |
| RX  | 接收資料輸入。 |
| GND | 共地參考。   |

部分飛控或周邊還會在同一組接口上額外提供 5V、3.3V、CTS、RTS 或其他控制訊號，但 UART 能否正常通訊，最核心的仍是 TX、RX 與 GND。

### TX / RX 的交叉接法 <a href="#tx--rx" id="tx--rx"></a>

UART 最常見的接線錯誤，就是 TX 和 RX 接錯方向。

正確接法如下：

* 裝置 A 的 TX 接到裝置 B 的 RX。
* 裝置 A 的 RX 接到裝置 B 的 TX。
* 兩端 GND 必須相連。

也就是說，**傳送端要接到對方的接收端**。如果 TX 對 TX、RX 對 RX，通常就不會有任何資料通過。

### 共地的重要性 <a href="#undefined" id="undefined"></a>

即使 TX 與 RX 接對了，如果兩個裝置沒有共地，UART 仍可能無法穩定工作。

這是因為 UART 訊號需要以共同的地參考電位為基準；缺少共地時，接收端可能無法正確判讀高低電位，進而造成資料錯誤、斷續或完全無法通訊。

### 波特率(Baudrate) <a href="#undefined" id="undefined"></a>

UART 通訊雙方必須使用相同的波特率（baud rate），否則接收端看到的內容通常會變成亂碼或無法辨識的資料。

常見的波特率包含：

* 9600：部分 GPS 或簡單感測器常見的預設值。
* 57600：除錯主控台或部分遙測配置常見。
* 115200：MAVLink、GPS、伴飛電腦連線中很常見。
* 921600：高頻資料傳輸或高速鏈路時可能使用，但對線材與流控要求更高。

### 波特率的注意事項 <a href="#undefined" id="undefined"></a>

當波特率提高到 921600 或更高時，通訊穩定度會更依賴線材品質、連線長度與硬體流控支援。

ARK 的 UART 文件特別指出，高速 UART 若沒有 CTS/RTS 等硬體流控，在較長線材上容易丟包；只有在板對板短距離連線時，才較可能穩定運作。

### 資料格式 <a href="#undefined" id="undefined"></a>

UART 在飛控與周邊應用中，最常見的資料格式是 **8N1**，也就是：

* 8 個資料位元。
* 無 parity。
* 1 個 stop bit。

這通常是大多數 GPS、遙測與飛控周邊的預設值，因此實務上很少需要特別修改。

### 飛控裡的 UART 用途 <a href="#uart" id="uart"></a>

在一般飛控系統中，UART 常見用途包括：

* GPS 模組資料輸入。
* 遙測模組與地面站通訊。
* 接收機序列輸入，例如某些 SBUS、CRSF 或其他數位接收協定。
* 伴飛電腦與飛控之間的資料交換，例如 MAVLink 或其他控制/感測通訊。
* 系統除錯主控台輸出，用來檢查開機訊息、錯誤日誌或互動式命令列。

### 邏輯序列埠與實體 UART <a href="#uart" id="uart"></a>

在一些主流飛控韌體中，使用者看到的 `SERIAL0`、`SERIAL1`、`SERIAL2` 這類名稱，往往是**邏輯序列埠編號**，不一定直接等於晶片上的 UART1、UART2、UART3。

`SERIALx` 與實體 UART/USART 的對應關係由硬體定義檔決定，因此同樣標示為 `SERIAL3` 的埠，在不同飛控上可能對應到不同的實體接口。

### 常見的序列埠角色 <a href="#undefined" id="undefined"></a>

常見的序列埠角色包含 USB、遙測埠、GPS 埠與使用者自定義埠，不過實際對應仍依板卡硬體而定。

以 ArduPilot 為例，`Serial 0` 通常對應 USB，`Serial 1` 與 `Serial 2` 常用於遙測，`Serial 3` 與 `Serial 4` 常用於 GPS，而後面的序列埠則可能保留給其他用途或預設停用。

### 協定配置 <a href="#undefined" id="undefined"></a>

在支援參數化序列埠管理的飛控韌體中，一個 UART 不只是一條線路，而是還需要指定它承載哪一種協定。

以 ArduPilot 為例，`SERIALx_PROTOCOL` 可設定為 GPS、MAVLink、RC Input、ESC Telemetry、DisplayPort、Rangefinder、OpticalFlow、DDS XRCE 等多種用途，代表同一個實體埠能透過參數被重新指定給不同周邊。

### 進階序列選項 <a href="#undefined" id="undefined"></a>

部分飛控還提供 UART 的進階設定，例如 RX/TX 反相、半雙工、RX/TX 交換、上拉/下拉與 DMA 行為控制等功能。

ArduPilot 將這些功能整理在 `SERIALx_OPTIONS` 之中，並指出某些功能只在特定 MCU 等級或特定板卡上支援，因此設定前必須先確認硬體能力。

### 接收機與 UART <a href="#uart" id="uart"></a>

有些序列接收機協定可以直接接在一般 UART 上，但不是所有情況都能即插即用。

例如 ArduPilot 文件提到，任意支援的 UART 可能都能拿來做 RC 輸入，但像 SBUS、FPort 這類協定可能涉及反相需求；若 UART 本身不支援反相，就可能需要額外硬體反相器。

### 除錯主控台 <a href="#undefined" id="undefined"></a>

UART 也是存取飛控底層除錯主控台的常見方式之一。

在這種模式下，UART 可用來查看開機訊息、啟動錯誤、感測器狀態與診斷資訊，因此當飛控無法正常啟動、USB 無法辨識或韌體異常時，除錯 UART 常是非常重要的排查入口。

### 線材與抗干擾 <a href="#undefined" id="undefined"></a>

UART 本質上不是長距離、強抗干擾的匯流排，因此線材品質與布線方式很重要。

較高波特率下盡量縮短線長，並使用扭絞方式降低干擾；例如將 TX 與 GND、RX 與 GND 成對佈線，能比鬆散平行走線更穩定。

### 電壓相容性 <a href="#undefined" id="undefined"></a>

大多數現代飛控 MCU 的 UART 邏輯電位是 3.3V，因此直接接到 5V UART 裝置可能造成不穩定，甚至損壞 MCU。

如果周邊裝置使用 5V 邏輯電位，應先確認其輸出是否為 3.3V 相容；必要時應加入電平轉換器，而不是直接硬接。

### 常見問題 <a href="#undefined" id="undefined"></a>

以下是 UART 最常見的問題來源：

* **TX / RX 接反**：最常見，也最先檢查。
* 波特率**不一致**：常見症狀是亂碼或完全沒資料。
* **缺少共地**：兩端看似接好，但訊號無法正確判讀。
* **電壓不相容**：3.3V 與 5V 邏輯混接可能導致失敗或損壞。
* **線材太長或佈線太差**：特別在高波特率、馬達干擾或震動環境下更容易出問題。
* **序列埠已被其他功能占用**：物理埠接對了，但韌體參數把它指定給了別的協定。

### 建議排查順序 <a href="#undefined" id="undefined"></a>

如果 UART 通訊異常，建議依序檢查下列項目：

1. 確認 TX 對 RX、RX 對 TX、GND 對 GND。
2. 確認兩端波特率相同。
3. 確認資料格式是否為預期值，通常為 8N1。
4. 確認該實體接口在韌體中被指定為正確協定。
5. 確認周邊的邏輯電位是否與飛控相容。
6. 確認線長、焊點與接頭是否穩定。
7. 必要時使用示波器或 USB-UART 工具直接觀察 TX/RX 訊號。

### 注意事項 <a href="#undefined" id="undefined"></a>

**注意：** UART 不是多點共享匯流排，一組 TX/RX 通常只應連到一個對應裝置，除非你非常清楚該協定與硬體架構允許特殊接法。

**注意：** 不同飛控對「GPS」、「TELEM1」、「UART4」、「SERIAL3」這些名稱的對應可能不同，接線前應同時對照硬體接腳表與韌體參數配置。

**注意：** 高波特率並不一定比較好；若周邊資料量不大，使用較保守且穩定的波特率，通常比追求高速更可靠。
