JF1DIR業務日誌(はてなblog版)

アマチュア無線局JF1DIRのアクティビティをつづっています。

爆安Black Pillをmbedで動かしてみた

またまたマイコンネタですが・・・・世の中にARMの石であるSTM32F103C8T6のボードがありまして、これをArduinoにするという「STM32duino」プロジェクトがあるそうです。ここを見るとこの石の評価ボードにはいろいろ亜流があるらしく、Blue PillやらBlack Pillといわれる中華コピー版が100円台と超格安で売られているとのことで、Aliexpressで10枚くらい購入しましまた。で、忘れた頃に届きました。Arduinoではなくもちろんmbedで動かしてみたのですが、実に簡単です。これがおそらく最安値のmbedハードでしょう。Cortex-M3がこんな安く手に入り手軽に使えるなんてさすがARMでありSTであります。

ピンのはんだ付け

ピンとジャンパスイッチが付いていないので自分ではんだ付けします。変な油が基板にべっとり付いていたので、アセトンを浸した綿棒でよく拭ってからはんだ付けしましょう。ピン名のシルク印刷が非常に不鮮明、基板の切断位置がズレたりして、さすがは中華クオリティです。
基板上のジャンパスイッチは、ISPモードにするか動作モードにするかのスイッチらしく、ISPモード起動はB0+/B1-のようです。

mbedでコンパイル

STM32F103C8T6はmbedに非対応ですが、これに似ているNUCLEO F103RBをmbedのプラットフォームにしてしまえば、出来上がったプログラムはバイナリ互換です。しかもmbed OS 5対応。オンラインコンパイラもしくはmbed CLIでLチカプログラムをコンパイルします。

#include "mbed.h"
DigitalOut myled(PB_12);
int main() {
    while(1) {
        myled = 1;
        wait(0.1);
        myled = 0;
        wait(0.1);
    }
}

UARTでプログラムを転送

USB-シリアル変換のTXをボードのRX(A10)、RXをボードのTX(A9)に接続し(なおピン配置はBlue Pillの基板であるがココを参考にしました)、stm32flashというツールをダウンロードして入手します。なおLinux版のファイルは"stm32flash-0.5.tar.gz"です。以下Linuxでの操作を示します。

$tar xvfz stm32flash-0.5.tar.gz
$cd stm32flash
$sudo make install

USB-シリアル変換のUSBをPCに挿して、dmsegコマンドで、シリアルポートを確認。

$dmseg | grep 'USB Serial'
[850126.770536] usb 2-1.7: FTDI USB Serial Device converter now attached to ttyUSB0

ここでは/dev/ttyUSB0がシリアルポートでした。Fチカのプログラムをそのポートへ転送します。

$sudo stm32flash -w F103test.bin -v -g 0x0 /dev/ttyUSB0
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        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08004d84 (100.00%) Done.

Starting execution at address 0x08000000... done.

これで書き込みできました。プログラム起動するには、ジャンパをB0-/B1-にして電源を入れます。

秋月のLPC11U35 QuickStart互換ボードも安いですが、Black Pillはmbed OS 5に対応しているSTM32F103なのでmbed CLIで開発するにはとてもFBで使いやすそうです。

【追記】Windows上でbinファイルの転送

リクエストがありましたので、Windows上での方法を記してみます。ここにstm32flashのWindows版があるので、これをダウンロードして適当なフォルダに展開します。実行ファイルの"stm32flash.exe"はCLIプログラムなので、このフォルダにパスを通すか、Windows PowerShellもしくはDOSプロンプトを実行しこのフォルダに移動します。さらにmbedコンパイラでビルドしたBinファイルをこのフォルダへ移動しておきます。
次にデバイスマネージャーを開いて、「ポート(COMとLPT)」を開いてUSB Serial Portのポート番号を確認してます。例えば、COM9だとします。Black PillをISP起動モードにしてUSBをつなぎ直して、プロンプトから、

> .\stm32flash.exe  -w '.\F103test.bin' -v -g 0x0 COM9

とすると、Black Pillへ書き込まれます。エラーが出る場合は、ISP起動モードになっているか、COMポートが正しく指定されているか、Black Pillへの配線が正しいか、USBバスパワーが足りているか確認して下さい。