Raspberry Pi STM32F103開発環境(Bluepill Blackpill)

Raspberry Piによるマイコン開発環境はAVR,ESP-WROOM-02(32)と来たので今回はSTM32F103を試してみたいと思います。
STM32に関してはいろいろ開発環境がありますがRaspberry Piからの使用となるとかなり限られて来るのでここはアマチュアライクなArduino IDE(Platformio)に絞って調べてみます。
web上を検索するとなんとかRaspberry Piでも動きそうな感触が得られたのでBluepillとBlackpillを手配してみました。
このSTM32F103C8T6搭載基板は性能、価格面ではコスパの高いボードと思います。
ESPの開発基板を流用するのは貧乏性のせいか抵抗がありますがBluepillやBlackpillはmcuの形状、ピン数から見てもピッチ変換基板と思えば気兼ねなく使えそうです。

Bluepill Blackpill
市場で一番流通しているのはBluepillと思います。
Bluepillは200円以下で購入(送料無料)できます。Blackpillはそれより20円位高い。

ボードの作り(質)としてはBlackpillのほうが良さそうです。
BlackpillはBluepillより少し大きい(ピッチ幅も1ピッチ広め)のですが6ピン少ない。少ないピンは
VBAT バッテリーバックアップ端子(RTC)
5V端子(あれば便利、基板上から引き出すことは可能)
PC14,PC15 実質利用できない端子
3.3V GND 余分に出ている
この中でバッテリーバックアップが必要な場合はBlackpill以外のボードを選んだほうがいいですね。


BluepillにはUSB問題(誤抵抗)があります。
Blackpillと同条件にしたいため問答無用で対策をします。
10K -> 1.5Kにするのですが小さい1.5Kを探すのが大変、かといって敢えて購入するまでもないことから1.8Kをパラにしました。
手持ちの1/6W抵抗を裏側に取り付けています。

シリアル接続(ブートローダーの書き込み)

MicroUSBからスケッチを書き込むためにはブートローダーを導入する必要があります。
USBシリアル変換モジュールを用いるのですが当サイトのcp2102は認識しませんでした。linux系ではCH340もだめなようです。
Raspberry PiのGPIOを利用してブートローダーを書き込む手法を紹介しているサイトがあります。
Flashing the STM32F103 using a Raspberry Pi 3
BluetoothはUARTの一部を利用しているですね。それをブートローダー書き込みのシリアル接続に用いるというものです。したがってこの設定をするとBluetoothは利用不可になります。
(常時使用する訳ではないので簡単に切り替え方法は後日検討してみたいと思います)

/boot/config.txtの編集 (末尾に追記)

dtoverlay=pi3-miniuart-bt

/boot/cmdline.txtの編集 (一部削除)

console=serial0,115200

stm32flash utilityはパッケージにあります。

# apt install stm32flash

接続
Raspberry Pi TX (pin 8) to STM32 RX (pin A10)
Raspberry Pi RX (pin 10) to STM32 TX (pin A9)
Blackpill(Bluepill)ジャンパー設定
BOOT0 jumper to 1
セットが完了したら再起動します。
再起動するとBluetoothマネージャーはグレーになって動作を停止しているはずです。

STM32duino-bootloaderのダウンロード
https://github.com/rogerclarkmelbourne/STM32duino-bootloader
ダウンロードしたSTM32duino-bootloader-master.zipは適当なディレクトリ(~/Applications)に展開します。

ブートローダーの書き込み
書き込む前に確認してみます。Flashメモリ128KiBが確認できます。

$ stm32flash /dev/serial0
stm32flash 0.5
http://stm32flash.sourceforge.net/
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

書き込んでみましょう。(Blackpill)

$ cd ~/Applications/STM32duino-bootloader-master/binaries
$ stm32flash -w generic_boot20_pb12.bin /dev/serial0
stm32flash 0.5
http://stm32flash.sourceforge.net/
Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08005294 (100.00%) Done.

Bluepillはgeneric_boot20_pc13.bin

BOOT0のジャンパー設定を0にしてリセットするとLEDが点滅してブートローダーが起動する様子がわかります。
新たに/dev/ttyACM0が生えてきます。

$ ls -la /dev/ttyA*
crw-rw-r-- 1 root dialout 166,  0  7月 29 22:35 /dev/ttyACM0
crw-rw---- 1 root dialout 204, 64  7月 29 21:54 /dev/ttyAMA0


あとはArduino IDE(Platformio)の環境を構築してスケッチを書き込んであげればいいだけなのですが・・・(実際書き込みはできる) なかなか微妙なところがあります。

この辺はまた次回にしたいと思います。

では!