STM32F103を使った自作基板にSTM32duinoのファームウェアを焼いてArduinoIDEからLチカする話
タイトルで全てです。
このあたりで作った自作のデータロガー基板をArduinoIDEで開発できるようにします。
前提条件
オリジナル基板は完成しているものとします。当然ですがSTM32F103が載っていないといけません。
その他に
- BOOT0ピンがスイッチ、ジャンパなどでHIGH,LOWが切り替えできるようになっている
- 8MHzの水晶発振子が実装してある
- SWDCK,SWDIOピンが引き出してある
- USB端子が適切に実装されている(D+,D-が接続してありD+が1.5kΩでプルアップしてある)
ことが必要です。基本的にBluePillと呼ばれるSTM32F103C8T6開発ボードか秋月のSTM32開発ボードの回路を参考にするといいと思います。
BOOT1は一応関係ないはずですがプルダウンしておくと謎の不具合が減る気がします。
今回使用した基板はサークルのデータロガーとして製作しているものでSTM32F103RCT6が載っています。普段はCubeIDEで開発してST-Linkで書き込んでいますが基板の動作確認などが手軽にできるようにSTM32duinoに準拠した仕様としています(実はmbedも動くとか動かないとか…)。
ツールの用意
- ST-Link(書き込み装置、Amazonとかアリエクで500円くらい)
- STM32 ST-LINK utility (公式ファームウェア書き込みソフト)
- Arduino-STM32(ArduinoIDEのSTM32用ライブラリ?)
- Arduino SAM Boards (32-bits ARM Cortex-M3)(ArduinoIDEのARM用コンパイラ)
ST-LINK utilityはSTMicroelectronicsのホームページからダウンロードできます。
3つ目はこちらからダウンロードしてください。
Zipファイルを解凍してArudino-STM32サブフォルダを<ArduinoIDEのフォルダ>\hardware\に追加しといてください。
4つ目はArduinoIDEのボードマネージャーからダウンロードしてください。
手順としては
https://ht-deko.com/arduino/stm32f103c8t6.html
の「ST-Link で STM32duino ブートローダーを導入してみる」を参考にしています。
上記のツールの他にUSBのみで書き込みを可能にするためのブートローダーを
からダウンロードします。最後のアルファベットと数字は内蔵LEDのピン番号です。
BluePillと同じならPC13ピンがLEDなのでgeneric_boot20_pc13.binをダウンロードします。
ファームウェア書き込み
ST-Link utilityからブートローダーを書き込みます。
引き出してあるSWDCKとSWDIO、GNDを接続します。スイッチやジャンパでBOOT0をHIGH状態にして電源を入れると書き込み待ち状態で起動します。バッテリーやUSBで起動してもいいですが上の写真のようにST-Linkから3.3Vを供給することもできます。
ST-Link Utilityを起動してConnectを押します。きちんと接続されていればSTM32のFLASHが見れます。ちなみにバイナリが見れるので購入時は0x00が並んでいて壮観です。
Openからダウンロードしておいたブートローダーを開きます。
こんな感じです。
Vertifyを押して書き込みます。完了したらBOOT0をLOWに戻してファームウェア起動状態にし、再度電源をいれるとUSBからのスケッチ書き込み待ち状態になります。
ArduinoIDEでボードを選択する
ST-Linkを外してUSBを接続します。
ArudinoIDEのCOMポートではmaple miniとして表示されていると思います。これはSTM32を使ったArudinoライクな開発ボードの名残らしいです。
ボードをGeneric STM32F103Cなどに変更しその他項目を上のように設定します。
ちなみにUpload MethodをST-Linkにするとブートローダーなしで書き込めます(毎回ST-Linkの接続が必要になりますが)。ここではBlinkを書き込んでみます。
通常のArudinoと同様に書き込みボタンを押します。
自作基板にArduinoIDEからスケッチを書き込んでいるところ(ブログ載せる用) pic.twitter.com/VU0C0daFIY
— だん (@kogakudanshi) 2021年7月22日
シリアル文字出力なども通常のArudinoと同様シリアルモニタから確認できます。もとのArudinoのI2CやSPIなどはSTM32のI2C1、SPI1などに割り振られています。I2C2,3やTIM3~といったArudinoより充実している機能も追加クラスが用意されていて、STM32のほとんどの機能を使うことができます。
とくにF103C8T6に関してはBluePillのおかげでドキュメントが非常に充実しています。
(ちゃんとレジスタもアクセスできるので最悪そっちからやっても…)
今回はSTM32の自作基板をArduinoIDEで開発できるようにする方法を紹介しました。
ArudinoIDEのシリアル文字出力はかなり強力ですし、I2CのセンサーなどもArudino向けのスケッチをコピペすることができてプロトタイピングにはかなり便利です。USBケーブル1本で電源を供給しつつ抜き差しやスイッチ切り替えなしで書き込めるようになるので開発速度がかなり上がります。最低限の部品とLEDを実装した基板にBlinkを書き込んで「おぉ~動いたゾ」とニヤニヤしたりもできます。
ちなみにSTM32公式のCubeIDE以外でもmbed互換基板としたり
VSCodeでSTM32の開発するためのメモ(Windows+CubeMX+Makefile+VSCodeでSTM32のデバッグ) - Qiita(フォロワーさんの記事なので紹介させていただきました)
のような方法で開発することもできるそうです。
ぜひオリジナル基板がArudinoIDEから動く喜びを味わってみてくださいね!!