17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

STM32CubeIDEで速攻FreeRTOS

タイトル通りで、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. 環境

2. やってみよう!

2-1. STM32プロジェクトを作る

STM32CubeIDEを起動し、以下のように辿ります(雑)。
SnapCrab_STM32CubeIDE - STM32CubeIDE_2019-6-26_16-36-14_No-00.png

「Target Selection」画面が表示されますので、「Board Selector」から自身のボードを選び、「Next」を押下します。
(私の場合は前述の「B-L475E-IOT01A」です)
SnapCrab_Desktop_2019-7-1_8-21-58_No-00.png

「Project Name」に「FreeRTOS」とでも入力して「Finish」押下。
SnapCrab_STM32 Project_2019-7-1_8-24-0_No-00.png

ダイアログが連発で出るので(雑)、「Yes」連打で、、、完成です!
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_13-11-45_No-00.png

2-2. FreeRTOS導入~タスク追加など

「Device Configuration Tool」(iocファイルが開いた状態)の左側、「Categories」から「Middleware」-「FREERTOS」をクリック。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_13-13-58_No-00.png

一つ右側に「Mode」が出てくるので、ドロップダウンから「CMSYS_1」をクリック。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_8-47-11_No-00.png

ここまででいったんFreeRTOSの導入は完了です。

2-2-1. タスク追加

「Configuration」にわらわらとタブが出てきますが、鬱陶しいので「Pinout」を隠すなどしておきます(画面は省略します)。
その後、「Mode」の下、「Configuration」の「Tasks and Queues」を選び、「Add」をクリック。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_10-42-26_No-00.png

タスク追加画面ですが、特に何も考えず「OK」をクリック。
SnapCrab_New Task_2019-7-1_10-43-31_No-00.png

無事、myTask02が追加されました(見にくいので、ペインを最大化しています)。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_10-44-30_No-00.png

2-2-2. 後処理

このままだとビルド時に怒られるので、Timebase Tickを変更します。
(ペインは最大化したままです)
「Categories」から「System Core」の「SYS」をクリック。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_11-9-3_No-00.png

「Timebase Source」を「SysTick」から変更します。私は「TIM17」にしておきました。
SnapCrab_STM32CubeIDE - Device Configuration Tool - STM32CubeIDE_2019-7-1_11-16-24_No-00.png

2-2-3. コード生成

Ctrl+Sで変更を保存します。
すると以下画面が出るので、「Yes」押下でコード生成してやります。
SnapCrab_Question_2019-7-1_11-24-0_No-00.png

2-3. タスクでLEDを点滅させてみる

上記の通り作成した場合、main.cにタスク関数StartTask02()が生成されます。

そのループ内に以下のコードを追加します(B-L475E-IOT01Aの場合)。
見ての通り、500msecおきにLEDをトグルするだけです。

    HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
    osDelay(500);

一応画像は貼っておきます。
SnapCrab_STM32CubeIDE - FreeRTOSSrcmainc - STM32CubeIDE_2019-7-1_11-55-13_No-00.png

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」として実行します。画像参照。
SnapCrab_STM32CubeIDE - FreeRTOSSrcmainc - STM32CubeIDE_2019-7-1_11-57-14_No-00.png

初回は、以下のような画面が出ますので、何も考えずに「OK」。
SnapCrab_Edit Configuration_2019-7-1_12-54-53_No-00.png

先頭で停止するので、F8押下、もしくは画面のボタンをクリック。
SnapCrab_STM32CubeIDE - FreeRTOSSrcmainc - STM32CubeIDE_2019-7-1_12-55-26_No-00.png

これでLEDが点滅するはずです!

おわりに

ツールの使い方9割ですが、とても簡単にFreeRTOSが導入できるのは素晴らしいかと思います!

また、どのベンダも下回りは自動生成にしてきてるなーと思ったり。昔気質のエンジニアには抵抗がありそうですが・・・。

次回も(Free)RTOS周りの記事を書く予定です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
17
Help us understand the problem. What are the problem?