概要
RS-232C(Recommended Standard 232 Revision C)は、1969年にEIA(Electronic Industries Alliance)が制定したシリアル通信の規格です。正式名称は「EIA-232」とも呼ばれます。コンピュータとモデム(DTE-DCE間)を接続するために設計された規格で、PC時代を通じて広く普及しました。
最大の特徴は電圧レベルです。通常のTTLレベル(0/3.3V または 0/5V)のUARTとは異なり、RS-232Cは±12V系(一般的に+3〜+15Vが論理0、-3〜-15Vが論理1)を使います。この負電圧を使う点がノイズ耐性を高め、比較的長い距離(最大15m程度)での通信を可能にしています。
現代の組み込みシステムでは、産業機器・計測器・POSシステム・医療機器など、レガシー機器との接続やPC(シリアルポート経由)との通信に今も現役で使われています。
歴史・背景
RS-232は1960年代のコンピュータとモデム接続の標準化として誕生しました。1969年のRS-232C改訂が最も普及し、一般に「RS-232C」と呼ばれます。1997年にEIA-232Fとして更新されています。
1980〜90年代のPCには「COMポート」(DB9またはDB25コネクタ)が標準装備されており、マウス・モデム・プロッター・産業機器の接続に使われました。2000年代にはUSBにその座を譲りましたが、産業機器・計測器分野では依然として現役です。
USB-シリアル変換IC(CH340、FT232、CP2102等)の普及により、現代のPCでもUSBポート経由でRS-232C機器と接続できるため、組み込み開発でのデバッグコンソールや産業機器との通信に広く使われ続けています。
技術仕様
電気的特性
| 項目 | 仕様 |
|---|---|
| ロジック1(マーク) | -3V〜-15V(送信側)/ -3V〜-25V(受信側) |
| ロジック0(スペース) | +3V〜+15V(送信側)/ +3V〜+25V(受信側) |
| アイドル状態 | マーク(論理1、負電圧) |
| 最大伝送速度 | 20kbps(規格上)/ 実際は数Mbpsまで対応 |
| 最大ケーブル長 | 15m(20kbps時、容量50pF/m制限) |
| ロードキャパシタンス | 最大2500pF |
注意:RS-232Cは論理0がPositive電圧、論理1がNegative電圧という「負論理」です。これはUARTとは逆です(TTL UARTはアイドル時High)。
コネクタとピン配置
DB9(9ピン)コネクタ(最も一般的):
| ピン番号 | 信号名 | 方向(DTE側) | 説明 |
|---|---|---|---|
| 1 | DCD | 入力 | データキャリア検出 |
| 2 | RXD | 入力 | 受信データ |
| 3 | TXD | 出力 | 送信データ |
| 4 | DTR | 出力 | データ端末レディ |
| 5 | GND | - | グランド |
| 6 | DSR | 入力 | データセットレディ |
| 7 | RTS | 出力 | 送信要求 |
| 8 | CTS | 入力 | 送信可 |
| 9 | RI | 入力 | 呼び出し検出 |
最小接続(3線接続)はTXD(3番)・RXD(2番)・GND(5番)のみです。フロー制御不要な場合はこれで通信できます。
レベル変換IC
マイコン(TTLレベル)とRS-232C機器を接続するには専用のレベル変換ICが必要です:
| IC | メーカー | 特徴 |
|---|---|---|
| MAX232 | Maxim | 最も定番。5V系、外付けコンデンサ4個 |
| MAX3232 | Maxim | 3.3V系対応 |
| SP3232E | Sipex | 3V系、低消費電力 |
| ST3232 | STMicro | 3.3V系、高ESD耐性 |
マイコン(TTL 3.3V) ─── MAX3232 ─── DB9コネクタ(RS-232C)
TXD ──→ T1IN T1OUT ──→ 3番(TXD)
RXD ←── R1OUT R1IN ←── 2番(RXD)
GND ────────────────── 5番(GND)
動作原理
RS-232Cの信号レベルはTTL UARTの論理を電圧変換しているだけで、プロトコル(フレームフォーマット)はUARTと同一です。
TTL UART: アイドル=High(3.3V)、スタートビット=Low(0V)、データ=High/Low
RS-232C: アイドル=Mark(-12V)、スタートビット=Space(+12V)、データ=Mark/Space
(論理値は同じだが、電圧レベルが反転・増幅される)
MAX232等のICが内部チャージポンプで±12V系電源を生成し、TTL信号を±12V系に変換します。
// STM32からRS-232C機器との通信(レベル変換IC接続後はUARTと同じ)
// UART初期化(例:115200bps、8N1)
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
HAL_UART_Init(&huart1);
// RS-232C機器への文字列送信
const char *cmd = "AT\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), 1000);
// RS-232C機器からの応答受信
uint8_t buf[64];
HAL_UART_Receive(&huart1, buf, sizeof(buf), 1000);
フロー制御(RTS/CTS)
大量データ転送ではハードウェアフロー制御(RTS/CTS)を使い、バッファオーバーフローを防ぎます:
// ハードウェアフロー制御有効化
huart1.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
HAL_UART_Init(&huart1);
用途・ユースケース
RS-232Cが今も使われる場面:
- 産業機器・PLC: 工場の製造ラインに設置された古いPLC・計測器・バーコードリーダーはRS-232Cで制御
- POSシステム: レジのレシートプリンター・バーコードスキャナーはRS-232C接続が多い
- 医療機器: 古い分析装置・生体計測器はRS-232Cを採用していることが多い
- ネットワーク機器の管理: ルーターやスイッチのコンソールポートは今もRS-232C(RJ45→DB9変換ケーブルを使用)
- 組み込みデバッグ: USB-シリアル変換アダプタ経由でのデバッグコンソール接続
- GPSレシーバー: 古い業務用GPSはNMEAセンテンスをRS-232C経由で出力
実装・開発のポイント
クロスケーブル(ヌルモデムケーブル)
同じDTE機器(PCと組み込みマイコン)を直接接続する場合、TXDとRXDを交差させた「ヌルモデムケーブル」が必要です:
DTE(PC側) ヌルモデムケーブル DTE(組み込み機器)
TXD(3) ──────────────────→ RXD(2)
RXD(2) ←────────────────── TXD(3)
GND(5) ─────────────────── GND(5)
(RTS/CTS接続なし、または自己ループあり)
ESD保護
RS-232Cは±12Vの高電圧を扱うため、ESD(静電気)に対してTVSダイオードなどの保護素子を実装することが推奨されます。特にコネクタ近くに配置します。
USB-シリアル変換ツール
現代の開発では、USB-シリアル変換IC(CH340G・FT232RL・CP2102)を使ったアダプタがよく使われます。これらはUSB-TTL UART変換であり、RS-232C(±12V)への変換は別途MAX3232等が必要です。
他技術との比較
RS-232C vs RS-485
| 項目 | RS-232C | RS-485 |
|---|---|---|
| 信号方式 | シングルエンド | 差動 |
| 最大距離 | 約15m | 1200m |
| マルチドロップ | 不可(1対1) | 最大32デバイス |
| ノイズ耐性 | 中 | 高い |
| 電圧 | ±12V | ±200mV〜±6V(差動) |
RS-485は差動信号による高ノイズ耐性と長距離・多点接続が強みで、産業現場でのModbus通信に広く使われています。
RS-232C vs USB
現代のPCではUSBがRS-232Cを置き換えましたが、産業機器・計測器ではRS-232Cの信頼性・互換性が評価され、新しい機器にも採用されることがあります。