PIC - Tera Term間
UARTモジュール制御
(→プロジェクトファイル(Harmony Ver.2.04版 ) ダウンロード)
<仕様>
・PIC32MZとPC間の文字列送受信通信をRS232C(正式にはEIA-574規格)を用いて行う。
・PIC32MZはPIC32MZ2048EFH100とする。
・PCの通信ソフトは Tera Termをつかうこと。
・通信条件 ボーレート:9600bps
データ長: 8ビット
パリティ: なし
ストップビット: 1ビット
フロー制御: なし
・PICが起動したら PC側に文字列 "Hellow World !!"を送信する。
・PC側でキーインした(Tera Term が送信した)文字を PIC側で受信したら文字列"data="を追加して
PC側に返信する。
例1: "b"を受信したら "data=b"を返信する。
例2: "4"を受信したら "data=4"を返信する。
・Tera Term 側の表示は エコーバックはしないで 送受信文字のみを表示する。
・‘PCのUSBポートとRS232Cポートの変換は、ラトックシステム(株)のUSBシリアルコンバーター REX-USB60Fを使用する。
・ Harmonyは、Ver.2.01bを使うものとする。
・UARTモジュールはダイナミックライブラリを使い、モジュールの諸元は以下とする。
モジュールID: U6
TXポート: RC2
RXポート: RG9
<回路図> (→PDFファイル)
<外観>
PIC32MZ評価ボード(→購入方法)を使った実験品の外観です。
<動作結果> (→ 動画:1080pのHD動画を見ることができます。)
① Tera Termを起動して通信条件を 以下のように設定します。 |
② PICの電源をONにするとPIC側から PC側(Tera Term)に "Hellow World !!"が 送信されてきます。 |
③ キーボードから "a"をキーインすると PC側から "data=a"が送信されて きます。 |
|
![]() |
![]() |
![]() |
|
④ キーボードから "b"をキーインすると PC側から "data=b"が送信されて きます。 |
⑤ キーボードから "3"をキーインすると PC側から "data=3"が送信されて きます。 |
⑥ キーボードから "4"をキーインすると PC側から "data=4"が送信されて きます。 |
|
![]() |
![]() |
![]() |
<解説> 記載してある内容は要点だけです。 詳細はプロジェクトファイルを精読願います。
(以下は、Harmony v2.04 をもとに作成しています。最新のバージョンとは異なることがあるかもしれませんので注意してください。)
■ USARTに関するMHCは、以下のように設定します。
■ Options
■ Pin Settings
項目 | ④ポート設定 |
MHC | ![]() |
備考 | デフォルトからの変更要領: RC2/Function: U6TX (U6のTX設定) RG9/Function: U6RX (U6のRX設定) |
■ app.cに、青字部分を追加します。
① 1バイト送信する関数です。 送信バッファに1バイトを書き込み、送信バッファが空になるまで待ちます。
void Write_Byte(char chr) //1バイト送信関数
{
PLIB_USART_TransmitterByteSend(USART_ID_6, chr); //送信バッファーに1バイト書込み・送信
// U6TXREG = chr; ////送信バッファーに1バイト書込み・送信
while (!PLIB_USART_TransmitterIsEmpty(USART_ID_6)); //送信バッファーが空になるまで待つ
//while(!U6STAbits.TRMT); //送信バッファーが空になるまで待つ
}
② 文字列を送信する関数です。 1バイト送信したら、ポインタを進めます。文字列の終端の\0を検出するまで繰り返し、1バイトづつ
文字列を送信します。
void WriteString(const char *str) //文字列送信関数
{
while(*str)
{
Write_Byte(*str); //データ送信
str++;
}
}
③ 文字列 "Hellow World !!" を送信して、"\r" で Carriage Return (復帰)して "\n" で Line Feed (改行)します。
//文字列送信
WriteString("Hellow World !!\r\n");
以下、app.c
■ system_interrupt.cに、以下のように青字部を追加します。 ① sprintf()に対してコンパイラのワーニングがでないように stdio.hをインクルードします。 #include "stdio.h" char Buf[17]; ② USARTモジュールのU6に受信割り込みが発生して、 受信データがある場合受信データを1バイト dataに読み込みます。 読み込んだデータの前に "data="を追加して WriteString()で返信します。 if (PLIB_USART_ReceiverDataIsAvailable(USART_ID_6)) //受信データ有の場合 //if(U6STAbits.URXDA == 1) //受信データ有の場合 //Receive buffer has data, at least one more character can be read { char data; data = PLIB_USART_ReceiverByteReceive(USART_ID_6); //受信データ読み込み //data = U6RXREG; //受信バッファ読み込み sprintf(Buf,"data=%c\r\n",data); WriteString(Buf); //文字列送信 } 以下、system_interrupt.c