STM32マイコンのIoT実験で遊ぼう! その12 ~端末エミュレータと通信する2~
前回は、端末エミュレータ(Tera Term)の準備をしました。
今回は、ARM-Firstのプログラムから文字列を出力し、パソコン上で動作する端末エミュレータ(Tera Term)に表示します。
1.マイコンの設定
① 水晶発振子の設定
System Core からRCC を選び、右側のHigh Speed Clock(HSE) から「Crystal/Ceramic Resonator」を選択します。
水晶発振子につながるピンの色が変わります。
② USB機器の設定
USB機能を利用可能にします。
Connectivity のUSB_OTG_FS を選び、右側のModeから「Device_Only」を選びます。
USBにつながるピンの色が変わります。
③ USBデバイスの設定
パソコン上の端末エミュレータと通信するための設定を行います。
MIddleware and Software Packs のUSB_SEVICE を選び、右側の Class For FS IP から「Connumication Device Class (Virtual Port Com)」を選びます。
④ クロックの設定
Clock Configuration タグを選びます。
次の画面があらわれたら、「No」を選択します。
クロック設定画面に設定をおこないます。
1)水晶発振子の設定
ARM-Firstでは12MHzの水晶発振子が使われているので、12を入力します。
2)PLLの入力設定
PLLへの入力をHSEに設定します。
3)/Mの設定
/Mと書かれたドロップダウンリストから、/12を選びます。
4)/Pの設定
/Pと書かれたドロップダウンリストから、/4を選びます。
5)システム・クロックの選択
System Clock Mux から、一番下にあるPLLCLKを選択します。
6)APB1プリスケーラの設定
APB1 Prescaler を/2に設定します。
⑤ 割り込みコントローラNVICの確認
System Core から NVIC を選び、右側の一覧にある 「USB On The Go FS global interrupt」のところにチェックがあるかを確認し、Preempion Priority を1に設定します。
2.ソースプログラムの作成
次にプログラムのソースコードを自動生成します。
main.c が出来上がりました。
次のコードを追加します
このプログラムで使用する2つのヘッダファイルをインクルードしています。
使用する2つの変数を宣言しています。
変数 i はカウンタとして使います。
msgbuf はパソコンに送信するメッセージを格納します。
i = 0; whileのループ直前でカウンタを初期化しています。
HAL_Delay(1000); whileのループ直前で1秒間待っていますが、この処理がないと、なぜか最初に送信するメッセージが表示されません。
snprintf(msgbuf, sizeof(msgbuf),"USB:count=%d\r\n",++i); snprintf()関数でmsgbufにメッセージを作成しています。
CDC_Transmit_FS((uint8_t *)msgbuf, strlen(msgbuf)); 作成したメッセージをCDC_Transmit_FS()関数でUSB経由で送信しています。
HAL_Delay(1000); 送信後に1秒待っています。
3.ビルドの実行
成功!
エラーはありません。
4.マイコンへの書込み
ARM-First をパソコンに接続します。
STM32CubeProgrammer ツールで書込みます。
5.実行
端末エミュレータ(Tera Term)を起動します。
「シリアル」を選んで、ポートはARM-Firstと接続しているポートを選びます。
メッセージが送信されてきました!
1秒ごとにカウンタ値が送られてきます。
ARM-Firstをリセットすると、カウンタの値は1からリスタートします。
成功です!
(参考にした教材です)
CQ出版社の下記の書籍を参考にさせていただきました。