はじめに
STM32F411CEU6実装のWeact Black Pillボードが簡易にArduino IDEでUSB Type-C or シリアル(USB→TTL 4ピン)経由、スケッチが書き込めるかを実験してみよう。当然、FlashLoader、keilなどでJTAG、SWD経由でもFlash書き込み可能とされる。因みに、出荷時の初期状態ではWeAct HID bootloaderが書き込み済みなので、電源を入れたら、C13 LEDが点滅状態に入るのを確認する。また、STM32CubeProgrammer 2.6.0でSTM32duino Bootloaderや、WeAct HID bootloaderを書き込んで出荷時の初期状態に設定できる。Bootloaderの書き込み先頭アドレスは0x8000000となる。
ボード情報
USB speed : Full Speed (12MBit/s)
Manuf. ID : STMicroelectronics
Product ID : STM32 BOOTLOADER
SN : 3197347F3030
FW version : 0x011a
Device ID : 0x0431
Device name : STM32F411xC/E
Flash size : 512 KBytes (default)
Device type : MCU
Device CPU : Cortex-M4
MCU情報
STM32F411CE、周波数100Mhz、RAM 128KB、ROM 512KB
手順
Flash書き込みソフトのSTM32CubeProgrammer 2.6.0をダウンロードして、Windows 64bit版の場合、exeファイルから、Ubuntuの場合、linuxファイルからインストールする。上記STM32CubeProgを使ってUSB書き込みの場合、プログラムモードにあるUSBポートが認識できない。後述Arduino IDEで書き込みの場合でもUSBポートが認識できない。また、Windows10、ubuntu 18.04環境とも同現象が出る。
※追記、上記USBポート認識できない現象、dfu-utilをインストールすることで解消する。
$sudo apt-get update $sudo apt-get install dfu-util $dfu-util -l
STM32duinoの追加
Arduino IDEでファイル→環境設定→下記リンクを追加して、ツール→ボード→ボードマネージャ→STM32を検索してインストールする。
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
ボード情報などの設定
シリアルの場合
USBの場合
PC接続
ボードをUSB Type-C or シリアルケーブルでPCに接続する。
モードの切り替え
プログラムモードへ切り替えるため、BOOT0を押下と同時にNRSTを押下→NRSTを離す→0.5秒後BOOT0を離す→初期状態のLED点滅が消える。この一連の指操作は、Finger Danceと言われる。
スケッチの書き込み
ファイル→スケッチ例→01Basics→Blink、書き込みボタンをクリックする。ときに書き込み失敗が起きても、再びモードを切り替て試したらほとんどの場合、2回連続の書き込みで済むようになる。
動作確認
下図のようにUSB接続、USB書き込みの場合、うまくいくと再び初期状態と違うパタンの青色LED点滅が確認できる。
追記
結論として、安価なST-Link/J-Linkでもプログラムの書き込みが安定して、そしてISPモード(シリアル、USB)で書き込む際に必要なFinger Danceも要らないので、作業に向いている。次に、ROSSerialなどを組み込んで、オープンソース化するロボット関連製品の開発に役立てたい。これで、Arudino開発環境が馴染み深いユーザーさん向けの製品の開発にとくに意味あると考えられる。