混乱する情報
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を押す)
STM32 Cube MXのインストール
mySTアカウントの作成
https://www.st.comにアクセスし、mySTのアカウントを作成する。職種については、個人の場合 "Hobbyism" あたりを選んでおけば良いかと思います。(DIY勢でも肩身が狭くないのが素晴らしい)

このとき、アカウント名(メールアドレス)と、パスワードをひかえておくと良いです。
STM32 Cube MXのインストール
STM32CubeMXのページから、インストーラをダウンロードしインストールします。
テストプロジェクトの作成とビルド
STM32 VS code extensionは、プロジェクトを読み込み必要なツール群を自動ダウンロード&環境構築します。
なので動作確認のためにテストプロジェクトを作成し、ビルドできるかどうかを確認します。
STM32 Cube MXでプロジェクトを構成
STM32CubeMXを起動し、「New Project」から「Start My project from ST Board」をクリックします。
(お手持ちのSTM32マイコンやデバッガの環境があればそれに合わせてください)

ボード名を検索し、使いたいボードをダブルクリックで選びます。
GPIO等の設定画面が開きます。今回はテストプロジェクトのため特に設定は変更しません。
Project Managerから、保存先を設定します。
Browsで設定したフォルダに、プロジェクト名のフォルダが作成されて保存されます。
(なお、日本語を含むフォルダだとビルドがうまくいかなかった前例がありました)
VSCodeでの開発の場合は「Toolchain」を「CMake」に設定します。

コード生成の設定をします。「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~
VSCodeでの開発とビルド
生成先のフォルダをVSCodeで開き、CMakeプロジェクトを正しく読み取れた場合、右下に「Configure discovered CMake project(s) as STM32Cube project(s)?」と出るのでYesを押します。初めて構築した環境では、様々なツールをインストールし始めます。都度都度許可を求められるのでYesを押してください。
プロジェクトの読み込みや環境構築が終了後、ビルドを実行するとビルドの設定を聞かれるので、ここでは「Debug」を選択しておきます。
何も無いプロジェクトのため、環境構築さえできていればコード0でビルドが終了。ビルドが通りリソーセスの消費量が表示されます。

デバッグ
ここではST-LINK経由でelfファイルを書き込み、デバッグを実行する方法を紹介します。
デバイスドライバーのインストール
STM32プラグインのインストーラからインストールします。
(STM32CubeProgrammerをインストール済みなら不要)

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

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


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

Lチカの実行
普通であればmain.cのメインループにLEDの駆動を記載して終わりなのですが、せっかくのCMakeプロジェクトなのでフォルダを新設してコーディングしてみます。ループごとにフィボナッチ数の計算を行い、LEDの点滅回数とUARTの表示で通知する機能を実装します。
ペリフェラルの設定
GPIO(LED)
今回は、NUCLEO-F303K8を使うのでボードに搭載されたLEDが駆動できます。STM32CubeMXでPB3を出力に設定。ピンにLEDという名前を付けます。


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

コーディング
CubeMXのプロジェクトを保存し、GENERATE CODEを押してペリフェラルのコード変更を反映させます。
usercodesフォルダの作成&コードの追加
フィボナッチ数の計算と、LEDの点滅機能を受け持つfibonacci.c/fibonacci.hを./usercodesに作成します。
CMakeLists.txtの作成・編集
元々プロジェクトのルートディレクトリに存在するCMakeLists.txtに、./usercodesが存在することを記載します。
#Add original directory
add_subdirectory(usercodes)
また、./usercodesにもCMakeLists.txtが必要なので作成しておきます。
このフォルダ内のコードはビルドに加えるのみで、インクルードパスの追加は不要なのでこのぐらいの記載となっています。
file(GLOB USER_SOURCES
"*.c"
)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
${USER_SOURCES}
)
fibonacci.c/fibonacci.h
普通にフィボナッチ数列の計算式を記載し、インクルードできるようにしておきます。
#ifndef __FIBONACCI_H__
#define __FIBONACCI_H__
#define ON_TIME 100
#define OFF_TIME 400
int fibonacci_blink(void);
#endif /* __FIBONACCI_H__ */
#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
文字の表示とフィボナッチ数の機能をインクルードして使えるようにします。
(長いので断片的に紹介します)
#include <stdio.h>
#include "../../usercodes/fibonacci.h"
stdio.hの文字表示機能を、UART経由で出力できるように関数を追加します。
/* 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 *
int main(void)
{
/* USER CODE BEGIN 1 */
int n = 0;
/* USER CODE END 1 */
作成したフィボナッチ数列計算関数を、printf内で呼び出します。
/* 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の点滅回数も確認)

まとめ
STM32をペリフェラル設定以外VSCode内に完結した環境で開発できました。gitやエージェントなど、使い慣れた拡張機能がそのまま使えるのは大きなメリットであることを改めて感じました。
-
必要と言われているものを片っ端から入れれば?という御意見はごもっともとだが、特殊な状況では、インストールするソフトにいちいち申請が必要なのである。 ↩
-
https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension ↩








