STM32CubeMXのmakefile出力でコンパイルをするための環境構築の仕方(Windows10)
こんばんわ。昨日、新型コロナのワクチンの2回目を受けましたが、朝から熱・頭痛・注射を打った手が痛いなどの副作用で一日中お布団の上から動けませんでした。体調が少しよくなったのでこの記事を書いている次第です。
今回は、STM32CubeMXのプロジェクト作成をmakefileで行いmakeでコンパイルができるようにするということをやっていきたいと思います。好きなエディタを使ってプログラムを書いてコンパイルができるようにすることができます。
makeのインストール方法としては、GNU Makeの公式からインストーラーを持ってくるか、MsysなどのWindows上で動作するUnixシェルを使うといった方法が複数あります。今回は、armのnone-eabi-gccのGNU Arm Embedded ToolchainをPCの環境にインストールしてパスを追加することで使えるようにするということをしていきます。
GNU Arm Embedded Toolchainのインストール
GNU Arm Embedded Toolchainで検索を行うと、arm Developerの公式のDownloadページを見つけることができます。最新版のtoolchainから使用しているPCの環境にあった実行ファイルをインストールしてください。
exeファイルを実行してインストールを行いましょう。インストール完了後に、いくつかチェックボックスが出てくるので、add to path と書いてあるチェックが入っていないチェックボックスがあるのでチェックをしてください。以上でarm-none-eabi-gccの導入は完了です。
MSYS2のインストール
MSYS2と検索を行うとMSYS2の公式サイトにアクセスができます。Installationに沿ってexeファイルをインストールしてダウンロードとコマンドを使用してパッケージを最新にすればOKです。
Installationの7番以降でwindows用のgccやツールチェインの一括インストールを行っていますが、Windowsのgccのコンパイル環境はいらないということであれば、makeやgitなどのほしいパッケージだけをインストールすればokです。MSYS2のインストール後のコマンドの例を以下に示します。
pacman -Syu
pacman -Su
pacman -S git
pacman -S make
続いて、MSYS2のパスを通していきます。Win+R のショートカットキーでファイルを指定して実行にsysdm.cplと打って実行をすることで、システムのプロパティを開くことができます。
詳細設定から環境変数を開いてください。Pathをダブルクリックして環境変数名の変更から参照をクリックするとGUIのファイルからフォルダの指定を行うことができます。MSYS2の標準のままインストールを行った場合は、C:\msys32\usr\binにプログラムの実行ファイルがおかれているのでこのフォルダにパスを通せば大丈夫です。
環境変数の追加の認識がしないときがあるため、完了したら一度再起動をしてください。
STM32CubeMXでプロジェクトの作成
私が過去に書いた記事は全てmakefileでコンパイルを行うようにしているので、適当な記事のSTM32CubeMXのGenerate前の設定を見てください。
コンパイルを行う
STM32CubeMXで出力をしたディレクトリにコマンドプロンプトやPowerShellで移動してmakeと打つことでコンパイルが始まると思います。STM32CubeMXのバグなのか、2回目以降にGenerateを行うとmakefileでコンパイルのエラーとなることがあります。
Makefile:134: *** 分離記号を欠いています. 中止.
このようなエラーが出た場合は134行目を確認すると\がないよというエラーなので半角スペースを入れた後にバックスペースを入れてあげればOKです。
私は、visual studio codeでターミナルを開いてコンパイルを行っています。setting.jsonにコンパイルのルールを設定することでmakeコマンドを叩かなくてもコンパイルができますが、私はプロジェクトごとに書くのが面倒なのでターミナルからたたいています。
日本語キーボードの場合は、Ctr + @でターミナルを開くことができます。
さいごに
OpenOCDを導入することでSTM32CUBEIDEと同じようにデバッグを行うこともできるので是非やってみてください。
この記事がほとんど画像なしになってしまい申し訳ないです。アンインストールしてインストールをし直せばいいのですが、環境構築をやり直すのが面倒だったため言葉だけで説明をさせていただきました。