Ubuntu WSL2 で Segger Embedded Studio を動かすことを諦めて、VSCodeでやることにしました。STM32 VS Code Extension。
あと、ピンアサインやペリフェラルの初期設定、HALドライバというかライブラリの自動ダウンロードと、初期化コードとmain()テンプレートの作成をしてくれる STM32CubeMX。
それに ARM のクロスコンパイルをしてくれる arm-none-eabi-gcc か clang。ArchLinux では arm-none-eabi-gcc パッケージですが、Ubuntu だと gcc-arm-none-eabi パッケージになっているみたいです。
今気づいたけど、Windows上でクロスコンパイルをするなら mingw-w64 の GCC を使うことになるだろうから、やっぱり Ubuntu WSL2 上でやったほうがいいんだろうか。Linux 用の VSCode もあるわけだし。そういえば Visual Studio は 2017 あたりから Clang をサポートしているはずだけれど、こちらでクロスコンパイルはできるんだろうか。一応、WSL 用のバイナリは生成できるらしいけれど、アーキテクチャが違うとどうなんだろう。生粋の Clang なら、--target <triple> オプションで arm-v8-unknown-none-eabi などと指定すればよさそうだけれど。…と思ったら、ARM GCC Cross Compilation in Visual Studioなんていう記事がありました。これは GCC だけれど、たぶん Clang でもできるんだろうな。
と、それはさておき。
bare metal です、bare metal。ちなみにベアメタルは加工前のむき出しの金属みたいな意味。OS の皮を被っていませんので。
STmicro のサイトに VSCode 拡張機能の特設ページがあります。上でもちょっと触れましたが、STM32CubeMX と、binutils 的な STM32CubeCLT、それに STM32 VS Code Extension で構成すればいいようです。Extension のページの prerequisites には、CubeCLT は必須、CubeMX はあったほうがいいよ、的な感じ。ST-MCU-FINDER は MCU を比較選択するのに便利くらいな感じでしょうか。自分的には CubeMX は最高だと思います。ピンとペリフェラル、クロック設定をちょいちょいと選択して設定していくだけで、プロジェクトのスタートポイントが作成できるのは、bare metal 開発ではかなり楽ちんです。
まずは CubeCLT からインストールします。
ダウンロードして zip を展開し、インストーラを実行すると ST-Link のドライバをインストールするか聞いてくるので、ここはインストールしておきましょう。あとで J-Link 化するにしても。
インストールが終わると、ドライブルートに ST ディレクトリが作られ、その下に CMake やら Ninja やら GNU-tools-for-STM32 やらがインストールされています。Clang が使いたければ自分でビルドしたほうがいいのかしら…と、また脱線しちゃだめ。
次に STM32 VS Code Extension ですが、すでにいくつか拡張を組み込んでいてコンフリクトなど起こしても面倒なので、拡張機能を一旦まっさらにします。
%USERPROFILE%/.vscode/extensions を extetensions.bak などの名前に変更します。そして VSCode を起動したら、マーケットプレイスから STM32 Extension をインストールします。
インストールが終わったら、CubeMX でプロジェクトの雛形を生成します。
中央の New Project の列で、ACCESS TO BOARD SELECTOR をクリックし、評価ボード名の NUCLEO-L476RG を検索します。
選択したら右上の Start Project で設定を開始します。
ピンコンフィグは、USART_TX/RX と B1 、LD2 をデフォルトのままで、PH0-OSC_INと PH0-OSC_OUT を Reset State にします。
せっかく RTC 用に 32.768kHz の水晶振動子が搭載されているので、RTC ペリフェラルをアクティベートします。
次にクロックコンフィグで、左上のセレクタで LSE を選択します。
最後に Project Manager で、Toolchain / IDE のところを CMake にし、プロジェクト名とロケーションを設定してから右上の GENERATE CODE をクリックします。
そうしたら VSCode で、今作成したプロジェクトのディレクトリをインポートします。左側のチョウチョみたいなアイコンをクリックして、
Import CMake projectを選択します。
プロジェクトを開けました。
main.c は空っぽのままですが一応コード生成はできるので、いきなりデバッガを起動してみます。
GDBサーバが終了しちゃったので TERMINAL タブの出力を確認してください、というので見てみると、
Error in initializing ST-LINK device.
などと出力されていました。早速 ST-Link のアップデートのページでファームウェアをダウンロードしてアップデートします。ダウンロードした zip ファイルを展開すると、Windows フォルダに ST-LinkUpgrade.exe ファイルがあるので、これを実行します。
Device Connect ボタンを押すとバージョン情報が表示されるので、Yesボタンをクリック。ファームウェアのアップグレードができました。
さてそれではデバッグしてみましょう。
F5 キーを押すとビルドしてデバッガが動き、main() の最初のステップで停止します。
あとはもう、通常のデバッガ動作です。Continue、Step Over、Step Into、Step Out、Restart、Stop。左ペインにはVariableとWatchウィンドウがあります。
おお、これで VS Code でデバッグできますね。
0 件のコメント:
コメントを投稿