STM32CubeIDEでMbedを動かしてみる その1

STM32CubeIDEでMbedを動かしてみる その1

Mbedという開発環境をご存じでしょうか?

どんなものかご存じない方は こちら や こちらのサイト をご覧になってみてください。

クラウド上で開発ができるために開発環境を用意する必要がなく、お手軽に試すことができます。
便利ではありますが本格的にデバッグする場合にはかなり物足りなさを感じます。

というわけで今回からMbedのプロジェクトをSTM32CubeIDE上でデバッグできるように環境を構築してみます。

投稿時の開発環境を記しておきます。

PC:Windows10 OS
IDE: STM32CubeIDE Version1.1.0
Configurator: STM32CubeMX Version5.4.0
Board: STM32Nucleo-F401RE

Mbedのソースファイルをプロジェクトにコピーするだけではうまくいきません。
一筋縄ではいきませんけれど、IDE上でMbedを動かしてみたい方は最後までお付き合いください。

免責:
ネット上にSTM32CubeIDE上でMbedを動かす有益な情報が見つかりませんでした。
それではと思い、試行錯誤しながらMbedの一部のクラスの動作確認ができたので、その情報を公開します。ただし、こちらで動作を保証するものではありませんのでお使いになられる方の自己責任でお願いします。

準備:
こちらのサイトではNUCLEO-STM32F401REボードに関する説明を行ってきました。
今回も、このボードを使ってIDE上でMbedのプロジェクトを動かしてみます。

尚、Mbedには対応したボードが数多く存在します。
対応しているボードは こちら で確認することができます。
フィルター機能がついていて左側のチェックボックスをチェックすることで対応するボードを絞っていくことができます。
もちろんNUCLEO-STM32F401REボードも対応しているのでリスト上で確認することができます。
(Mbedではボードをプラットフォームと呼ぶこともあります)

まず一度Mbedのクラウド環境で、このボードを動かす必要があります。
そうすることにより後でプロジェクトをエクスポートする時に、このボード用のMbedソースをダウンロードすることができるようになります。

Mbedクラウド環境については こちら の記事を参考にしてください。

作業の概略説明

何をしているのかわからずに黙々と作業するのもつらいので概略の説明をしておきます。

コンパイル時に必要になるシンボルがたくさんあるのでエクスポートしてから読み込む(インポートする)とコンパイルエラーが格段に減ります。
というか、そうしないとエラーの嵐で挫折します(笑)
持ってくるMbedのソース自体がプロジェクトファイルになっていて、それを別のプロジェクトの一部に組み込むので、ファイルパスの設定を変更する必要があります。
また、元々プロジェクトファイルの構成になっているので、Mbedを組み込むメインのプロジェクトと重複する部分が出てきますから不要なものを削除する必要があります。

  • Mbedのプロジェクトをダウンロードする
  • MbedのプロジェクトをIDEで取り込めるように変換する
  • 取り込んだプロジェクトから設定をエクスポートする
  • Mbed用としてSTM32F401のプロジェクトを新規作成する
  • mbed-devフォルダをIDEのプロジェクトにコピーする
  • エクスポートした設定をインポートする
  • MbedのプロジェクトをSTM32F401のプロジェクトに加える
  • STM32F401のプロジェクトの環境を整える

Mbedのプロジェクトをダウンロードする

Mbedには Mbed OS2 と Mbed OS5 があります。OS2の方はすでにメンテナンスモードになっていますので、OS5の方をダウンロードします。
mbed-dev は Mbed OS2 であることに気がつきましたので訂正させて頂きます。

2020年3月現在、こちらのサイトから Mbed OS5 Mbed OS2 をダウンロードできます。

Repository toolbox の Export to desktop IDE を選択します。

Choose board で NUCLEO-F401RE を選択して

Choose toolchain で Sw4STM32 を選択します。

(2020年3月現在、STM32CubeIDEプロジェクト用のアーカイブは存在しないので Sw4STM32用のプロジェクトを変換して使う)

ボードをクラウド上で動かしてみないと Choose board にご希望のボードが出てこないかも知れませんのでご注意ください。

Exportボタンを押します。

ダウンロードしたファイルを IDEのワークスペースフォルダにおきます。
こちらの環境のワークスペースフォルダは ST/STM32CubeIDE/workspace_1.1.0 となっています。

mbed-dev_sw4stm32_NUCLEO_F401RE.zip

のように圧縮ファイルになっているので、同じワークスペースフォルダに解凍します。

ST/STM32CubeIDE/workspace_1.1.0/mbed-dev というフォルダが作成されるので確認しておきます。

MbedのプロジェクトをIDEで取り込めるように変換する

IDEを起動し Helpメニューの Information Center を選択します。

Import SW / TS project ボタンを押します。

Import sourse で Directoryボタンを押して mbed-dev フォルダを選択し Finish ボタンを押します。

Porject converter のウィンドウが2回出るのでそのまま OKボタンを押します。

取り込んだプロジェクトから設定をエクスポートする

Project Explorer で mbed-dev をクリックしてプロジェクトを選択し、Project – Properties を選択します。
C/C++ General – Paths and Symbols をクリックし、Includesタブを選択します。

その後 Export Settings ボタンを押します。

Export to file の Browseボタンを押して、workspace_1.1.0フォルダのところに mbed.xml として Export し Apply and Close します。

workspace_1.1.0フォルダに mbed.xml ファイルがつくられたことを確認しておきます。

Mbed用としてSTM32F401のプロジェクトを新規作成する

File – New – STM32 Project を選択します。
Board Selectorタブで NUCLEO-F401RE を選択し、Nextボタンを押します。
Project Name に F401mbedBase と入力し、Options の Targeted Language は C++ を選択し、Finishボタンを押します。(MbedではC++のクラスを使います)

Initialize all peripherals with their default Mode? と聞いてくるので Yesボタンを押します。

Project Explorer から F401mbedBase > Drivers > STM32F4xx_HAL_Driver を選択し 右クリックして Delete を選択します。

Are you sure you want to delete ‘STM32F4xx_HAL_Driver’ from the file system? と聞いてくるので OKボタンを押します。

(mbedのフォルダにSTM32F4xx_HAL_Driverが含まれているので削除する必要があります)

mbed-devフォルダをIDEのプロジェクトにコピーする

ウィンドウエクスプローラーを開いて STM32CubeIDE/workspace_1.1.0 を開いて mbed-dev を選択し、IDE の Project Explorer の F401mbedBase にドラッグ&ドロップします。
小窓が出るので、一番上の Copy files and folders を選択した状態で OKボタンを押します。

コピー後のプロジェクトツリーの様子

これで下にある mbed-dev プロジェクトは不要になるので削除します。
下の水色のIDEのアイコンがある方の mbed-dev を選択し、右クリックして Delete を選択します。

このプロジェクトは不要なので、チェックボックスにはチェックを入れて OKボタンを押します。

次にウィンドウエクスプローラーを開いて mbed-devフォルダ内 の不要なファイルを削除しておきます。
mbed-devフォルダ内の次のファイルを削除してください。

.cproject
.cproject_org
.mbed
.project
.project_org
GettingStarted.html
makefile.targets
mbed-dev Debug.launch
mbed-dev_converter.log

(注)拡張子 h の次の2つのヘッダファイルは削除しないようにしてください。

mbed.h
mbed_config.h

エクスポートした設定をインポートする

次に Project Explorer で F401mbedBase を選択し、Project – Properties を選択し、C/C++ General – Paths and Symbols を選択します。

Includesタブを選択し、Languages の GNU C 及び C++ のパスから以下の2つのパスを Delete しておきます。

Drivers/STM32F4xx_HAL_Driver/Inc
Drivers/STM32F4xx_HAL_Driver/Inc/Legacy

Includesタブを選択し、Import Settingsボタンを押し、Settings file – Browseボタンを押し、先ほど Export した workspace_1.1.0 フォルダのmbed.xmlを選択してFinishボタンを押します。

MbedのプロジェクトをSTM32F401のプロジェクトに加える

次に Project Explorer で F401mbedBase を選択し、Project – Properties を選択し、C/C++ General – Paths and Symbols を選択します。
Sourse Locationタブを選択し、Add Folderボタンを押し、mbed-dev フォルダを選択して OKボタンを押し Applyボタンを押します。

次に Includesタブを選択し、Path の変更を行います。
注:以下の設定は GNU C と GNU C++ の両方に対して行います。

Include directories リストで

usr/src/mbed-sdk を選択し Delete する

結構骨が折れる作業なので、コツを伝授します(笑)
先ほども言いましたが、ここからの作業は GNU C / GNU C++ の両方に対して行う必要があります。

mbed-devとは無関係な

Core/Inc
Drivers/CMSIS/Device/ST/STM32F4xx/Include
Drivers/CMSIS/Include

の3つのフォルダを Move Up ボタンでリストの一番上に持ってきます。
こんな感じで。

Editボタンを使って上に書いた3つのフォルダ以外のすべてのフォルダの最上位に mbed-dev を追加します。

例. リストの4番目の cmsis は mbed-dev/cmsis にします

この時 Is a workspace path にチェックを入れます。

この時に mbed-dev/ の部分をクリップボードにコピーしておきます。( mbed-dev/ を選択しておいて ctrl+c )

そしてOKボタンを押します。すると次のリスト項目の cmsis/TARGET_CORTEX_M にカーソルが移るので Editボタンを押します。

Change directory path の小窓が出るので cmsis/TARGET_CORTEX_M の先頭にカーソルをあてて ペースト( ctrl+v ) します。

mbed-dev/cmsis/TARGET_CORTEX_M となるので、 Is a workspace path にチェックを入れて OKボタンを押します。

これを次々と繰り返していきます。

終了したら mbed-dev フォルダもパスに追加する必要があるので、Addボタンを押して以下のようにして追加しておきます。

また Assembly ではパスの設定は不要なので Delete しておきます。
それぞれの言語についてパスを変更した後の様子を示しておきますので設定に間違いがないか確認しておいてください。

GNU C

GNU C++

Assembly

全ての設定を終えたら Apply and Close ボタンを押します。

Changes made will not be refilected in the index until it is rebuilt. Do you wish to rebuild ti now?

と聞いてくるので Yesボタンを押します。

少し長くなりましたので、この続きは次回にします。

Mbedカテゴリの最新記事