コンテンツにスキップ

UART通信

UARTとは

UART(Universal Asynchronous Receiver Transmitter)は、マイコンやコンピュータ同士がシリアル通信を行うための通信方式である。

STM32、Raspberry Pi、Arduinoなど、多くの組み込み機器で利用されている。

AsterではALEO(STM32)とAC(Raspberry Pi)の通信手段として利用する予定である。


特徴

UARTには以下の特徴がある。

メリット

  • 配線が少ない
  • 実装が簡単
  • STM32やRaspberry Piが標準対応している
  • デバッグしやすい

デメリット

  • SPIより通信速度が遅い
  • 複数機器接続には向かない
  • アドレス機能がない

配線

UART通信は最低3本の配線で構成される。

信号 説明
TX 送信
RX 受信
GND 基準電位

接続例

STM32               Raspberry Pi

TX ----------------> RX

RX <---------------- TX

GND --------------- GND

TXとRXは交差接続する。


GNDが必要な理由

UARTは電圧で信号を判断する。

例えば

0V → Low

3.3V → High

として認識するため、通信相手と電圧の基準を共有する必要がある。

そのためGNDの接続は必須である。


通信の仕組み

UARTは1bitずつ順番にデータを送信する。

例えば文字「A」はASCIIコードで

01000001

として送信される。


フレーム構造

UARTでは以下の形式でデータが送信される。

Start
 ↓
Data
 ↓
Stop

┌─┬────────┬─┐
│S│  DATA  │P│
└─┴────────┴─┘

スタートビット

通信開始を表す。

通常は

0

が送信される。


データビット

実際のデータ。

一般的には8bitが利用される。


ストップビット

通信終了を表す。

通常は

1

が送信される。


ボーレート

ボーレート(Baud Rate)は通信速度を表す。

よく利用される設定

ボーレート
9600
19200
38400
57600
115200
921600

STM32では115200bpsがよく利用される。


ボーレート不一致

通信する機器同士でボーレートが一致していないと通信できない。

STM32 : 115200

Raspberry Pi : 9600

この場合、文字化けや通信エラーが発生する。


8N1とは

UART設定でよく見かける

8N1

は以下を意味する。

項目 内容
8 データ長8bit
N パリティ無し
1 ストップビット1bit

現在最も一般的な設定である。


STM32での利用

STM32にはUART機能が内蔵されている。

CubeMXでUSARTを有効化するだけで利用できる。

一般的な設定

USART1

115200bps

8N1

Raspberry Piでの利用

LinuxではUARTは

/dev/ttyAMA0

または

/dev/ttyS0

として利用できる。

Node.jsではSerialPortライブラリを利用することが多い。

const { SerialPort } =
require("serialport");

const port =
new SerialPort({
    path: "/dev/ttyAMA0",
    baudRate: 115200
});

UARTと他通信方式の比較

項目 UART I2C SPI
配線数 少ない 少ない 多い
通信速度 普通 やや遅い 高速
実装難易度 低い
複数接続 不向き 得意 可能

よくあるトラブル

TXとRXが逆

TX → TX
RX → RX

TX → RX
RX → TX

GND未接続

UARTで最も多いトラブルの一つ。

通信相手とGNDを共有する必要がある。


ボーレート不一致

通信速度の設定が異なると通信できない。


電圧レベル不一致

例えば

5V UART
↓
3.3V UART

へ直接接続すると故障する可能性がある。

接続前に動作電圧を確認すること。


Asterでの利用

AsterではUARTを利用してACとALEOを接続する。

AC
(Raspberry Pi)
      ⇅
 UART
      ⇅
ALEO
(STM32)

通信内容の例

  • モータ制御指令
  • 状態取得
  • センサ情報
  • エラー通知

Asterでの利用

ACとの通信はCAN通信を使用しているのでメイン機能では使わないがデバックには使用するため今回紹介した。

まとめ

UARTは組み込み開発で最も基本的なシリアル通信方式の一つである。

  • TXとRXで通信する
  • GND共有が必要
  • ボーレートを合わせる
  • STM32とRaspberry Piで簡単に利用できる

実装が容易で信頼性も高いため、AsterにおけるALEOとACの通信方式として適している。