最終更新日 2021年6月8日
今更ですが、STM32duinoについて思うことを綴ります。
STM32duinoとは Arduino IDEでSTM32ボードを使用することに関するすべて を纏めて STM32duino と称しているようです。この表現からすると、STマイクロエレクトロニクス社の32bitCPUが搭載されたCPUボードであればすべてが対象のようですが、実際にはサポートしているCPUは限られます。
STM32duinoは Arduino IDE にSTM32duinoサポートパッケージをインストール必要があります。現在の最終版は R20170323 です。https://github.com/stm32duino/Arduino_Core_STM32 を確認して対象CPU/ボードを把握する必要があります。
なぜ Arduino では無く STM32duino なのかを明確にしておかないとこのスレッドは意味をなしません。単にSTM32chipが使いたいだけであるならSTマイクロエレクトロニクス社は専用開発環境を提供しています。
現時点でArduinoに主に採用されているMPU=AVRは安価であり、互換機も出回って互換ボード自体もとても安価です。しかし、AVRchipの枠で賄えるプロジェクトも限界があります。クロックがより高速である必要があったり、IO点数がより大きい必要があったり、特別な機能を備えている必要があったりします。
一方STM32chipは32bit環境で、chip単価はAVRより安かったりします。chip仕様のバラエティもあり、最適な環境が選べます。その反面開発環境としてはArduinoIDEが多くのユーザを抱え、世界的な普及度合いは目を見張るモノがあり、ArduinoIDE環境下でSTM32chip/ボードを使いたいとユーザに答えたのか、先人ユーザによって STM32duino が立ち上がったようです。
※STAR Ottoという正規プロジェクト(2016/05)が立ち上がったのにいつの間にか転けたのが切掛なのかもしれません。
https://community.st.com/thread/34583-what-happened-to-arduino-star-ottoカナダのLeafLabs社がリリースしたMaple miniを利用するためにMaple IDEをリリースしており、これが異なったアーキテクチャなのに使い勝手がほとんど同じだったことが起因しているということもあります。また、Maple miniの情報公開をしているため、セカンドソースがたくさんリリースされ STM32duino の弾みになったとも云われているようです。
※LeafLabs社は存続していますが、Maple miniはdisconです。
2018/9/4追記
可成り前から判ったことですが、STM32F1xxにはEEPROMがありません。
EtherNetShieldの項で記載したMACアドレスをEEPROMに書き込んで扱うという処理を、BluePillに対して実行したのですが、実現出来てしまうことが判っています。
もちろんSTM32duinoでEthernetモジュールが普通に使えることも重要なのですが、ArduinoのライブラリEEPROM.hがエミュレートされ、STM32duinoで実現出来ていることにちょっと感動しています。
※Arduino for STM32のフォーラムで話題になった過去があります。このことから、UNO辺りであればBluePillに置き換えて STM32duino で実現するのは現実的な展開かもしれません。
- 高速なClock
- SPIもより高速な通信が可能で、NICの高速通信も期待できます。
- SRAMもMEGA並に扱えます。
- RTCも内蔵しています。※ただ、内蔵RTCは精度が悪いみたいです。DS3231を利用した方がよさそう。
2019/3/6更新
本気でBluePillへの置き換えを試し始めました。
単純なコードは殆どSTM32duinoでビルド出来ます。ただ、外部IOを伴うと気を遣います。
- 電源をどう扱うか?USB接続で使う場合はそれでいいのですが、その後5Vをどう供給するか?回路図を見る限り5V端子からの供給は問題がありそうです。逆流防止用のダイオードも装備されていないようですし。
3.3vを3V3端子に供給する分には大丈夫そうです。と云う事で5Vの信号は諦めて、3.3V信号系に統一した方が良さそうです。- pin指定は“PA0”と云うような記述でOKです。
- SPI接続のNIC=W5500を試しました。結構あっさり動きます。SPIは2系統有りますが、SPI1しか確認していません。注意すべきは使用する端子でしょうか?SPI.hにはPA4/5/6/7が固定されているようです。PB3/4/5/15だと動きません。
- 同様にI2C接続も注意が必要です。こちらも2系統有りますが、I2C1はPB6/7を使います。PB8/9を使いたい場合、ライブラリを修正しないといけません。
STM32MiniはAliExpressのRobotDyn公式サイトでArduinoIDE用のBootLoader書込済みとそうでないものが併売されています。
https://robotdyn.ja.aliexpress.com/store/1950989
pinが半田づけされていない+BootLoaderが書き込まれていなければ$2.99、
pinが半田づけされていない+BootLoaderが書き込まれている場合$3.49、(+$0.5)
pinが半田づけされていて+BootLoaderが書き込まれている場合$3.89(+$0.9)BootLoaderは結構簡単に壊れてしまいます。その意味で素のモデルをストックして必要に応じてBootLoaderを書き込むのは理に適っていると考えました。ただ、面倒には違いないので専用のツールとBootLoader書込作業手順を残します。
ツールは、以下のようなもので、FTDIの基板と40pinソケット基板が専用配線されているものです。
使い方は、
- 予めFTDIのドライバをPCにインストールしておく
- 書込ツールは stm32flash.exe を使用します。予め落としておく必要があります。
https://sourceforge.net/projects/stm32flash/files/- バイナリファイルも落としておく必要があります。使用するファイル名は、generic_boot20_pc13.bin です。
https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries- ツールにSTM32Miniをセットし、PCとUSB接続する。このときデバイスマネージャで割り当てられたCOMポート番号を控えます。
- STM32MiniのジャンパピンBOOT0を 1 側に差し替えます。尚、BOOT0はUSBコネクタ側です。
- コマンドプロンプトを立ち上げます。
- stm32flash.exe をドロップします。
- -w と打ち込みます。
- generic_boot20_pc13.bin をドロップします。
- COM番号を書込みます。 COM10接続なら COM10と書き込む
- 実行します。以下が成功例です。
2020年12月17日追記
ESP32 for ArduinoIDE で OTAによるプログラムアップデートを実行すると、ソフトウエア的に再起動するように ESPClass::restart() というAPIが用意されています。BluePillで実現するにはどうしたらいいのか、調べました。
案外簡単に見つかりました。stm32duinoforumに [Solved]How to reset the board by code with stm32generic core? ってありました。
nvic_sys_reset();実際に試してみましたが、ちゃんと動作します。
これが実現出来るという事は、ネットワーク越しにプログラムの再起動が実行出来ます。WatchDogTimerで監視してdeadLockしたりしたことを検知したら再起動するとかが実現出来そうです。
2021年6月8日追記
STM32duinoでウオッチドックタイマ(WDT)を使う方法ですが、LibMapleを使う事で実現出来ます。
- libmaple/iwdg.h をインクルードします。
- わかりやすくするためms単位で設定出来るマクロを定義します。
iwdg_init_ms(N) iwdg_init(IWDG_PRE_256,((N)/8))
BluePillには32KHzのクロックが搭載されているかと思います。上記マクロで
N=5000(5秒)を設定すると、
1/32768×256×5000/8 ・・・・4.88秒 となるはずです。- setup()で iwdg_init_ms(5000); を設定します。
- loop()の先頭で iwdg_feed(); を実行して タイマをリセットします。
もし5秒以内に再実行されなければ、WDTが溢れ、リセットが掛かります。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。