タイトル通りで、2019年4月リリースのSTM32CubeIDEで、素早くFreeRTOSを動かしてみたよ!という記事です。
背景
いきなり本編を読みたい!って方はこちらからどうぞ
ボード購入まで
ここ10年くらいRTOSに触れる機会が多かったので、造詣を深めたく、
「評価用マイコンボードで色んなRTOSを動かしてみよう!」
と思いついたのがきっかけでありました。
でもって、Amazon FreeRTOS とやらが何となくトレンディ!に感じたので、対応ボード STM32L4 Discovery kit IoT node を購入しました(7,000円でお釣りが来るくらい)。
高機能なボードだった
買った後に気付くのも残念なのですが、それはもう色んな機能がてんこ盛りなボードなのでした。
クラウドって何?AWSって?IoTって?的な私はかなりの戸惑いを覚えたわけですが、
何はどうあれいったん動かす
ことを目標としました。
とりあえずAmazon FreeRTOSを動かす
ボードがまんま同じだったので、以下の Yutaka Kato 様のサイトをまんま参考にさせていただき(ありがとうございます!)、
AWS IoT画面にゴリゴリとHello Worldが届く
ところまで確認しました。
振り出しに戻る(戻す)
・・・どうやらAmazon FreeRTOSとやらはボードで動作しているようなのですが、
RTOS使ってLEDをチカチカさす
程度のことから始めたい私には、ものすごく仰々しかったのでした。泣
ということで、初心に帰りまして、本ボードに導入するRTOS(と開発環境)を選定することとしました。
やっぱりFreeRTOSだった
TOPPERSやT-Kernel等も調べましたが、
STMicroelectronics IDEで超簡単にFreeRTOSが動かせるらしい
ということを知り、本記事を書くに至ったのでありました。
本編
1. 環境
-
IDE: STM32CubeIDE
@usashirou 様の以下の記事前半に、インストール方法は記載されています。感謝。
https://qiita.com/usashirou/items/65be086c28f7a6feac7d -
評価用ボード: STM32L4 Discovery kit IoT node - 型番はB-L475E-IOT01A
STMicroelectronics製の他のボードでもOKかと。
2. やってみよう!
2-1. STM32プロジェクトを作る
STM32CubeIDEを起動し、以下のように辿ります(雑)。
「Target Selection」画面が表示されますので、「Board Selector」から自身のボードを選び、「Next」を押下します。
(私の場合は前述の「B-L475E-IOT01A」です)
「Project Name」に「FreeRTOS」とでも入力して「Finish」押下。
ダイアログが連発で出るので(雑)、「Yes」連打で、、、完成です!
2-2. FreeRTOS導入~タスク追加など
「Device Configuration Tool」(iocファイルが開いた状態)の左側、「Categories」から「Middleware」-「FREERTOS」をクリック。
一つ右側に「Mode」が出てくるので、ドロップダウンから「CMSYS_1」をクリック。
ここまででいったんFreeRTOSの導入は完了です。
2-2-1. タスク追加
「Configuration」にわらわらとタブが出てきますが、鬱陶しいので「Pinout」を隠すなどしておきます(画面は省略します)。
その後、「Mode」の下、「Configuration」の「Tasks and Queues」を選び、「Add」をクリック。
無事、myTask02が追加されました(見にくいので、ペインを最大化しています)。
2-2-2. 後処理
このままだとビルド時に怒られるので、Timebase Tickを変更します。
(ペインは最大化したままです)
「Categories」から「System Core」の「SYS」をクリック。
「Timebase Source」を「SysTick」から変更します。私は「TIM17」にしておきました。
2-2-3. コード生成
Ctrl+Sで変更を保存します。
すると以下画面が出るので、「Yes」押下でコード生成してやります。
2-3. タスクでLEDを点滅させてみる
上記の通り作成した場合、main.cにタスク関数StartTask02()が生成されます。
そのループ内に以下のコードを追加します(B-L475E-IOT01Aの場合)。
見ての通り、500msecおきにLEDをトグルするだけです。
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
osDelay(500);
2-4. いざ、ビルド!
「Project」-「Build All」またはCtrl+Bでビルドします。画面は省略。
エラーもワーニングもないことを確認してください。
HH:MM:SS Build Finished. 0 errors, 0 warnings. (took 8s.485ms)
2-5. いざ、実行!
(まずは、PCとターゲットボードを接続してから、、、)
「STM32 MCU C/C++ Application」として実行します。画像参照。
初回は、以下のような画面が出ますので、何も考えずに「OK」。
先頭で停止するので、F8押下、もしくは画面のボタンをクリック。
これでLEDが点滅するはずです!
おわりに
ツールの使い方9割ですが、とても簡単にFreeRTOSが導入できるのは素晴らしいかと思います!
また、どのベンダも下回りは自動生成にしてきてるなーと思ったり。昔気質のエンジニアには抵抗がありそうですが・・・。
次回も(Free)RTOS周りの記事を書く予定です。