ネクスティ エレクトロニクスの開発部隊による技術コラムになります。
当社取り扱い商材を活⽤したリファレンスボードを使ったソフトウェア開発の内容を発信します。
今回は当社で開発したSTマイクロエレクトロニクスリファレンスボード(以下、ST版リファレンスボード)を使⽤して、FreeRTOS搭載の簡単なマルチタスクソフトウェアを作成していきます。
概要
STマイクロエレクトロニクス製MCUは、同社が頒布している初期化コード⽣成ツール「STM32CubeMX」を使⽤することで、GUIでペリフェラルやミドルウェアの設定を簡単に⾏うことができます。
FreeRTOSは主に組込みシステム⽤のリアルタイムOSで、MITライセンスのオープンソースなため、商⽤・⾮商⽤でも無償で使⽤することができます。
本記事ではST版リファレンスボードに搭載されている4つのLEDを異なるタスクで動かすソフトウェアを作成します。
各LEDは以下のように点滅させます。
LED名 | トグル間隔 | タスク名 |
---|---|---|
LD1 | 500msec | defaultTask |
LD2 | 100msec | myTask2 |
LD3 | 1000msec | myTask3 |
LD4 | 2000msec | myTask4 |

必要なもの
今回紹介するソフトウェア開発で必要となるハードウェア、ソフトウェアと使⽤しているバージョンを以下に挙げます。
名前 | 用途 | 備考 | 画像 |
---|---|---|---|
ST版 リファレンス ボード | 使用ボード | 携帯MCU: ボード STM32H753XIH6 | ![]() |
i-jet | ファームウェア 書き込み用デバッガ | Ver: B | |
STM32CubeMX | 初期化コード生成 ツール | Ver: 6.12.1 | |
IAR EW for Arm | IDE | Ver: 9.30.1 |
STM32CubeMXでの操作
STM32CubeMXを使⽤してピン設定とFreeRTOSの設定をしていきます。
1.MCU選択
STM32CubeMXを起動すると、以下のような画⾯が表⽰されるので、「ACCESS TO MCU SELECTOR」をクリックします。
以下のような画⾯が表⽰されるので、「Commercial Part Number」にST版リファレンスボードに搭載されているMCU名「STM32H753XIH6」を⼊⼒します。すると右下部分のMCU候補が2つに絞られます。
表⽰された2つの候補の「STM32H753XIH6」の⽅をクリックして選択し、右上の「Start Project」ボタンをクリックします。
今回のソフトウェアではMPU(メモリ保護ユニット)を使⽤しないため、以下のようなメッセージボックスが表⽰される場合は、「Yes」をクリックします。
2.ピン設定
今回のハンズオンでは、ST版リファレンスボード上に実装されている4つのLEDを使⽤するので、これらを使⽤するためのピン設定をしていきましょう。
4つのLEDのピンは以下になります。
端⼦名 | Port |
---|---|
LD1 | PK3 |
LD2 | PK4 |
LD3 | PK5 |
LD4 | PK6 |
STM32CubeMXのPinout & Configurationタブが表⽰されているので、右下の検索テキストボックスに 「PK3」と⼊⼒します。するとテキストボックスの上の図でのPK3に対応するピンが点滅します。
点滅したピンをクリックすると、以下の図ようにプルダウンメニューが表⽰されるので、「GPIO_Output」をクリックし、GPIO出⼒設定にします。

PK4, PK5, PK6も同様に設定します。
3.FreeRTOSの追加・設定
続いて、FreeRTOSを追加・設定していきます。
STM32CubeMXの左側のペインの「Middleware and Software
Packs」をクリックし、その中の「FREERTOS」をクリックします。

すると、「FREERTOS Mode and Configuration」というペインが表⽰されます。今回はCMSIS V2インタフェースを使⽤しますので、Interfaceのプルダウンメニューをクリックし、「CMSIS_V2」を選択します。
4.タスクの追加
STM32CubeMXでは、FreeRTOSのタスク設定をGUIで⾏うことができます。今回はLED4つに対してそれぞれタスクを作成します。
STM32CubeMXの真ん中下のConfigurationペインのTasks and
Queuesタブをクリックします。
Tasksリストにはデフォルトで「defaultTask」というタスクのみがあるので、さらに3つのタスクを作成していきましょう。各タスクの設定(優先度、スタックサイズ等)は全てデフォルト値とします。
Tasksリストの下のAddボタンをクリックします。
NewTaskウィンドウが表⽰され、OKボタンをクリックすると、Tasksリストに「myTask02」が追加されます。ここで、Entry Functionの値(StartTask02)がタスク関数名となります。

同様に「myTask03」、「myTask04」を追加します。
5.タイマー設定
FreeRTOSではSystick以外のタイムベースの使⽤を推奨しているため、今回はTIM6を使⽤することにします。 STM32CubeMXの左側のペインの「System Core」をクリックし、その中の「SYS」をクリック、中央上部のペインのプルダウンメニューをクリックし、「TIM6」を選択します。

6.プロジェクトの設定、コード⽣成
続いてIDEで使⽤するプロジェクトの設定を⾏います。
STM32CubeMXの「Project Manager」タブをクリックし、Project
Nameに作成するプロジェクト名を、Project
Locationにプロジェクトを作成するディレクトリを⼊⼒します。ここでは、プロジェクト名を「st_pfp_rtos_sample」、Project
Locationを「C:\work\HMI_platform\st_board\rtos_for_blog」としています。今回はIDEとしてEWARMを使⽤するので、Toolchain
/ IDEをEWARMに設定します。その他項⽬はデフォルト値でOKです。 右上のGENERATE
CODEボタンをクリックすると、IDEのプロジェクトファイルとコードが⽣成されます。
IDE(EWARM)での操作
STM32CubeMXで⽣成したプロジェクトファイル、コードをIDE(EWARM)で操作します。
1.EWARMでプロジェクトを開く
STM32CubeMXのProject Managerタブで設定したディレクトリのEWARMフォルダを開き、その中のファイル「Project.eww」をダブルクリックします。 今回使⽤しているEWARMのバージョン9.30では、以下のメッセージウィンドウが表⽰されますので、「Yes」ボタンをクリックします。
2.タスク関数のコーディング
STM32CubeMXで⽣成したコードのタスク関数にLEDを点滅させる処理を追加していきます。 EWARMのワークスペースから、「main.c」をダブルクリックし、main.cを開きます。

main.cには、STM32CubeMXで設定したタスクの空関数(StartDefaultTask,StartTask2, StartTask3,StartTask4)があるので、各関数の無限ループ内に以下のようにLEDをトグルし、指定したミリ秒ウェイトする処理を追加します。
/* USER CODE BEGIN Header_StartDefaultTask */
/**
* @brief Function implementing the defaultTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN 5 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOK, GPIO_PIN_3);
osDelay(500);
}
/* USER CODE END 5 */
}
/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOK, GPIO_PIN_4);
osDelay(100);
}
/* USER CODE END StartTask02 */
}
/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the myTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void *argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOK, GPIO_PIN_5);
osDelay(1000);
}
/* USER CODE END StartTask03 */
}
/* USER CODE BEGIN Header_StartTask04 */
/**
* @brief Function implementing the myTask04 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask04 */
void StartTask04(void *argument)
{
/* USER CODE BEGIN StartTask04 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOK, GPIO_PIN_6);
osDelay(2000);
}
/* USER CODE END StartTask04 */
}
3.デバッガの設定
ファームウェア書き込み⽤のデバッガを設定します。
EWARMの「ワークスペース」ペインの「st_pfp_rtos_sample-st_pfp_rtos_sample」を右クリックし、プルダウンメニューの「オプション」をクリックします。

オプションウィンドウのカテゴリ「デバッガ」をクリックし、「設定」タブの「ドライバ」のプルダウンメニューで「I-jet」を選択します。
オプションウィンドウのカテゴリ「I-jet」をクリックし、「インタフェース」タブの「インタフェース」ラジオボタンで「SWD」を選択し、「OK」ボタンをクリックします。
4.ビルド、書き込み
ファームウェアのビルドを実⾏し、MCUに書き込みます。
ST版リファレンスボードとI-jetをSWD端⼦で接続し、PCとI-jetをUSBで接続します。
EWARMの「ダウンロードしてデバッグ」ボタンをクリックし、ファームウェアのビルドと書き込み、デバッガを起動します。

エラーが無ければデバッガが起動します。EWARMのデバッガメニューの「実⾏」ボタンをクリックし、プログラムを実⾏させます。

すると、ST版リファレンスボード上の4つのLEDがそれぞれ異なるタイミングで点滅することが確認できます。
おわりに
今回の記事ではST版リファレンスボードで動作するFreeRTOSを使⽤した簡単なマルチタスクのプログラムを作成しました。
STM32CubeMXを使⽤することにより、FreeRTOSのタスクの設定までGUI上で⾏えることがわかりました。
今後はFreeRTOSのキューやセマフォ等を使⽤したタスク間同期を⾏うプログラムを紹介していく予定です。
また、ネクスティ エレクトロニクスの開発部隊では、取り扱い商材を活⽤した⾃社開発、受託開発(ハードウェア、ソフトウェア開発)なども実施しております。
お客さまの困りごとの解決も含め寄り添って対応しますので、お気軽にお問合せください。
お問い合わせ
関連技術コラム
関連製品情報
ソフトウェア保護・暗号化とライセンシングソリューション
Wibu-SystemsのCodeMeterは、ソフトウェアの違法コピー対策、知的財産保護、収益化を強力に実現するソリューションです。
- Wibu-Systems株式会社
- ICT・インダストリアル
- スマートファクトリー・ロボティクス
- ソフトウェア
OSP (Open System Protocol) 概要
ams OSRAMのOSPは、車載LEDやセンサーを接続するための無料のオープンネットワーク技術です。車載のほかにもさまざまな用途で最適なシステムを実現します。
- エーエムエスオスラム
- NEXT Mobility
- ICT・インダストリアル
RF製品の電源供給にも使用できるほど低ノイズのスイッチング・レギュレーター
Silent Switcher 3は、低い低周波ノイズと高速な負荷応答特性を実現した最新のスイッチング・レギュレーター技術です。
- アナログ・デバイセズ
NXPの車載向けPMICの魅力を徹底解説 (Page 2/2) | NXPの車載PMICポートフォリオと代表製品の特徴を解説
車載ECUにおけるPMICの必要性とNXPの車載向けPMICの特徴、魅力、ポートフォリオについて、解説します。今回は車載PMICポートフォリオと代表製品の特徴です。
- NXP セミコンダクターズ
- NEXT Mobility
NXPの車載向けPMICの魅力を徹底解説 (Page 1/2) PMICの基礎、NXPの車載PMICの特徴
車載ECUにおけるPMICの必要性とNXPの車載向けPMICの特徴、魅力、ポートフォリオについて、解説します。今回は、 PMICの基礎、NXPの車載PMICの特徴です。
- NXP セミコンダクターズ
- NEXT Mobility
Qualcomm Automotive Connectivity Solution
Qualcommは、4G/5G、C-V2X、Wi-Fi、Bluetoothを活用した車載インフォテイメント向けの接続ソリューションを提供します。
- クアルコム
- NEXT Mobility
- ICT・インダストリアル
- スマートファクトリー・ロボティクス