昔に買って、眠ったままになっていたSTM32 Nucleo Board STM32F401があったので、ST-Linkとして使おうと思ってみた。
この基板は、ST-Link部分とマイコンボード部分が割りやすいようになっていて、割ることでST-Link部分が単体のST-Linkとして使えるようになっている。
なので、割ってみた。
そして、STbee F4miniと以下のように接続してみた。
1.Vtarget(ST-Link) ->VDD(STbee F4mini)
2.SWCLK(ST-Link) ->PA14(STbee F4mini)
3.GND(ST-Link) ->GND(STbee F4mini)
4.SWDIO(ST-Link) ->PA13(STbee F4mini)
5.nRST(ST-Link) ->nRESET(STbee F4mini)
6.SWO(ST-Link) ->未接続
STbee F4miniとST-Linkの両方にUSBケーブルをつないでみる。
この状態では、まだSWDは有効になっていないので、STbee F4miniのユーザプログラムが動くはずだが動かない。
スイッチの押下を検出してLEDを光らせるだけの簡単なプログラムが書き込まれているはずなのに、それが動かない。
ST-Link側のUSBケーブルを抜いて、STbee F4miniの動きを見る。
動かない。
STbee F4miniとST-Linkの接続をはずしてみる。とたんにSTbee F4miniが動き始める。
ということは、ST-Link側の回路が悪さをしているようだ。
回路図をじっくり眺めて、気付いた。
Vtargetの電圧を監視している抵抗R9が未実装(N/A)になっている。
きっとそのせいでST-Linkがリセットを解除していないのであろう。
実装したからといって壊れる回路にも見えないので、手持ちの100Ω抵抗を半田付けしてから、もう一度全てのケーブルを接続した。
STbee F4miniのユーザプログラムは動く。よしよし。
続いて、ST-Link Utilityを使ってプログラムの書き換えを行なう。
シンプルに確認ができるように、LEDの光る論理を逆にしたプログラムを書き込む。
書き換え成功。よしよし。
スイッチを押して、LEDの光り方を確認する。期待通り。よしよし。
これでSTbee F4miniのブートモードを切り替えずにプログラム書き換えができる。