teruノート

ROSでロボットとか。Ubuntuで困ったこととか。

中華STM32ボードをmbedオフライン環境で開発する

中華STMボード、Blue Pill、STM32duino…などと様々な呼び名があるようですが、とにかく安いSTM32ボードです。

Amazonで2個で1000円くらいです。Aliexpressなら1個$2を切ります。

https://wiki.stm32duino.com/images/thumb/1/19/STM32_Blue_Pill_top.jpg/700px-STM32_Blue_Pill_top.jpg

STM32マイコンは人気なので開発環境は多岐にわたります。紹介しきれないので割愛します…

個人的なオススメは、
mbedでプロジェクト作ってSW4STM32にエクスポートしてオフライン開発
です。

mbedライブラリを使うことですっきり書けます。ただオンラインIDEはたまにサーバーが死んでるのとデバッガ使えないので、SW4STM32を使うわけです。
mbedのアカウント作成やSW4STM32のインストールなどはほかに任せたいと思います。

中華STM32ボードをmbedオフライン環境で開発する 手順
1. mbedのオンラインコンパイラでプログラムをつくる
プラットフォームはNUCLEO-F103RBで、プログラム新規作成です。
2. SW4STM32にエクスポート
プログラムを右クリックでエクスポート、SW4STM32を指定します。
3. SW4STM32にインポート
File→ImportでExisting Projects into Workspaceを選びます。
f:id:ub2_memo:20190114003725p:plain
次の画面でSelect archive fileのところでエクスポートしたzipファイルを選択、下のFinishボタンでインポートできます。
f:id:ub2_memo:20190114004343p:plain
4. ビルドしてみてエラーが出たら修正
mbedのエクスポート機能は割と当てにならないので、ビルドしたらエラーだらけとかよくあります。 今回はこんな感じでリンカがエラー吐いてます。

undefined reference to `__wrap__free_r'  
...  
recipe for target 'BluePill_test-debug.elf' failed

Project→Properties→C/C++ Build→Settings→MCU G++ Linker→MiscellaneousにLinker flagsの設定があります。
-Wl,--wrap=main -Wl,--wrap=malloc_r -Wl,--wrap=free_r -Wl,--wrap=realloc_r -Wl,--wrap=calloc_r
こいつらが悪さしているので、こいつらだけ消します。 f:id:ub2_memo:20190114005151p:plain
5. 書き込み設定
書き込みにSTLinkV2つかうなら、Run configuration→Debugger→Generator options→Reset modeをSoftware system resetに変更しておきます。
シリアルブートローダーというか、ISPモードで書き込む場合はほかを参照してください。

以上で快適な中華STMボードの開発環境が整いました!