「PIC32MM0064GPL028 – MPLAB Code Configuratorを使ってTimer1の割り込みでLチカさせる。 –」の続き。
System Module は初期設定のままだ。
動作確認のLチカ用のピン設定をするが、もし隠れていたらこうやって窓を表示させることができる(※)。
設定したいピンを右クリックして、ここではoutputに設定する。
アナログ機能も持っているピンの場合は、チェックを外しておく。
ピンの設定については「MPLAB Code Configurator – ピン関連の設定をする窓 –」にまとめた。
Lチカとシリアル送信のタイミングはTimer1で取ろうと思うので、以下のように用意する。
今回の主題であるUART1も設定する。
こちらは初期設定のままだ。
この段階でシリアル通信に使うピンについてもPin Managerに表示される。
使うピンは下のようにカギをかけた状態にする。
これを参考に、U1RX(26ピン)をUSBシリアル変換モジュールのTXに、U1TX(25ピン)をUSBシリアル変換モジュールのRXに接続する。
TX – RX をそれぞれつなぐということだ。
Generateする。
Lチカ関連は以前にも書いたので省略する。
自動生成される uart1.c を眺めてみると、出力動作はこんな感じでやるらしいと分かる。
ここで初めてReference Manualに目を通すと、
UxSTAbits.UTXBF: Transmit Buffer Full Status bit (read-only)
1 = Transmit buffer is full
0 = Transmit buffer is not full, at least one more character can be written
UxTXREG: UARTx Transmit Register
This register provides the data to be transmitted.
などど書かれている。
とりあえずは、この関数を直接呼んでみる。
Timer1 の割り込み発生時に呼ばれる TMR1_CallBack(); 内に以下のように書いた。
赤枠内はいわゆるLチカだ。
青枠は「SAHARA」の6文字のアスキー・コードと、CRとLFのコードをUART1に送っている。
コンパイルして実行すると、USBシリアル変換モジュールを経て、PC上のターミナル・ソフトにちゃんと表示される。
上の設定のままなら1秒間隔で繰り返し「SAHARA」が表示されるわけだ。
相変わらず、拍子抜けするくらいに簡単だ。
下に示したような文字列を表示する関数を用意してみる。
この場合は下の赤線のようなコードを追加すれば、文字列を送信することが出来、若干実用的にはなる。
キー入力した文字のコードに1加えて返すだけの、よくあるシンプルな例なら、自動で生成される main.c の中の main() 内のwhileループの中に、
UART1_Write(UART1_Read()+1);
と書くだけでいい。
なお、文字を送る場合で速度を変えてみたら、MCCで設定可能な最高速度の460800bpsでも文字化けせずに送れた。
※
行方不明の窓を出す方法に関しては、MCCのバージョンが変わると設定方法が少し変わったりする。
v3.65では以下のものが役立ちそう。