😽

STM32 Nucleo + FreeRTOS 開発環境構築

に公開

概要

NUCLEO-F103RBボードでFreeRTOSを使ったLED点滅プログラムを作成するまでの手順と、途中で発生した問題とその解決方法をまとめます。


ソースコード

https://github.com/begengineer/STM32FreeRTOS

使用部材・ソフトウェア

項目 内容
ボード NUCLEO-F103RB
MCU STM32F103RBTx (ARM Cortex-M3)
IDE STM32CubeIDE 2.0.0
コード生成 STM32CubeMX
OS FreeRTOS (CMSIS_V2)

手順

1. STM32CubeIDEのインストール

  1. STの公式サイトからダウンロード
  2. インストーラを実行
    • ST-LINKドライバも一緒にインストール

2. ボードの接続

  1. NUCLEO-F103RBをUSB(Mini-B)でPCに接続
  2. デバイスマネージャーでST-Linkが認識されていることを確認

発生した問題と解決方法

問題1: .iocファイルが生成されない

症状

  • CubeIDEでプロジェクトを作成してもGUIで設定ができる.ioc ファイルが生成されませんでした。

原因

  • STM32CubeIDE 2.0.0ではCubeMXが内蔵されていなかった?

解決方法

  • STM32CubeMXを別途インストールしてCubeMXでプロジェクトを作成し、CubeIDEでプロジェクトの設定をしました。

セットアップ手順

1. STM32CubeMXでプロジェクト作成

  1. CubeMXを起動
  2. 「ACCESS TO BOARD SELECTOR」をクリック
  3. 検索欄に NUCLEO-F103RB と入力
  4. 一覧から選択して「Start Project」
  5. 「Initialize all peripherals with their default Mode?」→ Yes

2. FreeRTOSの設定

  1. 左側の Middleware and Software PacksFREERTOS をクリック
  2. 「Interface」を CMSIS_V2 に設定

3. タイムベースの変更

  1. 左側の System CoreSYS をクリック
  2. 「Timebase Source」を SysTick から TIM4 に変更

これはHALとFreeRTOSが両方SysTickを使おうとして競合するため、HAL側を別タイマーにしています。

4. プロジェクト設定

  1. 「Project Manager」タブを開く
  2. 以下を設定:
    • Project Name: LED_FreeRTOS
    • Toolchain / IDE: STM32CubeIDE

5. コード生成

  1. 「GENERATE CODE」をクリック
  2. 警告(USE_NEWLIB_REENTRANT)が出たら「Yes」で続行

6. CubeIDEでプロジェクトを開く

  1. STM32CubeIDEを起動
  2. FileOpen Projects from File System...
  3. 生成されたプロジェクトフォルダを選択

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 */
}

ビルドと実行

ビルド

  1. ProjectBuild Project(または Ctrl + B
  2. 「Build Finished. 0 errors」と出れば成功

書き込み・実行

  1. Nucleoボードが接続されていることを確認
  2. RunRun(または Ctrl + F11
  3. 初回は「STM32 C/C++ Application」を選択

動作確認

  • ボード上の緑色LED(LD2)が0.5秒間隔で点滅すれば成功です。

今後

  • RTOSの学習をしたいと思っているので今後はアプリケーションとしてなにか作成したいです。

Discussion