STM32F401-Nucleoでシリアル通信をやってみる

ネットで調べると、STM32はUSART機能というものを使ってUART通信を行えるらしい。
UART通信はシリアル通信の一種とのこと。
なので、今回はSTM32F401-Nucleoでシリアル通信を行っていきたい。
STM32CubeIDEでシリアルモニタみたいなものがあるので、それに文字の表示を行う。

CubeMXでピンの設定を行う

最初にCubeMXでピンの設定を行う。

STM32ではUART通信を行うときは「USART_TX」と「USART_RX」というピンの設定を行わなければならない。


基本的に、Nucleoボードを使ってプロジェクトを作成したときは、デフォルトでこの設定が行われている。

なのでシリアル通信の速度の確認だけ行えばよい。

[Connectivity]→[USART2]→[Parameter Settings]から[Basic Parameters]の[Baud Rate]の速度を確認する。


デフォルトの設定は「115200 Bits/s」なのでこの数値を覚えておく。

main.cでプログラムを書いていく

main.c画面を開き、プログラムを書いていく。

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  char buf[] ="Hello World\r\n";
  HAL_UART_Transmit(&huart2,(uint8_t *)buf,sizeof(buf),0xffff);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

HAL_UART_TransmitはHALライブラリのUART通信を行うための関数である。

引数にUSART2なら&huart2、(uint8_t *) bufとsizeof(buf)で送信するのデータ型と長さ、0xffffでタイムアウトする時間を決めている。
0xffffにしているのは、過去に作ったのソースコードでは0xffffになっていたのでそうしている。普通に3000とかの数値でも問題ないと思う。

STM32CubeIDEのコンソール画面の設定を行う

このプログラムをデバッグすると「コンソール」にHello Worldと表示されるが、デフォルトの設定だと表示されないと思う。

なので、コンソール画面にシリアル通信の結果を表示するための設定を行う。

画面右下の「コンソールを開く」をクリックする。


「Command Shell Console」をクリックする。



Select Remote Connectionという画面が表示される。
接続タイプを「Serial Port」を選択する。
接続名の新規をクリックする。




New Serial Port Connection画面が開かれる。
接続名を適当に設定する。画像では「ターミナル」としている。
Serial portでSTM32ボードをつないでるCOMポートを選択する。
baud rateで速度の設定を行う。
ここでCubeMXで確認した「115200」になるように選択する。

設定が終わったら、「完了(F)」をクリックする。

Select Remote Connectionのエンコードを「UTF-8」に設定する。

「OK」をクリックする。

これでコンソール画面に「ターミナル」という画面設定が追加される。

コンソール画面の切り替えは画面右下の「選択されたコンソールの表示」をクリックすることで切り替えを行うことが出来る。


コンソールのターミナル画面で「Hello World」と表示されていないときは再度デバッグを行えば表示される。
「リファクタリング(T)」下の終了して再起動をクリックすれば、コンソール画面に「Hello World」と表示されるようになる。

TeraTermなどのターミナルエミュレータをダウンロードしなくても、このようにSTM32CubeIDEでシリアル通信の表示を行うことが出来る。

ネットで調べているとわざわざダウンロードを行っているので、めんどくさいこと行っているなぁと思う。







コメント

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401でLチカをする(LED点灯)