PICマイコンでのシリアル出力をPCへ
PICマイコンでデバッグをするにあたり、PCへシリアル出力するのに苦労した記録。
環境
初めてのPICマイコンで用いたPIC18F57Q43 Curiosity Nanoボードおよびソフトウェア開発環境MPLAB X IDE。
ソースコード
シリアル経由でPCにprintf()の出力を行う単純なもの。
#include "mcc_generated_files/mcc.h"
void main(void)
{
int count = 0; // Add
SYSTEM_Initialize();
while (1)
{
// Add your application code
printf("count=%d\r\n", count++);
__delay_ms(2000);
}
}
なお、記事「PICのDelayの使い方について」によると、__delay_ms()の引数に、変数を指定できないらしい。
MPLAB X IDE
UART
シリアルを使うためには、MCC(MPLAB code configurator)のDevice Resourcesにて、UART1を選択する。選択前は下記。
選択後は下記となる。
ここで、「Redirect STDIO to UART」にチェックを付ける必要がある。
ピンアサイン
UART1を選択した初期状態では、Pin Modeにおいて、下記のようにRX(本ボードへの受信)しかアサインされていない。(このあたりは不親切なような感覚あり。)
本ボードのデータシートのよると、
PCと接続するには、DebuggerのCDCを用いる必要がある。今回の場合、PCへの出力となるので、「CDC RX(UART TX)」にピンアサインが必要。同じくデータシートによると、
「CDC RX」は「RF0」にアサインされているので、その設定を行う("Port F"の'0'の鍵マークをクリック)。結果として、下記のようになる。
クロックの調整(for __delay_ms())
上記のままBuildして動作させたところ、シリアル出力されるようにはなったが、設定したシリアル速度9600bpsでは正しく表示されず、PC側のターミナルソフトウェアで、4倍か4分の1の速度を設定すると、表示されていた。デフォルトでは下記のようなクロック設定であったが、
これを、下記のように、Oscillator SelectにHFINTOSCを選択すると、PC側の9600bps設定にて正しく表示された。
理由は調べておらず、、、であるが、HFINTOSCについては、「はじめてのPIC-2」などに説明がある。
結果
おまけ
MPLAB X IDEにて複数プロジェクトがあるときに、Buildなどの対象となるメインプロジェクトを選択するには、「Production」→「Set Main Project」→「対象とするプロジェクト」をクリックする。
終わりに
次こそ、デバッガを試す。