2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2019-07-03 STM32L476 > FreeRTOSでLチカ (環境: Ubuntu 18.04 LTS + STM32CubeMX + STM32CubeIDE)

Last updated at Posted at 2019-07-03
動作環境
Ubuntu 18.04 LTS
STM32CubeMX v5.2.1
STM32CubeIDE v1.0.1
FreeRTOS Kernel V10.0.1
基板:STM32L476RGT6 64 PINS

概要

Ubuntu 18.04 LTS > STM32L476 > 環境構築 (STM32CubeMX + STM32CubeIDE) + Lチカ || TrueStudioとの連携は失敗
ではRTOSなしでLチカをしたが、RTOSを用いるLチカを実施してみた。

参考

上記は2017年の記事で、自分の環境とはいくつか違う部分があった。FreeRTOSのバージョンの違いに起因するのだろうか?

実施

以下におおまかな流れを示す。一部、上記の @46sayu さんの手順を参考にしているが、自分の環境と異なる部分は適宜変更をした。

  1. STM32CubeIDEを起動する
  2. STM32Projectを新規作成する
  3. MCU/MPU Selectorにて「STM32L476RG」で検索 (Part Number Search)
  4. MCUs/MPUs Listにて「STM32L476RG」を選択しプロジェクトを作成
    • Project Name: 任意 (例: L476_RTOS_LedDrive_190703)
    • Next
    • Finishにてプロジェクト作成
  5. Pinoutにて「21(PA5)」をGPIO_Outputに変更
    • あとでこのピンをLチカする
  6. Pinout & Configurationにおいて左メニューの「MiddleWare」を選択
    • FREERTOSを選択
    • ModeのInterfaceを変更
      • DisableからCMSYS_V1へ
    • ConfigurationのTasks and Queuesを選択
    • TasksにてAddして、以下のように変更する
      • TaskName: LedTask (任意の名前)
      • Priority: osPriorityAboveNormal
      • Entry Function: StartLedTask (任意の名前)
    • OKを押してタスクを追加する
  7. Timerbase Sourceを変更する
    • Pinout & ConfigurationのCategoriesにてSystem Coreを選択
    • SYSを選択
    • Timerbase SourceをSysTickから変更 (理由は@46sayu さんの記事参照)
      • TIM17にしてみた
  8. File -> Save Allする
    • 「Do you want generate Code?」にてYesを選択
    • Src/にfreertos.cが追加される

以上でRTOSの準備はできた。

LEDタスク

Src/main.cの中にLedTaskがある。

main.c
void StartLedTask(void const * argument)
{
  /* USER CODE BEGIN StartLedTask */
  /* Infinite loop */
  for(;;)
  {
    osDelay(1);
  }
  /* USER CODE END StartLedTask */
}

上記を以下のようにする。

main.c
void StartLedTask(void const * argument)
{
  /* USER CODE BEGIN StartLedTask */
  /* Infinite loop */
  for(;;)
  {
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    osDelay(1000); // msec
  }
  /* USER CODE END StartLedTask */
}

1秒ごとのLED点灯、消灯になる。

ビルドから実行まで

  • `9 ビルドする
  • `10 Debug Asにて「STM32 MCU C/C++ Application」を選択する
  • `11 Edit configurationにてOKを押す
  • `12 デバッグ画面になるのでResumeを押して実行する

LD2という部分が1秒おきに点灯、消灯します。

実行例

緑色に点灯しているのがLD2です。

IMG_0898.JPG

所感

RTOSがこんなに簡単に使えるというのはすごい。

リンク

以下の記事の方が画像が多くわかりやすいかもです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?