MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MSP430G2553 - UARTのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MSP430G2553 - UART
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == UART (Universal Asynchronous Receiver / Transmitter) (汎用非同期送受信機) は、シリアル通信の一種であり、データを1ビットずつ送受信する。<br> <br> * 非同期通信 *: 送信側と受信側が別々のクロックを使用して、あらかじめ設定されたボーレート (通信速度) に基づいてデータを送受信する。 *: <br> * データフォーマット *: スタートビット、データビット (通常8ビット)、パリティビット (オプション)、ストップビットで構成される。 *: <br> * ボーレート *: 通信速度のことであり、ビット/秒 (bps) で表現される。 *: 送信側と受信側で同じ設定が必要となる。 *: <br> * フロー制御 *: データの送受信を制御するために、ハードウェアまたはソフトウェアの手法を使用する。 *: <br> * 送受信バッファ *: 送信するデータと受信したデータを一時的に保持するバッファである。 <br> UARTは、マイコンとPC間、マイコン同士、または他の周辺機器との通信に広く利用されている。<br> UARTを使用する場合は、ボーレート、データフォーマット、フロー制御等の設定を適切に行う必要がある。<br> <br><br> == UART == ==== 非同期通信 ==== UARTは非同期通信方式を採用している。<br> 送信側と受信側が別々のクロックを使用して、データの送受信タイミングを同期させる必要がない。<br> <br> 送信側と受信側は、あらかじめ設定されたボーレート (通信速度) に基づいてデータを送受信する。<br> <br> ==== シリアル通信 ==== UARTは、データを1ビットずつ順番に送信するシリアル通信方式である。<br> 送信側は、データを1ビットずつ送信線 (TX) に送出して、受信側は、受信線 (RX) から1ビットずつデータを受信する。 <br> ==== データフォーマット ==== UARTでは、一般的に以下のようなデータフォーマットが使用されている。<br> <br> * スタートビット *: データの開始を示すビット (通常は0) * データビット *: 実際のデータを表すビット (通常は8ビット) * パリティビット *: エラー検出用のビット (偶数パリティまたは奇数パリティ) * ストップビット *: データの終了を示すビット (通常は1または2ビット) <br> ==== ボーレート ==== ボーレートは、UARTの通信速度を表す。<br> 単位は、ビット/秒 (bps) である。<br> <br> 一般的なボーレートには、9600[bps]、19200[bps]、38400[bps]、115200[bps]等がある。<br> 送信側と受信側は、同じボーレートに設定する必要がある。<br> <br> ==== フロー制御 ==== UARTでは、データの送受信を制御するためにフロー制御が使用される場合がある。<br> <br> * ハードウェアフロー制御 *: RTS (Request to Send) 信号とCTS (Clear to Send) 信号を使用して、データの送受信を制御する。 * ソフトウェアフロー制御 *: XON / XOFF制御文字を使用して、データの送受信を制御する。 <br> ==== 送受信バッファ ==== UARTには、送信バッファと受信バッファが用意されている。<br> <br> 送信バッファは送信するデータを一時的に保持して、受信バッファは受信したデータを一時的に保持する。<br> バッファを使用することにより、データの送受信を効率的に行うことができる。<br> <br><br> == 耐ノイズ性 == UARTは、他の通信方式と比較して、ノイズの影響を比較的受けやすい通信方式である。 以下に示す理由から、UARTはノイズに弱いといえる。<br> <br> * 単線通信 *: UARTは、送信線 (TX) と受信線 (RX) の2本の信号線を使用して通信を行う。 *: ノイズの影響を受けると、データの誤りが発生しやすくなる。 *: <br> * 非同期通信 *: UARTは非同期通信方式を採用しているため、送信側と受信側のクロックが完全に同期していない。 *: ノイズの影響でデータのタイミングがずれると、通信エラーが発生する可能性がある。 *: <br> * 信号レベル *: UARTは、一般的にTTLレベル (0[V]~5[V]) やCMOSレベル (0[V]~3.3[V]) の信号レベルを使用する。 *: これらの信号レベルは、ノイズの影響を受けやすく、信号の品質が低下する可能性がある。 <br> ただし、UARTのノイズ耐性を向上させるためのいくつかの手法がある。<br> * シールドケーブルの使用 *: 通信線をシールドケーブルで保護することにより、外部ノイズの影響を軽減することができる。 *: <br> * 適切な信号レベルの選択 *: 通信距離や環境に応じて、適切な信号レベル (RS-232、RS-422、RS-485等) を選択することにより、ノイズの影響を軽減できる。 *: <br> * パリティビットの使用 *: パリティビットを使用することにより、通信エラーを検出して、データの整合性を確認できる。 *: <br> * フィルタの使用 *: ハードウェアまたはソフトウェアのフィルタを使用して、高周波ノイズを除去することができる。 <br> これらの手法を適切に組み合わせることにより、UARTのノイズ耐性を向上させることができる。<br> ただし、極端に高いノイズ環境下では、より高いノイズ耐性を持つ通信方式 (I2C、SPI、CAN等) の使用を検討する必要がある。<br> <br><br> == UARTの設定 == UART通信の設定を行う場合、UCA0CTL0レジスタを適切に設定する必要がある。<br> ただし、通信相手のデバイスも同じデータフォーマットを使用するように設定する必要があることに注意する。<br> <br> * データ長 8ビット, パリティなし, 1ストップビット (8N1) <syntaxhighlight lang="c"> UCA0CTL0 &= ~UCPEN; // パリティなし UCA0CTL0 &= ~UC7BIT; // 8ビットデータ UCA0CTL0 &= ~UCSPB; // 1ストップビット </syntaxhighlight> <br> * データ長 8ビット, パリティなし, 2ストップビット (8N2) <syntaxhighlight lang="c"> UCA0CTL0 &= ~UCPEN; // パリティなし UCA0CTL0 &= ~UC7BIT; // 8ビットデータ UCA0CTL0 |= UCSPB; // 2ストップビット </syntaxhighlight> <br> * データ長 7ビット, パリティ付き, 1ストップビット (7E1) <syntaxhighlight lang="c"> UCA0CTL0 |= UCPEN; // パリティ付き UCA0CTL0 |= UC7BIT; // 7ビットデータ UCA0CTL0 &= ~UCSPB; // 1ストップビット UCA0CTL0 |= UCPAR; // 偶数パリティ </syntaxhighlight> <br><br> == サンプルコード == MSP430G2553マイコンを使用して、UART通信を行うための手順を、以下に示す。<br> ターミナルソフト (PuTTY等) を使用して、設定したボーレート (以下の例では、9600[bps]) でシリアル通信を行う。<br> <br> * ハードウェアの接続: *: MSP430G2553のP1.1 (UCA0RXD) を受信端子に接続する。 *: MSP430G2553のP1.2 (UCA0TXD) を送信端子に接続する。 <br> <syntaxhighlight lang="c"> #include <msp430.h> void main(void) { WDTCTL = WDTPW | WDTHOLD; // ウォッチドッグタイマを停止 // クロック設定 (例: 1[MHz]) DCOCTL = 0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; // UART設定 P1SEL = BIT1 + BIT2; // P1.1とP1.2をUART用に設定 P1SEL2 = BIT1 + BIT2; // P1.1とP1.2をUART用に設定 UCA0CTL1 |= UCSSEL_2; // SMCLK (サブメインクロック) を使用 UCA0BR0 = 104; // 9600bps (1[MHz]時) UCA0BR1 = 0; // 9600bps (1[MHz]時) UCA0MCTL = UCBRS0; // モジュレーションステージ UCA0CTL1 &= ~UCSWRST; // UARTをソフトウェアリセットから解除 // 送信例 while (!(UCA0IFG & UCTXIFG)); // 送信バッファが空になるまで待機 UCA0TXBUF = 'H'; // 文字 'H' を送信 // 受信例 while (!(UCA0IFG & UCRXIFG)); // 受信バッファにデータが入るまで待機 char receivedChar = UCA0RXBUF; // 受信データを読み込み // メインループ while(1) { // ...略 } } </syntaxhighlight> <br><br> == PCとのUART通信 == LinuxでマイコンとUART通信を行う場合は、以下の手順に従う。<br> <br> # シリアルポートの接続 #: マイコンのUART送信ピン (TX) をPCのシリアル受信ピン (RX) に接続する。 #: マイコンのUART受信ピン (RX) をPCのシリアル送信ピン (TX) に接続する。 #: マイコンとPCのグラウンド (GND) を接続する。 #: <br> # シリアルポートの設定 #: ターミナルを開いて、シリアルポートを設定する。<br> #: <code>stty -F <デバイスファイルのパス> <ボーレート> <データ長> <ストップビット長> <パリティビットの有無></code> #: <br> #: 例: <code>stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb</code> #: <br> #: /dev/ttyUSB0は、使用するシリアルポートのデバイスファイル名を入力する。 (環境に応じて適切なデバイスファイル名に変更すること) #: 9600は、ボーレートを表します。 (マイコン側の設定と一致させる) #: cs8は、データ長を8ビットに設定する。 #: -cstopbは、ストップビットを1ビットに設定する。 #: -parenbは、パリティビットを無効にする。 #: <br> # 通信の確立 #: <code>cat</code>コマンドを使用して、シリアルポートを読み書きする。 #: シリアルポートからの入力を受信して、ターミナルに表示する。 #: <code>cat <デバイスファイルのパス></code> #: 例: <code>cat /dev/ttyUSB0</code> #: <br> #: 別のターミナルを開いて、<code>echo</code>コマンドおよび<code>cat</code>を使用して、シリアルポートに書き込む。 #: これにより、シリアルポートにテキストが送信される。 #: <code>echo "Hello, MSP430!" > <デバイスファイルのパス></code> #: <br> # 通信の確認 #: マイコン側で受信処理が正しく実装されている場合、送信したテキストがマイコンで受信される。 #: マイコン側で送信処理が正しく実装されている場合、マイコンから送信されたデータがターミナルに表示される。 <br> <u>※注意</u><br> <u>シリアルポートのデバイスファイル名 (/dev/ttyUSB0等) は、環境によって異なる場合がある。</u><br> <u><code>ls /dev/tty*</code>コマンドを実行して、利用可能なシリアルポートを確認すること。</u><br> <u>ボーレートやデータフォーマット等の設定は、マイコン側の設定と一致している必要がある。</u><br> <br> <u>一部のLinuxディストリビューションでは、シリアルポートへのアクセス権限が必要な場合があるため、適切な権限を設定すること。</u><br> <br><br> __FORCETOC__ [[カテゴリ:MSP430]]
MSP430G2553 - UART
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse