見出し画像

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出版社の下記の書籍を参考にさせていただきました。


いいなと思ったら応援しよう!