WeAct STM32F411CE (Black Pill) の書き込み (備忘録)

NO IMAGE

はじめに

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

Arduinoカテゴリの最新記事