素のSTM32F303K8にデバッガーを切り離していないNucleo経由でバイナリーを書き込む方法

この記事はstm32 Advent Calendar 2017の21日目の投稿です。

f:id:yuppi5:20171217233813j:plain
素のSTM32F303K8は、デバッガーを切り離していないNucleo経由でバイナリーを書き込むことができます。
バイナリーはmbedオンラインコンパイラーのもので動作を確認しています。
ボードの上下を切り離して別々にして書き込んでいる例があり、切り離さないとSTM32F303K8に書き込めないのかと思ってしまいますが、切り離さなくても書き込めます

STM32F303K8について

STM32F303K8(以下F303K8)は

  • コアがCortex-M4
  • 動作周波数72MHz
  • Flash64KB
  • SRAM16KB
  • FPU付き

というスペックで、そこそこ強いマイコンです。

秋月電子通商では、Nucleo-32ボードのF303K8の他に、チップ単体(LQFP32)も販売されています。
f:id:yuppi5:20171217201923j:plain
Nucleo-32ボードは気軽で良いのですが、そのままでは外部電源を利用できなかったり、(2019/07/26修正)USBとシリアルの接続を切ると書き込めなかったりするので、いまひとつ小回りが利きません。
そこで、素のF303K8を使おうという話です。

ちなみに、上記の写真のように変換基板を取り付けたものの部品代は、F303K8チップ変換基板細ピンヘッダ を合わせて525円です(2017/12/21現在)。Nucleo-32ボードの1,600円と比較するとかなり割安です。

Nucleo-64ボードについて

Nucleo-64ボードは、上と下で区画が分かれています。上部分は書き込みボード兼デバッガーのSTLINK v2-1、下部分はターゲット(マイコン本体)という構成です。
f:id:yuppi5:20171217202033p:plain
STLINK v2-1部分のみを使うので、STM32F103でもSTM32F446REでもNucleo-64ボードであれば何でもOKです。
今回はSTM32F446RE(以下F446RE)のボードを使いました。

配線方法

f:id:yuppi5:20171217210501p:plain
各端子の名称と配線図
図と同じように配線してください。
図の赤枠の部分のNUCLEOとST-LINKの切り替えジャンパーを外します。
BOOT0は10kΩくらいの抵抗器を挟んでGNDに落としています。
3.3Vの電源はSTLINK v2-1のJP1の左側のピンから取れます。
セラロックなどの外部クロック源は不要でした。
f:id:yuppi5:20171217202057j:plain
実際に繋いだ様子

書き込み方法

前置き

f:id:yuppi5:20171217202205p:plain
私のF446REボードの裏には「MB1136 C-03」と書かれたシールがあります。
書き込み方法の細かいところはNucleoの製造された時期によって変わってくるかもしれません。

エクスプローラー画面の表示の違い

NUCLEOモード時

f:id:yuppi5:20171217233808j:plain
f:id:yuppi5:20171217211335p:plain
NUCLEOとST-LINKの切り替えジャンパーを外さなかった場合の表示です。
この場合、上のスクリーンショットのように 空き容量はそのボードに載っているマイコンFlash容量が表示されます(この場合はF446REの512KB)。

ST-LINKモード時(何も接続していない場合)

f:id:yuppi5:20171217233820j:plain
f:id:yuppi5:20171217211343p:plain
NUCLEOとST-LINKの切り替えジャンパーを外し、かつSTLINK v2-1に何も接続していない場合の表示です。
この場合、上のスクリーンショットのように 空き容量は0、全体の容量は8KBと表示されます。ST-LINK v2-1に載っているSTM32F103の容量でしょうか。

ST-LINKモード時(F303K8を接続した場合)

f:id:yuppi5:20171217233813j:plain
f:id:yuppi5:20171217211353p:plain
NUCLEOとST-LINKの切り替えジャンパーを外し、かつSTLINK v2-1にF303K8を接続した場合の表示です。
この場合、上のスクリーンショットのように 空き容量はF303K8のFlash容量が表示されます(この場合は64KB)。
ドライブの名前までは変わらないようです。
書き込む際はこの状態(切り替えジャンパーを外し、F303K8をST-LINK v2-1に繋げた状態)でUSBを挿します。

バイナリーファイルを書き込む

NUCLEOとST-LINKの切り替えジャンパーが外され、F303K8が繋がった前提で話を進めます。
通常のmbedの書き込みのように、バイナリーファイル(.bin)をドラッグアンドドロップするだけです。
書き込みはF303K8側に対して行われるので、ターゲット側(今回はF446RE)のプログラムは書き換わりません。

動作方法

書き込みが終わったとき自動でリセットが掛かるようで、そのまま通常の動作モードに入ります。
f:id:yuppi5:20171217201842g:plain
STLINK v2-1を外して動作させる場合は、F303K8側のNRST端子を10kΩくらいでプルアップさせると安定するようです。
なお、この場合もセラロックなどの外部クロック源を付けずとも通常動作しました。チップ内蔵の発振器に切り替わっていると考えられます。

参考サイトさん

  1. STM32 Nucleo Board STM32F303K8のジャンパについて - Opera的活動記録 http://operalegend.blog.fc2.com/blog-entry-78.html
  2. STM32マイコン - Embedded System Engineer | 組込みシステムエンジニア http://www.emb-se.com/?page_id=225
  3. STM32いじってます - なんとなく活動記録。 | 電子工作・プログラミングの備忘録 http://blueeyes.sakura.ne.jp/2017/07/30/188/
  4. 秋月に売っているSTM32チップ周辺の接続について - 北の国から http://ruru-log.hatenablog.com/entry/2017/03/25/032255