はじめに
STM32ボードに興味があって購入したものの、Arduino互換機として使おうにも設定が面倒くさすぎてわけわからなくなったので、うまくいったので備忘録に。
WeAct製のBlack Pillについての情報がなさすぎてなかなかうまく行きませんでした。
以下は基本macでおこなったものなのでWindowsではこの方法でうまくいかないかも。各々を置き換えて読み進んでください。
PlatformioでSTM32ボードに書き込むまで
ブートローダーを書き込み (最終的には必要なかったこと)
概要
まずはじめに、ブートローダーが壊れてるのかと思って、ブートローダーを書き直す作業から始めました。
必要なものはSTLink v2.xクローン。
STLinkで通信できるようにする。
まず、STM32ボードのbinファイルを取得します。今回は「generic_boot20_pc13.bin」というファイル。
あと、ST LinkとBlack Pillを繋ぎます。3.3V, GND, SWSCLK, SWDIOの4本。
$ brew update
$ brew install stlink
Homebrewが入っている環境で、stlinkをインストールします。
$ st-info --probe
STLinkをPCに認識した状態で上のコードを叩くと、STLinkが認識されているはず。
Found 1 stlink programmers
と表示されます。
$ st-flash write (generic_boot20_pc13.binのパス) 0x8000000
を入力して、STLink経由でブートローダーを書き込みます。
DFU-Utilで通信できるかの確認。
$ brew update
$ brew install dfu-util
Homebrewが入っている環境で、dfu-utilをインストール
Black PillのUSB type-c端子とPCを接続した状態でDFUモードに入ります。
Black PillのDFUモードの入り方は、
1. リセットボタン (NRST) を押す
2. BOOT0 ボタンを押す
3. リセットボタンを離す
4. (0.5秒以上間隔をあけてから) BOOT0ボタンを離す
です。
DFUモードに入ってから、
$ dfu-util -l
と入力すると、dfuモードでつながっている機器を認識します。
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Found DFU: [0483:df11] ver=2200, devnum=28, cfg=1, intf=0, path="20-2.3", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="346D34563239"
Found DFU: [0483:df11] ver=2200, devnum=28, cfg=1, intf=0, path="20-2.3", alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="346D34563239"
Found DFU: [0483:df11] ver=2200, devnum=28, cfg=1, intf=0, path="20-2.3", alt=1, name="@Option Bytes /0x1FFFC000/01*016 e", serial="346D34563239"
Found DFU: [0483:df11] ver=2200, devnum=28, cfg=1, intf=0, path="20-2.3", alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="346D34563239"
PlatformIOでスケッチの書き込み
VSCodeの拡張機能からPlatformIOを導入してBlack Pillにスケッチを書き込むまで。
VSCode内のExtensionsタブから「PlatformIO」と検索して、PlatformIO IDEをインストール。ついでに必要なもの(c/c++とかmicropythonとか)もインストール。
左のタブにPlatformIOが追加されるので、クリックして「PIO Home」からホーム画面を表示します。New Projectから新しいPlatformIOプロジェクトを作成します。この時boardはSTM32系 (BlackPill F401CC (ST))を選択します。
プロジェクトを作り終えたら一度VSCodeを終了します。
Finderから「~/.platformio」に辿り (Finder内で Command + Shift + G でひとっ飛び)、「platforms/ststm32/boards/」に移動します。
ここのフォルダにF411CE用のjsonファイルを追加します。STM32duinoのIssue内にPlatformIO用のjsonファイルが置いてありますが、jsonファイルは名前が「blackpill_f411ce.json」で中身は、
{
"build": {
"core": "stm32",
"cpu": "cortex-m4",
"extra_flags": "-DSTM32F4xx -DSTM32F411xE",
"f_cpu": "100000000L",
"mcu": "stm32f411ceu6",
"variant": "PILL_F401XX"
},
"connectivity": [
"can"
],
"debug": {
"jlink_device": "STM32F411CC",
"openocd_target": "stm32f4x",
"svd_path": "STM32F40x.svd"
},
"frameworks": [
"arduino",
"cmsis",
"stm32cube"
],
"name": "BlackPill F411CE",
"upload": {
"maximum_ram_size": 131072,
"maximum_size": 524288,
"protocol": "stlink",
"protocols": [
"jlink",
"stlink",
"blackmagic",
"serial",
"dfu"
]
},
"url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f411ce.html",
"vendor": "ST"
}
です。
VSCodeに戻り、もう一度PlatformIOから新規プロジェクトを作成するとboardに「BlackPill F411CE (ST)」が追加されています。
DFU経由でスケッチを書き込む場合、作成したプロジェクト内にある「platformio.ini」の中身を
[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = arduino
upload_protocol = dfu
upload_port = anything
と書き換えることでアップロードできるようになります。
アップロードする時はまた
1. リセットボタン (NRST) を押す
2. BOOT0 ボタンを押す
3. リセットボタンを離す
4. (0.5秒以上間隔をあけてから) BOOT0ボタンを離す
でDFUモードに入ってから書き込む必要があります。
PlatformIOのスケッチは「src/main.cpp」内をArduino IDEと同じようにスケッチしますが、はじめに#include "Arduino.h"
を記述する必要があります。
#include "Arduino.h"
void setup() {
pinMode(PC13, OUTPUT);
}
void loop() {
digitalWrite(PC13, HIGH);
delay(500);
digitalWrite(PC13, LOW);
delay(500);
}
これでdfuモード中のBlackPillに書き込めるようになりました。
参考サイト
日本語でSTM32F4x系Black Pillを扱ってるサイト
氾濫原 STM32F401CCの安いボード : https://lowreal.net/2019/10/26/1
elchika 中華STM32F4ボードで遊ぼう! : https://elchika.com/article/3991eab6-dc97-486c-9b95-cbb0441ac743/
公式
WeAct GitHub : https://github.com/WeActTC/MiniF4-STM32F4x1
WeAct micropython : https://github.com/WeActTC/WeAct_F411CE-MicroPython
その他参考
mcauser / WEACT_F411CEU6 : https://github.com/mcauser/WEACT_F411CEU6
bluepillにArduino Bootloaderを書き込む : https://gist.github.com/tadfmac/f1dffc8c674ddaa8bd2340a8ddec65be