STM32 PlatformIOでMbedをデバッグする

STM32 PlatformIOでMbedをデバッグする

今回は VSCode + PlatformIO IDE で Mbed を動かしてみました。

PC:Windows10 OS
Board: STM32Nucleo-F401RE
Visual Studio Code Version 1.47.2
PlatformIO IDE Version 1.10.0

概要

PlatformIOでは Mbedもサポートされているということで、Mbedが無事にデバッグできるのか動作確認してみました。

環境が構築できてさえいれば、確認作業にかかる時間はさほどでもありません。

とは言え、動作確認するクラスは以下の3つに絞りました。

DigitalOut , Serial , Ticker

環境構築がまだの方は STM32 PlatformIOでデバッグしてみる を参考にしてトライしてみてください。

プロジェクトを構築する

まず作業ディレクトリをつくります。
C:\の直下に pio というディレクトリを作成してください。

次に Visual Studio Code (VSCode) を起動します。
少し待つと PlatformIO も立ち上がってきます。

宇宙人きたぁ~

Quick Access の +New Project (赤枠部分)をクリックします。

Project Wizard で

Name : F401Mbed
Board : ST Nucleo F401RE
Framework: Mbed

としてその下の Use default location のチェックをはずし、その下の赤枠部分を作業ディレクトリの C:/PIO に変更し、右下の Finishボタンを押します。
Wizardが完了するまで、少し時間がかかります。

次に前回つくったプロジェクトをワークスペースから、はずしておきます。

左の EXPLORER の UNTITLED(WORKSPACE) から F401platformIO を右クリックし Remove Folder from Workspace を選択します。

コーディングする

WORKSPACE の F401Mbed >Src main.cpp をクリックし以下のコードを貼りつけます。

#include <mbed.h>

void interval();
void interval()
{
  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}

int main() {

  // put your setup code here, to run once:

  DigitalOut led(LED1);

  Serial s(SERIAL_TX, SERIAL_RX);
  s.baud(1200);

  Ticker t;
  t.attach(&interval, 1.0);

  while(1) {
    // put your main code here, to run repeatedly:
    HAL_Delay(1000);
    s.printf("abcde\r\n");
  }
}

貼り付けた後に Ctrl + Sキーを押してファイルを保存しておきます。

Run – Start Debugging を選択し、ビルドします。

パソコン側の設定を行う

Serialクラスを使ってデータを送信するので、パソコン側の設定を行います。

まずボードとPCをUSBケーブルでつないでおきます。

Tera Term を使います。Tera Term を立ち上げて、COMポートは STMicro STLink Virtual COM のポートを選択します。

次にボーレートを 1200bps に設定します。

プログラムを実行する

Start Debugging を選択したことで、以下のツールバーが画面上に出てきました。

左から2番目の ▶ ボタンを押すか F5キーを押すとプログラムが走ります。

左から
Continue (F5)
Step Over(F10)
Step Into(F11)
Step Out(Shift+F11)
ReStart (Ctrl+Shift+F5)
Stop (Shift+F5)
となっています。

緑色のLEDが点滅し、 abcde の文字列が Tera Term で1秒毎に表示されれば成功です。

ブレークポイントの設定やステップ実行などについても確認してみてください。

コードの概要

DigitalOutクラス:
GPIOポートで出力するクラスです。
コンストラクタでLチカするポートを指定します。

Tickerクラス:
インターバルタイマーで定期的な処理を行うためのクラスです。
attach()で第1引数に定期的に呼ばれる関数を指定します。
第2引数にインターバル(単位:sec)を指定します。

Serialクラス:
UARTを使ってシリアル通信するクラスです。
コンストラクタで第1引数に送信ポート、第2引数に受信ポートを指定します。
baud()で通信速度を指定します。

interval()関数が1秒周期で呼ばれ、HAL_GPIO_TogglePin()でLチカします。

while()ループでは

HAL_Delay(1000);
s.printf(“abcde\r\n”);

により1秒毎に abcde の文字列をシリアル出力します。

環境構築はさておき、Mbedを使うと初期設定は裏方さんがやってくれるのでかなり楽チンできます。

Mbedのバージョンを確認したところ 5.14.1 でした。そろそろ 6 が出る頃でしょうか。

Mbedを使って STM32 をデバッグされたい方は、ぜひお試しください。

PlatformIOカテゴリの最新記事