Skip to content

Instantly share code, notes, and snippets.

@tadfmac
Last active October 19, 2022 00:49
Show Gist options
  • Save tadfmac/f1dffc8c674ddaa8bd2340a8ddec65be to your computer and use it in GitHub Desktop.
Save tadfmac/f1dffc8c674ddaa8bd2340a8ddec65be to your computer and use it in GitHub Desktop.
bluepillにArduino Bootloaderを書き込む

用意するもの

1. Homebrew をupdate

$ brew update

2. st-linkをインストール

$ brew install stlink

3. binをダウンロード

https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries

generic_boot20_pc13.bin

4. st-linkとbluepillを接続

SWD端子とSTLINKを繋ぐ。

https://wiki.stm32duino.com/index.php?title=Blue_Pill

を見ながら間違えないように繋ぐ(間違えたw)

5. 繋がってる? を確認

$ st-info --probe

みつかったらOK

6. 書き込み

ダウンロードしたeneric_boot20_pc13.binを、~直下に置く (めんどくさいので)
そのうえで、

$ st-flash write ./generic_boot20_pc13.bin 0x8000000

これで書き込める

7. Ardino IDEに STM32入れる

Arduino IDEを起動して、Board ManagerからArduino SAM Boards (32-bits ARM Coretex-M3) by Arduinoを選んで入れる。

これだけでは入らない! dueがはいるだけ! (依存あるから入れる?謎)

つづけて、

https://github.com/rogerclarkmelbourne/Arduino_STM32

をダウンロードして、解凍して、

Arduino IDEの中の hardware フォルダ下にコピー。 (Arduino_Arduino_STM32というフォルダ名にする)

Arduino IDEを再起動すると、STM32用のボード一覧が表示されるようになります。

8. Lチカ試してみる

blinkを開いて、ボードからGeneric STM32F103C Seriesを選んで書き込みます。
ここで注意。

一番最初、何も書き込まれていないときは、DFUモードから抜けないからそのまま書き込めるけど、2回目以降はDFUからすぐに抜けてしまいます。
リセットを押した直後1-2秒だけ書き込める感じです。

Arduinoの書き込み後、ビルドが走るので、「Arduinoの書き込みを押した後0.5秒後くらいにボードのリセットを押す」と、書き込み成功します。 むずかしい。。。w

Lチカは動きました。(このボードでLED_PINはPC13になってる) リセット押すタイミングも慣れればOK。

参考

https://qiita.com/nanbuwks/items/ba37f049f45378da0e2b
https://ht-deko.com/arduino/stm32f103c8t6.html
http://morecatlab.akiba.coocan.jp/lab/index.php/2016/02/arduino_stm32-bpb/

ぐぬぬ

まだ Wire Libraryに Slaveが実装されていないようだ。。。

が、

rogerclarkmelbourne/Arduino_STM32#408

WireSlave.h だと...?

明日試してみよう...

@tadfmac
Copy link
Author

tadfmac commented Aug 2, 2020

追記。

MacOS新しいので、やとうろしたら、下記のようなエラーが。

Failed to open serial device.
dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!

環境は MacOS Mojave 10.14.6 : Catarinaじゃない

libusbを新しくすればOK

brew install libusb
brew link libusb

上記実施後、Arduino IDEから書き込めた。

以前と違う (?) と思うところ。

書いたのが2年前なので記憶の方が怪しい?という説もあるけど。

  • RESETとか押さなくても何度も書き込めるようになった。
  • 書き込んだBootloaderは generic_boot20_pc13_fastboot.bin

Arduino の device 設定は下記の通り。

setting

@tadfmac
Copy link
Author

tadfmac commented Aug 2, 2020

@tadfmac
Copy link
Author

tadfmac commented Aug 3, 2020

さらに追記。(来年またわからなくなってる自分が居そうなので)

Bootloader書き込み済みのDeviceへのBootloaderアップロード方法

買ったままの状態のbluepillはファームが何も書き込まれていないため、ジャンパの設定に関わらずDFUで起動する。
このため、st-info --probe でデバイスを見つけることができる。

一度 (bootloader含め) ファームをFlashに書き込むと、Flashからの起動が優先になるので、
ジャンパーを切り替えないとDFUで起動しなくなる。

Bootloaderを書き込み直したい、などの時は、ジャンパーを下記のように設定してからデバイスをST-Linkに接続すると、st-info --probe で認識できるようになる。

stm32

@tadfmac
Copy link
Author

tadfmac commented Aug 3, 2020

@tadfmac
Copy link
Author

tadfmac commented Sep 13, 2020

@tadfmac
Copy link
Author

tadfmac commented Oct 19, 2022

M1 Mac でビルドできなくなった。

libusb が指定のフォルダにない。と怒られる。

https://qiita.com/sugasaki/items/c8a607a9fa355af2d579
の方法でシンボリックリンクを作ったが、どうも x86_64 を期待しているようでエラーが出る。


dyld[44052]: Library not loaded: '/opt/local/lib/libusb-1.0.0.dylib'
  Referenced from: '/Applications/Arduino.app/Contents/Java/hardware/Arduino_STM32/tools/macosx/dfu-util/dfu-util'
  Reason: tried: '/opt/local/lib/libusb-1.0.0.dylib' (mach-o file, but is an incompatible architecture (have (arm64), need (x86_64))), '/usr/local/lib/libusb-1.0.0.dylib' (no such file), '/usr/lib/libusb-1.0.0.dylib' (no such file), '/opt/homebrew/Cellar/libusb/1.0.26/lib/libusb-1.0.0.dylib' (mach-o file, but is an incompatible architecture (have (arm64), need (x86_64))), '/usr/local/lib/libusb-1.0.0.dylib' (no such file), '/usr/lib/libusb-1.0.0.dylib' (no such file)
/Applications/Arduino.app/Contents/Java/hardware/Arduino_STM32/tools/macosx/maple_upload: line 53: 44052 Abort trap: 6           ${DFU_UTIL} -d ${usbID} -a ${altID} -D ${binfile} -R ${dfuse_addr} -R

https://decafish.blog.ss-blog.jp/2021-10-25
を試してみる必要がある。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment