STM32ファミリーのMCU搭載ボードをArduino化するための「コア」は多数存在する。コミュニティーベースで持続的な開発がされているもの、インディペンデントなもの、特定のボード向けなものなど様々である。そんなコアの総称としてSTM32Duinoと(Arduino for STM32と呼ばれる場合もある)と使われることが多いようだ。種類が多ければどれを使うべきなのか、何を選べばよいのか分からない。
そこで僕が知る範囲かつ主要なコアについてまとめてみる。各コアの具体的な情報などはいずれ別途まとめてみたいと思っています。

1. 総本山

幸いなことに各コア含む様々な情報が集まるコミュニティ(フォーラム)がある。
http://stm32duino.com/
ここをマメに見ていれば状況がつかめるになるであろう。各コアの開発者もここで互いに情報共有しているようだ。ここであまり名前が出てこないコアもあるけど、逆にそういういうコアは気にしなくて良いかもしれない。
この元々は、あとで説明するlibmapleコアから始まったコミュニティのようだ。

また付随するWikiもある。
http://wiki.stm32duino.com/
ボードの情報を探すのには良いかもしれない。(最近は更新頻度が下がっているので、かならずしも最新情報でない可能性があるので注意)

 

2. 主要な4つのコア

2-A. libmapleコア

かつてLeafLabs社が開発していたMapleシリーズの開発ボードとその開発環境が元になっている。開発環境はArduino IDEをフォークしたものだった。LeafLabs社が開発停止したとき全てオープン化されたため、それらを元にSTM32ファミリーで利用できるように、コミュニティーベースで開発されているのがこのコア。中心実物はRogerさん。氏はSTM32Duino全体のまとめ役的な役割も担っている。
MapleのコアのAPIがlibmapleと言い、それを踏襲して開発されているのでlibmapleコアと呼ばれている。

STM32Duinoコアの中では古い方なので安定度は高いと思う。F1、F3、F4に対応している事になっているが、現実的に開発されているのはF1のみで、それ以外は開発リソースが足りてないので暫定的な対応という感じ。(元々のMapleはF103RBT6とかF103RET6とかがターゲットだった)

2-A-1. 開発情報

libmapleコアのありかはここ。
https://github.com/rogerclarkmelbourne/Arduino_STM32

Arduino IDEへのインストールはボードマネージャーは利用していないので自前で行う必要がある。そういった情報はいかにまとめられている。
https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki
ここも役立つ。
http://wiki.stm32duino.com/

mapleシリーズのドキュメントもまだ公開されており、プログラミング的には必見。
http://docs.leaflabs.com/docs.leaflabs.com/index.html

Mapleの遺産としては、bootloaderの役割も大きいであろう。USB端子をシリアルポートと動作させ、かつMCUのみで”書き込み”/”実行”モードを自動的に変えることができるため、独自な開発ボードでなくともArduino的な使い方ができるから。
https://github.com/rogerclarkmelbourne/STM32duino-bootloader/
このbootloaderはF1シリーズ専用です。また、libmapleコアをF1で利用するからと言って必ずしもインストールする必要もありませんし、libmapleコアでしか使えないというわけでもありません。後述しますが他のコアでも使える場合があります。

2-A-2. 派生コア

F4もなんとかならないかという動きもあるにはある。(他のコアを使えというのが最近の潮流であるものの、)まだ形になっているものは無いのですが、Black F407VE専用に拡張している人がいて個人的に少し注目しています。
↓でソースなど公開されています。
https://github.com/stevstrong/Arduino_STM32
ただし、ここに全てリソースがまとまっているわけでないので、stm32duino.comの
http://stm32duino.com/viewforum.php?f=39
あたりを注意深く見るのが良さそうです。主に開発しているstevstrongさんの技術的探求という色が強いですが。F4系のパワーを活かすためベンチマークとりながら検証していたり、成果がF1にもフィードバックされたりしているので、今後が楽しみです。

 

2-B. STコア

STM32本家であるSTMicroelectronicsがメインになって開発しているコア。STM32 HALベース。コアとしては新しい部類。最新のHALを使い、よりArduinoマナーに則った形の実装とSTのリリースしている開発ボード(等)へ対応を目指しているようです。当初はF0、F1、F4、L4と別れており、STM32bootloaderやBluePill、MapleMiniへの対応もありましたが、現在は統合されて、デフォルトのターゲットボードもST製のもののみとなっています。また統合されてからは、更新頻度は高いです。CubeMXとか使って自前でボードを追加することもできます。(ためしたことないですが)。

2-B-1. 開発情報

メインの開発ソースはここ。
https://github.com/stm32duino/Arduino_Core_STM32
ライブラリ関係は、コアから切り離されたりしている場合もあるので
https://github.com/stm32duino
の他のレポジトリも見たほうが良いかも。使いそうなものだとSD用とかEthernet用とかのライブラリがあります。

インストールとかのドキュメント関係はここ↓。
https://github.com/stm32duino/wiki/wiki
自前でボードを追加する方法もありますね↓
https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-%28board%29

細かい情報は、stm32duino,comの
http://stm32duino.com/viewforum.php?f=48
を見ると良いのかな。不具合報告とか要望とかは、こっちを使ってということのようです。
http://stm32duino.com/viewforum.php?f=49

2-B-2. その他(蛇足情報)

Githubのアカウント名がstm32duinoなのでこれがSTM32Duinoだと誤解されがちだけど、元々Rogerさんが持っていたアカウントをSTに貸してるだけだそうです(実際メンバーにはSTの2人と氏の3人になってる)。もしかしたらST側はそういう意図があったのかもだけど。

といってもコミュニティベースでオープンな雰囲気で開発は進んでいるし、ある程度落ち着いてきて、他のたちも対応ライブラリ作ったりしてきたら楽しみなのではないかと思います。STとしては自前のボードの対応、自前のモジュール類の対応(Arduino向けライブラリの公開)とかが優先っぽいです。

2-C. GENERICコア

STM32 HALベースのコア。当初STコアのか初頻度が遅いので、HALを使ってST以外のボードも使えるような、より汎用(Generic)なコアということで開発されていると理解しています。といってもSTコアとはHALの使い方が違うようですが。安くてそれなり品質な中国ボードにも対応していたので当初注目してたんだけど、最近更新頻度が落ちている気もするので心配。

2-C-1. 開発情報

メインはここ
https://github.com/danieleff/STM32GENERIC
ドキュメント類もそこそこまとめられています。良心的。
https://danieleff.github.io/STM32GENERIC/

stm32duino.comではこのあたり。
http://stm32duino.com/viewforum.php?f=51

2-C-1. 派生コア?

最近、出てきたちょっと謎なGENERIC派生のコア。中国の人が開発しているらしく、またstm32duino.comとかとの絡みももないようなのと、ソースみると中国語でコメント入れているので、おそらくこのまま独自に突き進むののではないかと思われます。stm32duino.comの誰かが接触を図ろうともしているのなので、今後、本家GENERICにフィードバックされるのかなど非常に注目です。

開発ベージはここ↓
https://github.com/huaweiwx/STM32GENERIC
更新頻度は高そうです。

HALだけではなく、LL APIやStermWinに対応させているようです。 もう別物になってる気がしないでもないけど、オープンなんで他のコアに取り込まれることもあると思うので要注目。また中国系STM32系ボード(やTFT系のディスプレイモジュール)にも広く対応させているようです。AliExpressとかTaobaoばかり覗いている僕にしてみると興味津々w

少し試したところ、うまくビルドが通らなかったり、必要なヘッダーが無い場合があったりで、まだうまく動かせていないのだけど、動かせたら別記事にしてみたい。

2-D. Koduino

他のコアで対応してないようなボードをArduino化するというコンセプトと理解してたのですが、改めて調べてみたら汎用的な作りにはなっているようです。元々は専用ボードもあったっぽいのですが。
対応してるボード持ってないよなと思ってたんですが、pyBoardがF405なんで使えるかも?今度試してみようかな。実はコアとしてはF407にも対応しているようでボードの定義を作ってやれば使えるようです。

ベースはHALではなくてSPL(Standard Peripheral Libraries) のようです。またFTDIのUSBシリアルアダプターを使って接続した場合、NRSTをBOOT0につなぐことで、自動的にモードを切り替えることができるようにしているそうで便利そうです。

2-D-1. 技術情報

コア
https://github.com/avikde/koduino
更新頻度は高くないですが、開発は継続されているようです。

ドキュメント
http://avikde.me/koduino/html/index.html

 

3. まとめ?

F1系列ならlibmapleコア、NucleoとかDiscoveryとかのボードをターゲットにするならSTコア、それ以外ならGenericコアかな。リソース的に充実してるのは圧倒的にlibmapleコアだと思います。
自分でライブラリ作れるという場合はまあどれでもいんじゃん?って思うのですが僕みたいな素人にはライブラリの充実度は重要なので、libmapleコア。Blue Pill系ボードならコスパも良いし。

4. おまけ

STM8もArduino対応できないの?という要望はよく見かけるのですが、実際に使えるものはまだ無いようです。
しかし、
https://github.com/tenbaht/sduino
は、Arduinoライクに開発できるように作られているようです。開発者的には、Arduino IDEから使えるようにするつもりはあるようですので、今後が楽しみですね。8bitならAVRでもいいじゃんという意見もわかりますが、いろいろ選択肢が増えると面白いなと。

Share