マイクロマウス研修(kora編)[22] STM32マイコンでLチカ


こんにちは。koraです。

前回、CubeMXでSTM32の初期化コードを作成しました。今回はそれを使ってLEDを点滅させます。

Lチカプログラムの作成

コードのインポート

CubeMXで生成したコードをSW4STM32にインポートします。

SW4STM32を起動して、FileメニューからImportをクリックします。

Existing Projects into Workspaceを選択してNextをクリックします。

Import Projectsウィンドウが開くので、Select root directoryのBrowseボタンをクリックして、CubeMXで生成したコードが入っているフォルダ(前回作成したblink_led)を選択します。

Import ProjectsウィンドウでFinishボタンをクリックすれば、インポートされます。
画面左側のProject Explorerにblink_ledプロジェクトが追加されているので、横の「>」をクリックして中身を開きます。Srcフォルダの下にmain.cファイルがあるので、ダブルクリックして画面中央のエディタに表示します。

Lチカコード追加

CubeMXで生成されたmain.cファイルには、次のようなループが書かれています。

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

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

/* USER CODE BEGIN ○○○ */ と /* USER CODE END ○○○ */ に挟まれている部分は、CubeMXで再度コードを生成したときに上書きされません。

なので、次のように書き加えます。

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

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);
    HAL_Delay(100);
  }
  /* USER CODE END 3 */

頭に「HAL_」とつく関数はSTM32の機能を使いやすいようにあらかじめ用意されたものです。(マニュアルはこちら
HAL_GPIO_TogglePin()はGPIO出力に設定されているピンのHigh/Lowを切り替えることができる関数です。LEDとつながっているGPIOのポート(GPIOC)とピン番号(GPIO_PIN_15)を指定します。
HAL_Delay()は指定した数字の分だけミリ秒単位で待機する関数です。上の例では100ms待機します。

ビルド

ProjectメニューからBuild Allをクリック、あるいはCtrl + Bでビルドします。問題なければ画面下部のコンソールにBuild Finishedと表示され、実行ファイルであるelfファイルが生成されます。

Lチカプログラムの実行

STM32マイコンへの書き込みには、CubeProgrammerを使用します。

CubeProgrammerのインストール

CubeProgrammerはSTM32にプログラムを書き込んだり、デバッグができるソフトウェアです。こちらのページからダウンロードします。
※最新版でないと新型のマイコンに書き込めないことがあります。今回はバージョン2.0.0をインストールしました。

接続&書き込み

USBシリアル変換モジュールとマウス基板を接続します。STM32F7は電源を入れる時orリセット時にマイコンのBOOTピンをHIGHにしていれば、書き込み可能になります。この基板では書き込みボタンを押しながら電源を入れます。

CubeProgrammerを起動して、接続方法としてUARTを選択し、「CONNECT」ボタンを押します。

接続に成功したら、画面左端の「↓」ボタンを押して「Erase&Programming」画面に切り替えます。次に「Browse」ボタンで先ほど生成した実行ファイルを選択して「Start Programming」ボタンで書き込みを開始します。

「Run after programming」がチェックされていると、書き込み完了と同時にLチカプログラムが実行され、LEDが点滅を始めます。

次回

次回は、シリアル通信でマイコンからPCに文章を表示してみたいと思います。


Posted in DCマウス研修