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

VSCodeで快適なSTM32開発を!【新しくなった STM32 VSCode Extension】

0
Last updated at Posted at 2026-05-15

コンセプト

  • VSCode で STM32 開発
  • C++ で書く
  • 自前のプログラムは main.c に書かず、src ディレクトリに分離

𝑫𝒆𝒑𝒆𝒏𝒅𝒆𝒏𝒄𝒊𝒆𝒔

  • STM32 CubeMX
  • VSCode
  • STM32 VSCode Extension v3.x

環境構築

CubeMX のインストール

こちらから
https://www.st.com/ja/development-tools/stm32cubemx.html

VSCode のインストール

こちらから
https://code.visualstudio.com/

STM32CubeIDE for VSCode のインストール

VSCode の拡張機能パネルで
STM32CubeIDE for Visual Studio Code
を検索してインストール

image.png

ST-Link USB ドライバのインストール

  1. VSCode の STM32CubeIDE パネルを開く
  2. ST-Link USB Drivers を選択

image.png

はじめよう

HAL の雛形を作成

  1. CubeMX でマイコンボード/自作基板の CubeMX プロジェクト (.ioc) を開きます (用意してください)
  2. Project Manager → ToolChain/IDE を CMake にします ← 重要❗
  3. 𝑮𝑬𝑵𝑬𝑹𝑨𝑻𝑬 𝑪𝑶𝑫𝑬 します

VSCode で開く

  1. 生成したプロジェクトを VSCode で開きます。

  2. STM32Cube プロジェクトとしてセットアップするか聞かれるので、Yes を押してください。
    image.png

  3. 構成を聞かれたら Debug を押してください。
    image.png

これで最低限の開発環境ができました。ここからはさらに快適を求めてプロジェクトを改造していきます。

プロジェクトを改造

C++ に対応

CMakeLists.txt に以下を追加します。

cmake_minimum_required(VERSION 3.22)

#
# This file is generated only once,
# and is not re-generated if converter is called multiple times.
#
# User is free to modify the file as much as necessary
#

# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

+ # 追加: C++ を有効化・設定
+ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)

# Define the build type
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Debug")
endif()

# Set the project name
set(CMAKE_PROJECT_NAME DRC-CCTL2026)

# Enable compile command to ease indexing with e.g. clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)

# Core project settings
project(${CMAKE_PROJECT_NAME})
message("Build type: " ${CMAKE_BUILD_TYPE})

- # Enable CMake support for ASM and C languages
- enable_language(C ASM)
+ # 追加: C++ の .cpp ファイルもビルド対象にする
+ enable_language(C CXX ASM)

# Create an executable object type
add_executable(${CMAKE_PROJECT_NAME})

# Add STM32CubeMX generated sources
add_subdirectory(cmake/stm32cubemx)

# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user defined library search paths
)

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user sources here
+    # 追加: 自前のコードをビルド対象にする
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/app.cpp
)

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
+    # 追加: src をインクルードパスに追加
+    ${CMAKE_CURRENT_SOURCE_DIR}/src
)

# Add project symbols (macros)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user defined symbols
)

# Remove wrong libob.a library dependency when using cpp files
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob)

# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}
    stm32cubemx

    # Add user defined libraries
)

src ディレクトリを作成

main.c の USER CODE BEGIN/END の間に書くのが嫌なので、main.c の変更は最小限にして、メインのソースコードを app.cpp に分離します。
app.cpp と app.h を追加します。

 .
 ├── cmake
 ├── Core
 ├── Drivers
+└── src/
+    ├── app.cpp
+    └── app.h

app.h に以下を追加

app.h
#ifdef __cplusplus
extern "C" {
#endif

void setup();
void loop();

#ifdef __cplusplus
}
#endif

app.cpp に以下を追加

app.cpp
#include "main.h"
#include "app.h"

extern "C" void setup() {
    // Initialize your application here
}

extern "C" void loop() {
    // Main application loop
    HAL_GPIO_TogglePin(LED_BI_GPIO_Port, LED_BI_Pin);
    HAL_Delay(500);
}

main.c に以下を追加

main.c
/* USER CODE BEGIN Includes */
+ #include "app.h"
/* USER CODE END Includes */

// 中略

  /* USER CODE BEGIN Init */
+  setup();
  /* USER CODE END Init */

// 中略

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
+    loop();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

src にファイルを追加したいとき

src に 以下のようにモジュールを生やして app.cpp から include することは可能ですが、その際に CMakeLists.txt の target_sources に追加した cpp ファイルを足す必要があります。

.
└── src/
    ├── app.cpp
    ├── app.h
+   ├── buzzer.cpp
+   ├── buzzer.h
+   ├── lcd.cpp
+   └── lcd.h
CMakeLists.txt
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
    # 追加: C++のコードをビルド対象にする
+   ${CMAKE_CURRENT_SOURCE_DIR}/src/lcd.cpp
+   ${CMAKE_CURRENT_SOURCE_DIR}/src/buzzer.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/app.cpp
)

ビルド・書き込み

  1. 基板を用意します
  2. STLINK で繋ぎます
  3. VSCode で "実行とデバッグ" (Ctrl+Shift+D) パネルを開いて、実行とデバッグを押します。
    image.png
  4. デバッガーは STM32Cube: STM32 Launch STLink GDB Server を選択します。
    image.png
  5. ビルドが走り、プログラムが書き込まれて以下の画面になります。
    HAL_Init(); で一時停止しているので、上の続行 > ボタンを押して続行してください。プログラムが動作を始めます。
    image.png

実行でエラーになるとき

image.png

実行で↑のようなエラーになるときは、プロジェクトのセットアップをやり直してください。

  1. STM32Cube パネルから Set Up STM32Cube project(s) を選択
    image.png
  2. Configure を押す
    image.png
  3. 構成を聞かれたら Debug を選択
    image.png

開発フロー

  1. CubeMX プロジェクトを作ったら、この記事の手順でセットアップ
  2. プログラムを書く
  3. ST-Link をつないで実行とデバッグ (F5) でビルド・書き込み
  4. プログラムを変えたら、 Shift+F5 でデバッグを停止してから、再び F5 で再ビルド・書き込み

資料

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