こんにちは。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に文章を表示してみたいと思います。