PlatformIOを利用したSTM32の開発環境を構築しましたので紹介します
使用しているマイコンボードはnucleo-G474RE、PCはWindows11です
なお、PCは今回新しく購入したものなので本当にまっさらな状態からの構築となります
PlatformIOは様々なプラットフォームに対応したビルド・デバッグ環境を簡単に構築することが出来るVSCodeの拡張機能です
また、今回構築した環境はシリアル通信などのマイコンペリフェラル設定をGUIで行えるSTM32CubeMXを組み合わせて使用することが出来ます
ツール類のインストール
最初に以下ツール類をPCにインストールします
- Visual Studio Code (VSCode)
- PlatformIO IDE
- STM32CubeMX
もはや定番のMicrosoft謹製のエディタです
公式サイトからダウンロードします
日本語化やフォント、配色テーマの設定などはお好みで
コンテキストメニューのCodeで開くアクションは便利なのでとりあえず設定しておくことをおすすめします

今回構築する開発環境の肝となるツールです
VSCodeの拡張機能から検索しインストールします

STM32のコード生成ツールです
STMicroの公式ページからダウンロードします(メールアドレスの登録が必要です)
STM32CubeMXでプロジェクト作成
まずはSTM32CubeMXでコード生成を行います
今回使っているボードはnucleo-G474REなのでボード選択画面からデフォルトの設定でコード生成を行います




PlatformIOでプロジェクトを作成
次にPlatformIOでプロジェクトを作成します


まず、CubeMXのプロジェクトフォルダにあるiocファイルをPlatformIOのプロジェクトフォルダにコピーして開きます
先ほど設定した内容が保持されていると思いますのでそのままコード生成を行います
次にplatform.iniファイルを開いてboard_build.ldscript、include_dir、src_dirの設定を記述します
記述例は以下の通りです
[env:nucleo_g474re]
platform = ststm32
board = nucleo_g474re
framework = stm32cube
board_build.ldscript = STM32G474RETX_FLASH.ld
[platformio]
include_dir = Core/Inc
src_dir = Core/Src
これで一通りの設定は完了です
実際の運用は下記の通り行います
- 再度コード生成を行う場合は普通にiocファイルを開いてコード生成すればOK
- ソースファイルはCore/Src内に作成する(srcフォルダは使用しないため削除してOK)
- インクルドファイルはCore/Inc内に作成する(includeフォルダは使用しないため削除してOK)
- 最初に作成したSTM32CubeMXのプロジェクト(testG474mx)は使用しないため削除してOK
Lチカコードでテスト
srcフォルダにコピーしたmain.cにLチカコードを記述します
Build実行後、PCにボードを接続してUploadを実行するとボードにLチカコードが書き込まれます
BuildやUploadは右上のボタンかステータスバーから実行することができます
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LPUART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(500);
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
}
/* USER CODE END 3 */
}

まとめ:STM32(nucleo)開発環境構築(PlatformIO+STM32CubeMX)
STM32の開発環境としてVSCodeの拡張機能であるPlatformIOとコード生成ツールのSTM32CubeMXを組み合わせた環境を具体的な構築方法を解説しました
STM32CubeMXを使用することが出来るので、ADCやPWMといったマイコンの機能を組み合わせて構築するモータのベクトル制御のような高度な制御も比較的簡単に構築することが出来ます

nucleoボードは比較的入手し易くてデバッガ(ST Link)も内蔵しているので実は敷居が低いです
皆様の良きnucleoライフの一助になれば幸いです