PlatformIO IDE + STM32 Nucleo で Arduino コードのデバッグをする


昨年の ET2019 の STMicro ブースでもらった STM32 Nucleo、開発環境のインストールめんどいなと放置していたら、PlatformIO から使えるんですね。。しかも Arduino でも mbed でも書けるし、デバッガもそのままで使えるしで、とても快適。

使った(もらった)ボードはNucleo F401REです。OS は macOS です。

プロジェクトのビルド

PIO Home で New Project の作成をします

  • Name: てきとう
  • Board: ST Nucleo F401RE (手持ちのボードに合わせてください)
  • Framework: Arduino (mbed とかも選択可能)

コードは適当に L チカなものを用意しました。

src/main.cpp
#include <Arduino.h>

unsigned int counter = 0;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  delay(100);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);

  counter++;
}

てっきり Nucleo = mbed で書かないとと思い込んでいたけど、Arduino なコードも動くんですね。

初回のビルドではコンパイラやらライブラリやらのダウンロードで数分かかるようです。

デバッガ

で、ここからが本番。
F401RE には STLink というデバッガが付属しているので、そのままでステップ実行とかできるんですね。

まず、platform.ini に debug_tool = stlink を追記します:

[env:nucleo_f401re]
platform = ststm32
board = nucleo_f401re
framework = arduino
debug_tool = stlink

そして先ほどのコードにブレークポイントを設定します(行番号をクリック):

この状態で デバッグ > デバッグの開始(もしくは F5)をすると、

なにやら見慣れないところで止まりました。とりあえずデバッグコンソールで c (continue) を入力してみましょう。

先ほどのブレークポイントで止まりました。やったね!

あとはステップインするなり、変数の値を見るなり、いつもの gdb のように使えます。

JTAG ICE を接続してデバッガをインストールして設定してー、と面倒な作業をせずとも、ふつーのプログラムのようにマウスぽちぽちでデバッグできて大変便利ですね。