😽
STM32 Nucleo + FreeRTOS 開発環境構築
概要
NUCLEO-F103RBボードでFreeRTOSを使ったLED点滅プログラムを作成するまでの手順と、途中で発生した問題とその解決方法をまとめます。
ソースコード
使用部材・ソフトウェア
| 項目 | 内容 |
|---|---|
| ボード | NUCLEO-F103RB |
| MCU | STM32F103RBTx (ARM Cortex-M3) |
| IDE | STM32CubeIDE 2.0.0 |
| コード生成 | STM32CubeMX |
| OS | FreeRTOS (CMSIS_V2) |
手順
1. STM32CubeIDEのインストール
- STの公式サイトからダウンロード
- インストーラを実行
- ST-LINKドライバも一緒にインストール
2. ボードの接続
- NUCLEO-F103RBをUSB(Mini-B)でPCに接続
- デバイスマネージャーでST-Linkが認識されていることを確認
発生した問題と解決方法
問題1: .iocファイルが生成されない
症状
- CubeIDEでプロジェクトを作成してもGUIで設定ができる
.iocファイルが生成されませんでした。
原因
- STM32CubeIDE 2.0.0ではCubeMXが内蔵されていなかった?
解決方法
- STM32CubeMXを別途インストールしてCubeMXでプロジェクトを作成し、CubeIDEでプロジェクトの設定をしました。
セットアップ手順
1. STM32CubeMXでプロジェクト作成
- CubeMXを起動
- 「ACCESS TO BOARD SELECTOR」をクリック
- 検索欄に
NUCLEO-F103RBと入力 - 一覧から選択して「Start Project」
- 「Initialize all peripherals with their default Mode?」→ Yes
2. FreeRTOSの設定
- 左側の
Middleware and Software Packs→FREERTOSをクリック - 「Interface」を CMSIS_V2 に設定
3. タイムベースの変更
- 左側の
System Core→SYSをクリック - 「Timebase Source」を
SysTickから TIM4 に変更
これはHALとFreeRTOSが両方SysTickを使おうとして競合するため、HAL側を別タイマーにしています。
4. プロジェクト設定
- 「Project Manager」タブを開く
- 以下を設定:
- Project Name:
LED_FreeRTOS - Toolchain / IDE: STM32CubeIDE
- Project Name:
5. コード生成
- 「GENERATE CODE」をクリック
- 警告(USE_NEWLIB_REENTRANT)が出たら「Yes」で続行
6. CubeIDEでプロジェクトを開く
- STM32CubeIDEを起動
-
File→Open Projects from File System... - 生成されたプロジェクトフォルダを選択
LED点滅コードの作成
編集するファイル
LED_FreeRTOS
└── Core
└── Src
└── freertos.c
StartDefaultTask関数を編集
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN 5 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
osDelay(500);
}
/* USER CODE END 5 */
}
ビルドと実行
ビルド
-
Project→Build Project(またはCtrl + B) - 「Build Finished. 0 errors」と出れば成功
書き込み・実行
- Nucleoボードが接続されていることを確認
-
Run→Run(またはCtrl + F11) - 初回は「STM32 C/C++ Application」を選択
動作確認
- ボード上の緑色LED(LD2)が0.5秒間隔で点滅すれば成功です。
今後
- RTOSの学習をしたいと思っているので今後はアプリケーションとしてなにか作成したいです。
Discussion