4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STM32の開発をVSCodeで行う

4
Posted at

混乱する情報

STM32 VS code extensionを使うと、IDEではなくVSCode上で開発が可能となる。
VSCodeが使えれば使い慣れた環境・プラグインが使えるうえ、Github Copilotが使えるのはアツい。
が、現時点(2026年5月31日)では公式HP ではVer 2.x についての説明がされているものの、リンク先のVS code extension マーケットプレイスでは最新はver 3.xとなっている。しかもネットではもっと古いバージョンの情報が見つかるため、環境構築に混乱が生じている1

Ver 3.xの機能

  • CMakeに対応(CubeIDEには依存しない)
  • Bundle Managerによるパッケージ管理
    • 必要なツールを自動で認識してダウンロード可能
    • ツール群のバージョン管理・更新の管理が可能
  • ST-LINK/J-Link を扱えるDAP(Debug Adapter Protocol)を実装
  • などなど

環境構築

必要なもの・不要なもの

必須

  • Windows/Mac/Linux
  • VSCode
  • STM32 Cube MX
  • STM32 VS code extension
  • C/C++ Extension Pack

公式の説明からは必要と言われているが実際は要らない(ハズ)のもの

  • STM32CubeProgrammer
    • ただしデバッグなしでの書き込みが可能等独自の機能もあるのでインストールは推奨
      (デバイスドライバーのインストールも行ってくれる)
  • STM32CubeCLT
    • "This replaces the all-in-one STM32CubeCLT package. 2"という記載があるため不要

昔は必要だったが今は要らないもの

  • STM32 Cube IDE
  • Arm Compiler
  • など

やり方

OSにVSCode、C/C++ Extension Packは入っている前提で進めます。

STM32 VS code extension

公式HPに行くと、VSCodeのマーケットプレイスが開くので「インストール」を押してインストール(ブラウザから、VSCodeを開いてよいか聞かれるのでOKを押す)

image.png

STM32 Cube MXのインストール

mySTアカウントの作成

https://www.st.comにアクセスし、mySTのアカウントを作成する。職種については、個人の場合 "Hobbyism" あたりを選んでおけば良いかと思います。(DIY勢でも肩身が狭くないのが素晴らしい)
image.png
このとき、アカウント名(メールアドレス)と、パスワードをひかえておくと良いです。

STM32 Cube MXのインストール

STM32CubeMXのページから、インストーラをダウンロードしインストールします。

テストプロジェクトの作成とビルド

STM32 VS code extensionは、プロジェクトを読み込み必要なツール群を自動ダウンロード&環境構築します。
なので動作確認のためにテストプロジェクトを作成し、ビルドできるかどうかを確認します。

STM32 Cube MXでプロジェクトを構成

STM32CubeMXを起動し、「New Project」から「Start My project from ST Board」をクリックします。
(お手持ちのSTM32マイコンやデバッガの環境があればそれに合わせてください)
image.png

ボード名を検索し、使いたいボードをダブルクリックで選びます。

image.png

ここはOKを押します。
(色々ダウンロード等が始まります)
image.png

GPIO等の設定画面が開きます。今回はテストプロジェクトのため特に設定は変更しません。

image.png

Project Managerから、保存先を設定します。
Browsで設定したフォルダに、プロジェクト名のフォルダが作成されて保存されます。
(なお、日本語を含むフォルダだとビルドがうまくいかなかった前例がありました)
VSCodeでの開発の場合は「Toolchain」を「CMake」に設定します。
image.png

コード生成の設定をします。「Copy only necessaly~」、「Generate Peripheral~」、「Keep User Code~」、「Delete Previously~」にチェックを入れます。設定が完了したら「GENERATECODE」をクリック。

  • Copy only necessaly~
    • HALの不要なコードをコピーしないことで消費容量やビルド時間の節約
  • Generate Peripheral~
    • HALコードをペリファル機能毎に分割
  • Keep User Code~
    • これをチェックしないと、GENERATE CODE時にmain.cに記載したコードなどが消えます
  • Delete Previously~
    • 再・生成時に不要となったコードを削除
      image.png

VSCodeでの開発とビルド

生成先のフォルダをVSCodeで開き、CMakeプロジェクトを正しく読み取れた場合、右下に「Configure discovered CMake project(s) as STM32Cube project(s)?」と出るのでYesを押します。初めて構築した環境では、様々なツールをインストールし始めます。都度都度許可を求められるのでYesを押してください。

image.png

プロジェクトの読み込みや環境構築が終了後、ビルドを実行するとビルドの設定を聞かれるので、ここでは「Debug」を選択しておきます。

image.png

何も無いプロジェクトのため、環境構築さえできていればコード0でビルドが終了。ビルドが通りリソーセスの消費量が表示されます。
image.png

デバッグ

ここではST-LINK経由でelfファイルを書き込み、デバッグを実行する方法を紹介します。

デバイスドライバーのインストール

STM32プラグインのインストーラからインストールします。
(STM32CubeProgrammerをインストール済みなら不要)
image.png

デバッガの構成

実行とデバッグから、launch.jsonを選択します。
image.png

STM32 Cube STM32 STLink GDB Serverを選択します
(使うデバッガの種類に合わせること)
image.png

launch.jsonが生成されるのでそのまま閉じます。
image.png

ボードの接続

ボードの電源を入れ、デバッガをPCに接続します。環境構築ができていればボードを認識します。
image.png
image.png

デバッグの実行

デバッグを実行すると再度ビルドが走り、デバッグがスタートします。本プロジェクトは空なのでそのまま止まります。デバッグ実行を確認できたら停止します。
image.png

Lチカの実行

普通であればmain.cのメインループにLEDの駆動を記載して終わりなのですが、せっかくのCMakeプロジェクトなのでフォルダを新設してコーディングしてみます。ループごとにフィボナッチ数の計算を行い、LEDの点滅回数とUARTの表示で通知する機能を実装します。

ペリフェラルの設定

GPIO(LED)

今回は、NUCLEO-F303K8を使うのでボードに搭載されたLEDが駆動できます。STM32CubeMXでPB3を出力に設定。ピンにLEDという名前を付けます。
image.png
image.png

UART

特に設定しなくても良いですが、普段115200bpsでモニタしているので統一しておきます。
image.png

コーディング

CubeMXのプロジェクトを保存し、GENERATE CODEを押してペリフェラルのコード変更を反映させます。

usercodesフォルダの作成&コードの追加

フィボナッチ数の計算と、LEDの点滅機能を受け持つfibonacci.c/fibonacci.hを./usercodesに作成します。

CMakeLists.txtの作成・編集

元々プロジェクトのルートディレクトリに存在するCMakeLists.txtに、./usercodesが存在することを記載します。

CMakeLists.txt
#Add original directory
add_subdirectory(usercodes)

また、./usercodesにもCMakeLists.txtが必要なので作成しておきます。
このフォルダ内のコードはビルドに加えるのみで、インクルードパスの追加は不要なのでこのぐらいの記載となっています。

./usercodes/CMakeLists.txt
file(GLOB USER_SOURCES
    "*.c"
)

target_sources(${CMAKE_PROJECT_NAME} PRIVATE
    ${USER_SOURCES}
)

fibonacci.c/fibonacci.h

普通にフィボナッチ数列の計算式を記載し、インクルードできるようにしておきます。

fibonacci.h
#ifndef __FIBONACCI_H__
#define __FIBONACCI_H__

#define ON_TIME     100
#define OFF_TIME    400

int fibonacci_blink(void);

#endif /* __FIBONACCI_H__ */
fibonacci.c
#include "fibonacci.h"
#include <gpio.h>

static int fn_1 = -1, fn_2 = -2;
static void blink_led(const int num);

int fibonacci_blink(void) {
    int fibo;
    if (fn_2 < 0) {
        fn_2 = 0;
        fibo = 0;
    }
    else if (fn_1 < 0) {
        fn_1 = 1;
        fibo = 1;
    }
    else {
        fibo = fn_1 + fn_2;
        fn_2  = fn_1;
        fn_1 = fibo;
    }
    blink_led(fibo);
    return fibo;
}


static void blink_led(const int num) {
    int i;
    for (i = 0; i < num; i++) {
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 1);
        HAL_Delay(ON_TIME);
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 0);
        HAL_Delay(OFF_TIME);
    }
}


main.c

文字の表示とフィボナッチ数の機能をインクルードして使えるようにします。
(長いので断片的に紹介します)

main.c
#include <stdio.h>
#include "../../usercodes/fibonacci.h"

stdio.hの文字表示機能を、UART経由で出力できるように関数を追加します。

main.c
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int __io_putchar(int ch){
    HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1 , 0xFFFF );
    return ch;
}
/* USER CODE END 0 *
main.c
int main(void)
{
  /* USER CODE BEGIN 1 */
  int n = 0;
  /* USER CODE END 1 */

作成したフィボナッチ数列計算関数を、printf内で呼び出します。

main.c
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    printf("%d,%d\n", n, fibonacci_blink());
    n++;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_Delay(2000);
  }
  /* USER CODE END 3 */

動作確認結果

正しく動作することが確認できました。
(LEDの点滅回数も確認)
image.png

まとめ

STM32をペリフェラル設定以外VSCode内に完結した環境で開発できました。gitやエージェントなど、使い慣れた拡張機能がそのまま使えるのは大きなメリットであることを改めて感じました。

  1. 必要と言われているものを片っ端から入れれば?という御意見はごもっともとだが、特殊な状況では、インストールするソフトにいちいち申請が必要なのである。

  2. https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?