工学男子の日常

モノづくりが好きな男子の日記です。

STM32F103を使った自作基板にSTM32duinoのファームウェアを焼いてArduinoIDEからLチカする話

タイトルで全てです。

 

kogakudanshi.hatenablog.jp

 このあたりで作った自作のデータロガー基板を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 utilityはSTMicroelectronicsのホームページからダウンロードできます。

3つ目はこちらからダウンロードしてください。

github.com

Zipファイルを解凍してArudino-STM32サブフォルダを<ArduinoIDEのフォルダ>\hardware\に追加しといてください。

4つ目はArduinoIDEのボードマネージャーからダウンロードしてください。

手順としては

https://ht-deko.com/arduino/stm32f103c8t6.html

の「ST-Link で STM32duino ブートローダーを導入してみる」を参考にしています。

 

上記のツールの他にUSBのみで書き込みを可能にするためのブートローダーを

github.com

からダウンロードします。最後のアルファベットと数字は内蔵LEDのピン番号です。

BluePillと同じならPC13ピンがLEDなのでgeneric_boot20_pc13.binをダウンロードします。

ファームウェア書き込み

ST-Link utilityからブートローダーを書き込みます。

f:id:kogakudanshi:20210723003827p:plain

引き出してあるSWDCKとSWDIO、GNDを接続します。スイッチやジャンパでBOOT0をHIGH状態にして電源を入れると書き込み待ち状態で起動します。バッテリーやUSBで起動してもいいですが上の写真のようにST-Linkから3.3Vを供給することもできます。

 

ST-Link Utilityを起動してConnectを押します。きちんと接続されていればSTM32のFLASHが見れます。ちなみにバイナリが見れるので購入時は0x00が並んでいて壮観です。

Openからダウンロードしておいたブートローダーを開きます。

f:id:kogakudanshi:20210723003647p:plain

こんな感じです。

Vertifyを押して書き込みます。完了したらBOOT0をLOWに戻してファームウェア起動状態にし、再度電源をいれるとUSBからのスケッチ書き込み待ち状態になります。

ArduinoIDEでボードを選択する

ST-Linkを外してUSBを接続します。

ArudinoIDEのCOMポートではmaple miniとして表示されていると思います。これはSTM32を使ったArudinoライクな開発ボードの名残らしいです。

f:id:kogakudanshi:20210723004938p:plain

ボードをGeneric STM32F103Cなどに変更しその他項目を上のように設定します。

ちなみにUpload MethodをST-Linkにするとブートローダーなしで書き込めます(毎回ST-Linkの接続が必要になりますが)。ここではBlinkを書き込んでみます。

通常のArudinoと同様に書き込みボタンを押します。

 

シリアル文字出力なども通常の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から動く喜びを味わってみてくださいね!!