STM32(nucleo)開発環境構築(PlatformIO+STM32CubeMX)

PlatformIOを利用したSTM32の開発環境を構築しましたので紹介します

使用しているマイコンボードはnucleo-G474RE、PCはWindows11です

なお、PCは今回新しく購入したものなので本当にまっさらな状態からの構築となります

PlatformIOは様々なプラットフォームに対応したビルド・デバッグ環境を簡単に構築することが出来るVSCodeの拡張機能です

また、今回構築した環境はシリアル通信などのマイコンペリフェラル設定をGUIで行えるSTM32CubeMXを組み合わせて使用することが出来ます

stm32pioを使用する方法について

PlatformIOとSTM32CubeMXを組み合わせる方法としてstm32pioというスクリプトを使う方法がよく知られていますがstm32pioは最終更新が2年以上前(2023年現在)で最新のCubeMXには対応していません

よって本記事ではstm32pioを使用しない方法を紹介します

ツール類のインストール

最初に以下ツール類をPCにインストールします

  • Visual Studio Code (VSCode)
  • PlatformIO IDE
  • STM32CubeMX

Visual Studio Code (VSCode)

もはや定番のMicrosoft謹製のエディタです

公式サイトからダウンロードします

日本語化やフォント、配色テーマの設定などはお好みで

コンテキストメニューのCodeで開くアクションは便利なのでとりあえず設定しておくことをおすすめします

PlatformIO IDE (VSCodeの拡張機能)

今回構築する開発環境の肝となるツールです

VSCodeの拡張機能から検索しインストールします

STM32CubeMX

STM32のコード生成ツールです

STMicroの公式ページからダウンロードします(メールアドレスの登録が必要です)

STM32CubeMXでプロジェクト作成

まずはSTM32CubeMXでコード生成を行います

今回使っているボードはnucleo-G474REなのでボード選択画面からデフォルトの設定でコード生成を行います

PlatformIOでプロジェクトを作成

次に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
2023.03.31追記

上記設定だけではnucleoのFPUが有効になりません

FPUを有効にする方法については以下記事を参照ください

【STM32(nucleo)】PlatformIOでFPUを有効化する方法

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といったマイコンの機能を組み合わせて構築するモータのベクトル制御のような高度な制御も比較的簡単に構築することが出来ます

【STM32(nucleo)】永久磁石同期モータ(PMSM)のエンコーダ付きベクトル制御のプログラム紹介(GitHubで公開中)【PlatformIO】

nucleoボードは比較的入手し易くてデバッガ(ST Link)も内蔵しているので実は敷居が低いです

皆様の良きnucleoライフの一助になれば幸いです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA