Shujima Blog

Apple製品,技術系の話をするブログ

【Nucleo入門】Nucleo-F401でUART通信(STM32CubeIDE、macOS版)

記事概要

本記事はSTM32 CubeIDEが公開されたことを記念して,STM32でUART版「Hello World」を作ります.

環境

  • STM32CubeIDE 1.0.0
  • macOS 10.14.5
  • NUCLEO-F401RE

STM32 CubeIDEについて(読まなくてもよい)

STM32 CubeIDEはSTM32用の統合開発環境です.

2019年4月にリリースされたものですが,実態はこれまでも存在し,広く使われていた「STM32CubeMX」,「SW4STM32」の2つのアプリケーションを統合したものです.

CubeMXはマイコンの設定を作成するためのアプリケーションです.

SW4STM32はプログラムを書いて実行するためのアプリケーションです.

これまではCubeMXで作った設定データをSW4STM32に取り込んで作る必要がありましたが,Cube IDEで統合されたため,とてもわかりやすくなりました.

まだネット上にはCubeIDEを使った記事は少ないため,CubeMXやSW4STM32を使った情報が多くあります.

調べる際には上記のワードも覚えておくとよいでしょう.

CubeMX,SW4STM32は今後アップデートされなくなるため,今から始める方はSTM32CubeIDEで練習するのがよいでしょう.

環境構築について

STM32 CubeIDEのインストール方法はこちらをご覧ください.

www.shujima.work

プロジェクトの作成

f:id:masa_flyu:20190524014332j:plain

STM32 CubeIDEを開いたら,

"File→New→STM32 Project"でプロジェクトを新規作成します.

f:id:masa_flyu:20190524014404j:plain

するとこんな感じのロードがはじまり,,

Target

f:id:masa_flyu:20190524015142j:plain

Target(対象とするマイコン)を選択する画面となります.

マイコンの名前を直接入力してもよいのですが,NUCLEOはあらかじめボードとして登録されています.

上のタブから「Board Selector」を選択します.

f:id:masa_flyu:20190524020036j:plain

「NUCLEO-F401RE」で検索

f:id:masa_flyu:20190524020037j:plain

出てきたマイコンを選択して,次へ

Setup

f:id:masa_flyu:20190524020447j:plain

プロジェクトの基本設定ウインドウが出てきます.

プロジェクト名を適当に入力してください.

他の設定はそのままで良いので,「Finish」を選択します.

f:id:masa_flyu:20190524020954j:plain

なんか出てきますが「Yes」でOKのはず.

f:id:masa_flyu:20190524021427j:plain

同じく.最初に旧CubeMXの画面で設定を行うので「Yes」でOKです.

CubeMX

CubeMXを使っていた人にはおなじみの画面が出てきます.

f:id:masa_flyu:20190524024257j:plain

今回この画面で必要な作業はありません

この画面は左メニューの「(プロジェクト名).ioc」を選択することでいつでも開くことができます.

STM32ではマイコンの周辺機能(Peripheral)を様々なピンに割り当てることができます(緑のピンは割り当て済み).

この画面で,タイマーなどマイコンの機能をピンに割り当てることで,設定や初期化の内容がプログラムに反映されます.

今後機能を増やしていく際にはこちらの画面でピンを設定して,プログラムを記述という作業を繰り返していくことになります.

UARTは最初から設定されている(USART2ペリフェラル)ので,今回この画面で必要な作業はありません.

f:id:masa_flyu:20190524025222j:plain

左の「Project Explorer」メニューから「main.c」を開きます.

作成完了

f:id:masa_flyu:20190524025237j:plain

これがmainプログラムです.

すでに自動生成された設定などが記述されています.

UART通信

プログラムを書く上での注意

f:id:masa_flyu:20190524030604j:plain

mainプログラムを下にスクロールすると,main()関数が見えてきます.

main関数の中もいろいろと記述済みですが,こちらを追記していきます.

その際に注意しなければならないのが「自分で書いたプログラムが勝手に削除される場合がある」ことです.

main.cはマイコンの設定に応じて自動で書き換えられますが,その際,「指定の場所」以外に書かれたプログラムは削除されていしまいます.

f:id:masa_flyu:20190524031522j:plain

必ず,

/*USER CODE BEGIN xxx */

/*USER CODE END xxx */

間に記述するようにしてください.

またこのコメントを消さないでください.

HAL_UART_Transmit()

それではようやく本題ですが,プログラムを編集していきます.

以下のように/USER CODE BEGIN WHILE /の中に2行追記します.

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_UART_Transmit( &huart2, "Hello UART\r\n", 13, 0xFFFF);
    HAL_Delay( 100 );
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

書き込み

編集が終わったら,書き込みを行います.USBケーブルでMacとNUCLEOを接続します.

f:id:masa_flyu:20190524033353j:plain

"Run→Debug"を選択すると,書き込みが始まります.

f:id:masa_flyu:20190524033547j:plain

初回のみ対象を選択する画面が出るので,「STM32 MCU C/C++ Application」を選択します.

f:id:masa_flyu:20190524034526j:plain

同じく初回のみ出てきます.OKを選択します.

しばらく待つと書き込みが終わるはずです.

f:id:masa_flyu:20190524040619j:plain プログラムが自動で実行されますが,すぐに停止し待機状態になります.

開始するには「Resume」を選択します.

macでUARTを見る

macのターミナルを開きます(terminal.app).

f:id:masa_flyu:20190524220806j:plain

ここにコマンドを2つ入力します.

f:id:masa_flyu:20190524220811j:plain

以下を入力します.

ls /dev/tty.usb*

f:id:masa_flyu:20190524220815j:plain

すると,「/dev/tty.usb....(数字)」という文字列が出力されます.

これが接続されているマイコンのシリアルポート名です.

このポートに対するシリアル通信を「screen」コマンドで行います.

f:id:masa_flyu:20190524220819j:plain

screen /dev/tty.usb.....xxxxxx 115200

を打ち込みます「.....xxxxxx」の部分は先ほど出力されたものを入力します.

f:id:masa_flyu:20190524220826j:plain

すると「Hello UART」の文字列が出力されます.

以上で完了です.

出力がされない場合は

  • プログラムが実行されているか

などを確認してください.

また,マイコンを抜き差ししたり,パソコンを再起動したりしてみるのも忘れないでください.自分の環境が悪いと決めつける前に.

参考文献

STM32 HALドライバー公式ドキュメント

当ブログをご利用いただく際には免責事項をお読みください。