STM32に関しては久しぶりですが
今回はSTからリリースされたSTM32CubeProgというソフトについてみていこうと思います。
STM32CubeProg
簡単に説明すると
STlink utility とかflash loaderとかdfuツールとかそういうのが一緒になってWindows,Mac ,Linuxに対応したものです。
以前できたことは一通りできます。
というわけで・・・・・
SWD接続とかDFUはいろんな方がやっているので
UARTブートローダーでもやってみようと思います。
UART bootloader
UARTからバイナリをぼこぼこ投げて書き込みできる機能。
特にまあたらしい物でもないからこんなもんで早速やって行きましょう。
今回使うものはSTM32F767 Nucleoを使うのでそれ用の設定で説明していきます。
STM32F767の場合UARTは以下のものが使えます。
んでまあ見てわかるんですが注意が必要でUART3ってSTLINKとつながってるのでそれが使えるやん?思う方もいると思うんですがところがどっこい
ブートローダーで使えるピンと違うとこからUART3を出してるのでSTLINK経由では使えません(このせいでなんでつながらないんだろうと5分位悩みました。
問題が整理できたとこでPC10,11が使えるとのことからこの辺から引っ張ってあげましょう
STLINKのTX RXピンから延ばしてもいいのですがシリアル変換器はこの辺の使ってます
次にbootloaderに遷移するための準備です。
STM32の場合は基本BOOT1とBOOT0の設定でフラッシュブートとsystem bootloaderから起動するか設定できるんですがF7の場合BOOTピン一個になりまして起動アドレス指定ができるようになりました。
初期状態でBOOTをHIGHにするとsystem bootloaderでいけるという感じですね。オプションバイトに関してはCubeProgで書き換えたり今の状態を見たりできるのでその都度確認してみてください。
ピンで言うとここです
ココまで終わるとフローチャート的にはこうなります
というわけでBOOTピンをHIGHにしてリセットしてUARTで接続してみましょう。
つながるとこのようになります。
先ほど示したオプションバイトはこのように確認できます。
書き込みはこの画面からできます
所感
というわけでかなり簡単にフラッシュの書き換えができるというわけです。
近年デバッガが安くなってきており持ってると特に使わない機能なんですが
エフェクターとか開発してると弾き手とかそういう人とやりとりする機会が結構あってアルゴリズム詰めてる時向こうが書き込み機を持ってないときとかに便利です。
あとは製品出荷後にアップデートとかしたいときに使えます。
あとF7ならDFUで書くほうが何もいらないのでいいと思いましたw
おまけ
ブートローダーについてCubeProgが自動でやってくれるので特に必要ありませんがマイコン間とかでファーム書き換えする場合は自前で打つ必要があります。
BOOTピンをHIGHにして該当UARTに0x7Fを送るとUARTブートするみたいです。
それを送るとACKがかえるみたいなのでTeratermで実験してみた。
Teratermを16進表記するとわかりやすいのでココを参考にしてみてください
shuzo-kino.hateblo.jp
デバッグmodeにできたら
信号を送信していきます。
ここでもTeratermのマクロ機能が便利です。
send $7F
とすると0x7Fを送ってくれます。
保存はこのような拡張子にします
次に接続設定です。
パリティEVEN以外は得に変わりはないです。
そうしたら上部メニューからコントロール/マクロを選択 先ほどのiniファイルを選択すると
きちんと79が帰ってきています。
そのあとはマニュアル通りにコマンドを打ってあげると書き込みできます。
ちなみにteratermのマクロはいろいろできるのでプロトコルとかそういった通信テストには便利だと思いますので覚えておくといいでしょう。
資料など
- AN3155 Application note USART protocol used in the STM32 bootloader
- UM2237 User manual STM32CubeProgrammer software description
- AN2606 Application note STM32 microcontroller system memory boot mode