STM32G4のビルド環境構築
普段は仕事でIAR workbenchを利用しているんですが、ちょっと家でもなんか作ってみようかなと思ったので、ビルド環境を整えてみました。
昔STM32F1の環境を利用していた時とは周辺環境が変わってきたので最初から再設定。
環境
昔利用していた環境はmacだったのですが、今の環境はwindows10 64bitです。
必要なソフトウェア
Visual studio code
azure.microsoft.com
昔はeclipse使ったりしていたのですが、エディタは今はこれです。
IAR利用しているときもdebug以外はこれでやっています。
STから提供されているcube-ideという全部いりのIDEもあるんですが、IDEはなんか重くて好きくないのでvscodeを利用していきます。
プラグインには下記を利用しています。
C/C++ for Visual Studio Code
debugにも別のプラグイン入れようと思っていますが、今回はビルド環境のみ。
GNU Arm Embedded Toolchain
developer.arm.com
コンパイラはGNU-ARMeclipse IARと違ってC++17にちゃんと対応しているのがとてもいいです。(IARはC++17対応とおもって飛びついたら標準ライブラリは未対応だったので悲しかった。)
STM32 CubeMx
https://www.st.com/ja/development-tools/stm32cubemx.html
マイコンの基本設定などはCubeMXを使っています。めちゃくちゃ便利で大好きですがある場所が設定できなかったりバグってたりしてたまにトラブりますが、それを加味しても好きだ。アップデートがあったらバグがつぶれていることを期待して必ず更新しています。
ビルドシステムにはmakeじゃなくてmesonというビルドシステムがあるみたいでlinux環境で使ってみてなかなかわかりやすかったので使ってみたかったが windwosでcrossでちゃんと動かす方法がわからなかったのでとりあえずcube-mxで出てくるmakefileを利用しようと思う。 ただ、cube-mxで編集後に吐き出したmakefileを都度編集するのがなんだかなって思ったのでそのうち使えるようにしてみたい。
make
www.msys2.org
makeを使えるようにmsys2をインストール後msys2を起動して
pacman -S mingw-w64-x86_64-make
でインストール。
環境変数の設定
環境変数のPATHに さっき落としてきたGNU Arm Embedded Toolchainを展開した中のbinフォルダを指定。
私はCドライブ直下にtoolsというフォルダを作って展開したので、
C:\tools\gcc-arm-none-eabi-9-2020-q2-update-win32\bin
makeを呼べるために
msysのpathを追加
C:\msys64\mingw64\bin
VSCodeでビルドできる環境の作成
CubeMxでProject Manager->Projectタブ内のToolChain/IDEをmakefileに設定してコード生成。
ワークスペースファイルの作成。
ディレクトリ内にvscodeのワークスペースファイルを作成。 stm32g474.code-workspace
{ "folders": [ { "name": "プロジェクト名", "path": "./" } ], "settings": { "window.zoomLevel": 0, "C_Cpp.clang_format_fallbackStyle": "google", "editor.formatOnSave": true }, "extensions": {} }
task.jsonの設定
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "mingw32-make all", "args": [], "group": "build", // Use the standard MS compiler pattern to detect errors, warnings and infos "problemMatcher": { "base": "$g++", "fileLocation": [ "relative", "${workspaceRoot}/build" ] } }, { "label": "clean", "type": "shell", "command": "mingw32-make clean", "args": [], "group": "build", // Use the standard MS compiler pattern to detect errors, warnings and infos "problemMatcher": { "base": "$g++", "fileLocation": [ "relative", "${workspaceRoot}/build" ] } } ] }
補完がきいてエディタでエラーが出ないように設定。
下記のようにc_cpp_properties.jsonを作成。
{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "${workspaceFolder}/Inc/**", "${workspaceFolder}/Drivers/CMSIS/Core/include/**", "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32G4xx/include**", "${workspaceFolder}/Drivers/CMSIS/include**", "${workspaceFolder}/Drivers/STM32G4xx_HAL_Driver/inc**" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE", "USE_FULL_LL_DRIVER", # ここから下はcubemxで作成されたmakefileからコピーしてきた。 "HSE_VALUE=24000000", "HSE_STARTUP_TIMEOUT=100", "LSE_STARTUP_TIMEOUT=5000", "LSE_VALUE=32768", "EXTERNAL_CLOCK_VALUE=12288000", "HSI_VALUE=16000000", "LSI_VALUE=32000", "VDD_VALUE=3300", "PREFETCH_ENABLE=0", "INSTRUCTION_CACHE_ENABLE=1", "DATA_CACHE_ENABLE=1", "STM32G474xx" ], "windowsSdkVersion": "10.0.17763.0", "compilerPath": "C:\\tools/gcc-arm-none-eabi-9-2020-q2-update-win32/bin/arm-none-eabi-g++.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-x64" } ], "version": 4 }
以上の設定が完了したら。 ctrl+shift+bでビルド候補が出てくるのでbuildを選べばbuild完了。