ArduinoでSTM32を使えるようにする、STM32duinoというプロジェクトを見かけて試してみたくなったので
Blue Pillと呼ばれているSTM32F103C8T6搭載マイコンボードをポチってみた。
今回はAliexpressを使ってみたんだけど春節とかぶってしまって結構届くまで時間がかかってしまった。このボードで1.7ドル…

Red Pillと呼ばれるボードも存在しているみたいだけどこちらのBlue Pillと呼ばれているボードは全体的に安い気がする。
利点や欠点はフォーラムの
Red Pill or Blue Pill?を参照するといいかも。
これで72MHz駆動の32Bitマイコンが手に入るというから結構驚き。
3.3V駆動なので後ろにはレギュレータが

ネイティブでUSB Full Speedにも対応しているっぽい。
なのでマイコン以外のICは乗っていない
ライタとしてはST-Linkっていうライタが必要なんだけど、このSTM32F103C8T6にはシリアルブートローダが搭載されているのでBootジャンパを変更することによってシリアル通信でプログラムを書き込めるっぽい。

USBシリアル変換基板と繋いでみた。今回使った変換基板には3.3V出力があったのでこんな感じに接続。
PA9はTX、PA10はRXになってるっぽい。
そしてシリアルブートローダを使う場合はBoot1をGNDに落とさないといけないので写真の通りにジャンパを変更する必要がある。
これでPCに繋いで、
stm32flashでFlashの容量を確認してみた。

今回はUSBシリアル変換基板がCOM7だったので
stm32flash.exe COM7でこんな情報が見れた。
Blue Pillは128kbフラッシュのものが多いみたいだけど、今回購入したBule Pillも128kbのFLASH搭載だった。
Flashの容量が確認できたところでUSB Bootloaderを書き込んでみた。やはりUSBから書き込めると便利そうだし。
Blue PillはPC13にLEDがつながっているのでそれ用のBootloaderをダウンロードしてくる。
generic_boot20_pc13.binを使用した。
書き込みツールは
Flash Loader Demonstratorを使用した。
GUIを起動し、シリアルポートをボードがつながっているCOM番号に変更する。

Nextを押すとマイコンボードを読みに行く。ここで設定が間違っていたり、マイコンボードのジャンパがおかしかったりすると応答なしになったりエラーが出るっぽい。

うまく認識されるとこんな画面に。さっき確認したときFlashは128kbだったのになぜか64kbってでてる。
とりあえずNext

128kbを選択して下の方を見ると一応認識してるみたい。
とりあえずNext

ダウンロードしておいたBootloaderを書き込む。

これで書き込み完了。
これでUSB接続でプログラムが書き込めるようになるはずなんだけど、Blue PillのUSB接続用の抵抗が間違っているみたいで、PCによっては認識しない模様。
こちらの環境では問題なく認識したけど、一応抵抗を適切な値のものに変更しておいた。

交換したのはR10の抵抗で、もともと10kΩがついてたんだけど、本来は1.5kΩである必要があるみたい。2012サイズのチップ抵抗しか持っていなかったんだけど一応装着できた。

ピンヘッダをつけて完成。ついでにUSBコネクタのハウジングにもハンダを盛っておいた。USB Bootloaderを書き込んだあとはBoot1のジャンパをもとに戻すのを忘れずに。
プログラムを何も書き込んでない状態だとずっとDFUモードになるみたいでLEDが点滅した状態になる。
ドライバは
こちらからArduino_STM32をダウンロードする。driverフォルダを辿っていくとinstall_driver.batがあるのでこれを実行するとドライバがインストールされるみたい。
デバイスマネージャーを見るとMaple_DFUとして認識する模様。
あとはArduinoの環境設定で
http://dan.drown.org/stm32duino/package_STM32duino_index.json
をボードマネージャURLに追加して
ボードマネージャからSTM32F1xx/GD32F1xx boardsを追加するだけ。

Blue Pillの場合はBlinkをこんな感じで編集して書き込むとLEDが点滅するはず。
一番最初書き込むときはプログラムが入ってないので常時DFUモードだったんだけど、2回め以降はSearching for DFU deviceって出たときにリセットボタンを自分で押してやらないと書き込めなかった。
とりあえずこれでだいぶお安いSTM32開発環境が整ってしまった。
追記:いつの間にかリセットボタンを押さなくても書き込めるようになっていた…