かめら工房

ものを作ったり,写真撮ったり

オフラインでmbedが使いたい(STM32)

どうもお久しぶりです。かめらちゃんです。皆様いかがお過ごしでしょうか。

研究とかでSTM32使うことも多いのですが、皆が皆手軽に扱える代物ではないので、手軽にmbedを使って開発ができれば楽ちんですね。

ただmbed、オンラインでは手軽なんですけどオフラインではなかなか癖があるらしく、解説のブログ記事などがあまり見当たりません(探し方が悪いともいう)。

今回はみんな大好きSW4STM32

yuqlid.hatenablog.com

を使ったmbedオフラインコンパイルを紹介する記事にしたいと思います。SW4STM32のインストール自体はyuqlid君の記事内で書かれているのでインストールは済んでいるものとして進めていきます。

使用するマイコンは今手元にちょうどあったNUCLEO-F746ZGを使いたいと思います。

mbed、mbedと一口に言いますが、どうも最近は元々あったmbed 2.0とmbed OS 5という2つの使い方(?)があるそうなのですが、今回は元々のmbed 2.0を用いて作業環境構築を行いたいと思います。

[lang:ja] mbed OS 5に関する諸々 | mbed

mbedオンラインコンパイラ側でまずは適当なプロジェクトファイルを作ります。(このとき間違えてmbed OS 5のプロジェクトファイルを生成しないようにすること)。

f:id:ks7jistra:20170716180243p:plain


そのまま特にいじることなくプログラムワークスペースのプロジェクトで右クリック→プログラムのエクスポート(Ctrl+E)

f:id:ks7jistra:20170716180910p:plain

 

Export ToolchainをSW4STM32に合わせてExportし、適当な場所に解凍します。

f:id:ks7jistra:20170716180940p:plain

 

解凍したフォルダをsw4stm32でインポートします。

 

f:id:ks7jistra:20170716181023p:plain

f:id:ks7jistra:20170716181047p:plain

f:id:ks7jistra:20170716181114p:plain

インポートできたらプロジェクトのプロパティを開き、
C/C++ Build>Settingsへ移動します。
その中のMCU SettingsのFloating point hardwareがNo unitになっているので
fpv5-sp-d16に変更、
Floating-point ABIがsoftになっているのでsoftfpに変更します。

f:id:ks7jistra:20170716181152p:plain


そこまでできたらとりあえずDebugボタンを押してコンパイルします。
ちなみに失敗します。

するとこういうエラーが5件ほどでます。

f:id:ks7jistra:20170716181241p:plain

  • "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, RawSerial.h
  •  "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, Serial.h
  • "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, UARTSerial.h
  • "STM32_D11_SPI_ETHERNET_PIN" was not declared in this scope, PinNames.h

というエラーがでてきますので、RawSerial.h、Serial.h、UARTSerial.hの頭あたりに
#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 9600を追加してやります。PinNames.hのD11にエラーが出ているので、STM32_D11_SPI_ETHERNET_PINをPA_7に書き換えます。

これらは本来プロジェクトのmbedフォルダにあるtargets.jsonファイルに記述されており、そこから読み込まれるはずがSW4STM32が読み出してくれないので、直で書き直す必要があります。

変更を終えたら再びデバッグボタンを押すとエラーがなくなり、
コンパイルに成功します。

プロジェクト右クリック→Debug As→Debug Configuration
Ac6 STM32 DebuggingでNew launch configurationをクリックするとDebugもしくはRun設定が追加され、OpenOCDが実行されます。

f:id:ks7jistra:20170716181847p:plain

 

また、ボードをつないでおくと自動的にプログラムがダウンロードされ、記述したプログラムが実行されます。

おわり!!皆様よいmbedオフラインコンパイルライフを!!

 

ちなみに私はこのNucleoボードのEthernetポートが使いたいのでmbed RTOSを別途インポートする必要があるのですが、mbedRTOSをインポートした状態でオフラインコンパイルを行おうとするとエラーが頻出してまだうまく動かせてません。

うまく動かせるようになったら記事にします。

 

なお、mbed OS 5はもとよりRTOSが入ってますので、SW4STM32でやるとどうもエラーが出るので扱いませんでした。

こちらも解決したら記事にするつもりです。

 

それでは!