LoginSignup
13
11

More than 3 years have passed since last update.

STM32CubeMX とPlatformIOでSTM32開発環境構築(NUCLEO-L432KCでLチカ)

Last updated at Posted at 2020-06-21

はじめに

Windows 10で、STM32CubeMXとPlatformIO(VSCode)を使って開発環境を構築します。

今までSTM32CubeMX+STM32CubeIDEで開発していましたが、PlatformIO(VSCode)でも同等の環境が構築できたと思います。
STM32の開発ではフレームワークとしてArduinoやMbedなども選べますが、消費電力を限界まで詰めたいようなケースではSTM32CubeMXでHALを使うのが便利かなと思っています。ArduinoやMbedと比べると情報が少なく、2020年6月現在日本語情報がほとんど見つからないので、PlatformIOのドキュメントを参考に環境構築した手順をまとめます。

STM32CubeMXのインストール

これは既にいろいろな情報がありますので詳細は省きます。
STM32CubeMX 5.6.1で動作を確認しました。
https://www.st.com/ja/development-tools/stm32cubemx.html
ダウンロード時にメール登録とVaridationが必要なのが少し面倒。

注意点1:インストールパス

デフォルトではc:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeMXにインストールされますが、後述するstm32pioがなぜかc:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMXへのインストールを前提に設定されています(しかもなぜか設定ファイルを書き換えても反映されない)。
今の所回避策がわからないので、STM32CubeMXのインストール時に以下のようにパスを設定します。
STM32CubeMX Installation Wizard  2020_06_21 12_34_33.png

注意点2:JREのインストール

インストール時にJRE 8が要求されますが、誘導されたページからそのままインストールすると32bit版がインストールされました。でもSTM32CubeMXを起動すると「JRE 8は32bit版ではなく64bit版を推奨します」と毎回しつこくメッセージが表示されます。(一応、無視して進めても今の所問題は起きてません・・・)

注意点3:MCU Packagesのインストール

Help→Manage embedded software packagesからSTM32L4用のパッケージをインストールします。
STM32CubeMX Untitled 2020_06_21 12_42_25.png
記事投稿時の最新版はSTM32Cube_FW_L4_V1.15.1ですが、最初に試したときV1.15.1をインストールしようとしたらエラーが出ました。再度別環境で試したときはすんなり入ったので原因はよくわかりません。最初V1.14.0を入れてからV1.15.0とV1.15.1を入れようとしたのが良くなかったのかもしれません。
エラーが出たときは以下の対処法で回避しました。

  • V1.14.0→素直にSTM32CubeMXで上の画面のInstall Nowからインストールできた。
  • V1.15.0→STMicroのWebサイトから直接Zipダウンロードして、上の画面のFrom local...でインストールできた。
  • V1.15.1→From local...でもエラーが出たので、ダウンロードしたzipを解凍してフォルダをSTM32Cube_FW_L4_V1.15.1にリネームし、C:\Users\(ユーザー名)\STM32Cube\Repository以下においたら認識された。意味がわからない。

STM32CubeMXでNUCLEO-L432KC用のプロジェクトを作る

他のボードやMCUでも手順は同じはずです。

  1. ACCESS TO BOARD SELECTORを選んで STM32CubeMX Untitled 2020_06_21 12_43_06.png
  2. NUCLEO-L432KCを検索、ダブルクリック STM32CubeMX Untitled 2020_06_21 12_43_55.png
  3. とりあえずNUCLEOボードに合わせたデフォルトペリフェラル設定を使います(Yes) STM32CubeMX Untitled 2020_06_21 12_44_10.png
  4. ピンとペリフェラルの設定(今回はデフォルトのまま使います) STM32CubeMX Untitled 2020_06_21 12_44_41.png
  5. Clock Configurationもデフォルトのまま
    STM32CubeMX Untitled 2020_06_21 12_44_46.png

  6. Project Managerで、プロジェクト名とパスを指定
    ★ Toolchain / IDEで「Other Toolchains (GPD)」を選択します。
    ★ プロジェクトのパスに日本語が含まれていると、後でstm32pioがエラーを出したので避ける。もしかしたら半角スペースも怪しい。
    STM32CubeMX Untitled 2020_06_21 12_48_32.png

  7. 左側のCode Generationをクリック、以下のように設定
    ★ Copy only the necessary library files
    ★ Generate peripheral initialization as a pair of ~~~
    STM32CubeMX Untitled 2020_06_21 12_48_35.png

  8. Toolsはそのまま、File→Save Projectで保存
    STM32CubeMX Untitled 2020_06_21 12_49_21.png

  9. 右上のGENERATE CODEをクリック
    STM32CubeMX Untitled 2020_06_21 12_50_19.png

  10. 成功するとプロジェクトフォルダは以下のようになる
    piotest 2020_06_21 12_50_55.png

Python、VSCode、PlatformIOのインストール

これもたくさん情報があるので詳細は省きます。以下のバージョンで確認しています。
・Python 3.7(Anaconda)
・Visual Studio Code 1.46.1
・PlatformIO 1.10.0
(VSCodeの拡張はPlatformIOとBracket Pair Colorizer 2とindent-rainbowとPythonを入れています。)

stm32pioのインストールとSTM32CubeMXが生成したプロジェクトの変換

STM32CubeMXで作ったプロジェクトをPlatformIO用に変換します。現状、以下の説明の通りstm32pioという変換ツールをかませる必要があります。
https://docs.platformio.org/en/latest/frameworks/stm32cube.html#using-with-stm32cubemx

At the moment there is no seamless integration with projects generated by STM32CubeMX tool. Instead, a small cross-platform Python application called stm32pio can be used to create and update PlatformIO projects from STM32CubeMX .ioc files. It uses STM32CubeMX to generate a HAL-framework-based code and alongside creates PlatformIO project with compatible parameters to stick them both together.

https://github.com/ussserrr/stm32pio
この説明に従いインストールします。

まずpip install stm32pioでインストールします。Anaconda Powershell Promptを使っています。
Anaconda Powershell Prompt (anaconda3) 2020_06_21 13_01_23.png

stm32pio.exeにパスが通っていることを確認し、適当なフォルダで以下を実行します。これはSTM32CubeMXが生成したプロジェクト(-dで指定したディレクトリ)をPlatformIO用に変換しているので、その場所がPlatformIOでそのまま使われます。

stm32pio new -d c:\work\stm\piotest\ -b nucleo_l432kc --start-editor=code --with-build

c:\work\stm\piotest\はSTM32CubeMXで作ったプロジェクトのフォルダ(.iocがあるところ)を指定します。

ここで注意すべき点が2つあり、
1. platformio.exeにパスが通っている必要があります。
2. STM32CubeMXのインストールパスに関する問題があります。
詳細は後述しますが、これらの問題を解決してstm32pioを実行し、成功すると以下のようになります。
Anaconda Powershell Prompt (anaconda3) 2020_06_21 13_12_20.png
初回は足りないパッケージをインストールするので時間がかかる。

成功するとVSCodeが勝手に立ち上がり、変換したプロジェクトをワークスペースに取り込んだ状態でPIO Homeが表示されます。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_12_34.png

注意点1:platformio.exeのパスを環境変数に設定 

stm32pioはplatformio.exeを呼び出します。
デフォルトではPATHが設定されていないので、C:\Users\(ユーザー名)\.platformio\penv\Scriptsを環境変数PATHに追加します。

注意点2:STM32CubeMXのインストールパスに関する問題 

stm32pioはSTM32CubeMXを呼び出します。STM32CubeMXのインストールにも書きましたが、Program Files (x86)以下にSTM32CubeMXがインストールされていると動かない(stm32pioはSTM32CubeMXがProgram Files以下にインストールされてると思っている)という意味不明な問題があります。C:\ProgramData\Anaconda3\Lib\site-packages\stm32pio\settings.pyを書き換えたら反映されそうなのですが、なぜか回避できませんでした。要調査。

Lチカ(Build, Upload, Debugger)

Src/gpio.cを確認し、LEDのピンが定義されていることを確認します。NUCLEO-L432KCの場合はLD3ピンです。当然ボードごとに異なります。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_18_24.png

Src/main.cのwhileループにLEDをトグルさせるコードを書きます。

main.c
    HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
    HAL_Delay(500);//ms

ちゃんとコード補完される。素晴らしい。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_19_28.png

完成。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_20_36.png

左側のタブからPlatformIOを選択し、正しくプロジェクトが認識されていれば以下のようにPROJECT TASKSが表示される。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_20_43.png

まずBuildをクリック。SUCCESS。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_20_58.png

次にUploadをクリック。。。エラーが出た。
PIO Home - piotest - Visual Studio Code 2020_06_21 13_22_04.png

ST-LINKのドライバが入ってないからでした。
デバイス マネージャー 2020_06_21 14_51_06.png

USBドライバをダウンロード。解凍してdpinst_amd64.exeでインストール。
ST-LINK_V2 - ST-LINK_V2 in-circuit debugger_programmer for STM8 and STM32 - STMicroelectronics - Mozilla Firefox 2020_06_21 14_53_18.png

認識された。
デバイス マネージャー 2020_06_21 14_55_31.png

再度Upload。SUCCESS。
PIO Home - piotest - Visual Studio Code 2020_06_21 14_55_45.png
この時点でLEDが光る。はず。

最後にデバッガを使ってみる。
main.cのHAL_Delayにブレークポイントをつけて、PLATFORMIOのタブからQUICK ACCESS→Debug→Start Debugging
PIO Home - piotest - Visual Studio Code 2020_06_21 14_58_13.png

最初はHAL_Initで停止する?みたい。▷Continue(F5)
PIO Home - piotest - Visual Studio Code 2020_06_21 14_58_39.png

▷Continue(F5)するとブレークポイントまで進んで停止した。
PIO Home - piotest - Visual Studio Code 2020_06_21 14_58_53.png

▷Continue(F5)するたびにLEDがON/OFFしていれば成功。
 

さいごに

デバッガまでたどり着きました。
これからADCやSPIを試してみたいと思いますが、今の所問題なくSTM32CubeIDEから移行できそう。よかったよかった。

13
11
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
13
11