CCWO

挫けそうになるブログ

STM32 ST-LINK/V2 書き込み

開発環境

MCU STM32F303K8
Debugger ST-LINK/V2
IDE System Workbench for STM32
Code Generator STM32CubeMX
Library HAL Driver

という環境で、今回書き込み回路とその動作検証をSW4STM32でしてみました。
これまではNucleo上のST-LINKを使用していたのですが、秋月で購入したST-LINK/V2を使って書き込み回路を試します。
akizukidenshi.com

書き込み回路

書き込み回路には、4つのマニュアルを参考にしました。
・STM32F3シリーズのハードウェアマニュアル AN4246
・ST-LINK/V2のマニュアル UM1075
・Nucleo STM32F303K8のユーザーマニュアル UM1956
・STM32F303K8のデータシート
なんだか、書き込み回路が明確にこれだって載っているのがなくて、あたふたしました。書き込みにはJTAGとSWDPの二種類の方法があります。JTAGとSWDPで表記が2通りあってこんがらがっていたみたいです。
まずはドキュメントをぱらぱらと、

STM32F3シリーズのハードウェアマニュアル

AN4206 Application note
Getting started with STM32F3 series hardware development
f:id:CCWO:20170904043622p:plain:w300
今回はSWD connectorでSWDP(serial wire debug port)を用いて書き込みとデバッグを行います。JTAGとSWDPは同じピンを共有しています。

f:id:CCWO:20170904043741p:plain:w300
使用するpinはこのようになっています。SW debug portのほうを参考にします。

f:id:CCWO:20170904044031p:plain:w300
ちなみにピンの使用範囲によってデバッガの使い方が異なります。

f:id:CCWO:20170904044214p:plain:w300
内部プルアップとプルダウンがあるようで外部で用意する必要はないみたいです。これは便利なのかな。

f:id:CCWO:20170904044312p:plain:w300
JATGとの接続はこのようにすればいいみたいです。

f:id:CCWO:20170904044502p:plain:w300
ついでにクロックの設定はこんな感じらしいです。

ST-LINK/V2のマニュアル

UM1075 User manual
ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32
ST-LINK/V2はSTM8とSTM32の接続コネクタがあります。今回はSTM32なので、STM32側の接続コネクタのピンアサインを確認します。
f:id:CCWO:20170904044719p:plain:w300
JTAG20ピンはこのようになっています。一応MCUとの接続ピンも記載されています。

f:id:CCWO:20170904044814p:plain:w300
ついでにST-LINK/V2のステータスLEDはこうなっているらしいです。
赤点滅:PCと接続時
赤点灯:PCとコミュニケーション時
赤緑点滅:MCUとデータ交換中
緑点灯:MCUとデータ通信完了
オレンジ点灯:通信失敗

Nucleo STM32F303K8のユーザーマニュアル

UM1956 User manual
STM32 Nucleo-32 board
こちらは回路図を参考にしました。Nucleoはボード上のST-LINK/V2とMCUはSWDP(加えてST-LINK/V2側のマイコンからMCOでTarget MCUにクロックが供給されている。)とで接続されています。パスコンの置き方だったり、水晶発振子の置き方だったり、リセット回路の作り方とST-LINK V2との接続だったりを確認しました。

STM32F303K8のデータシート

STM32F303x6/x8
ARM ® Cortex ® -M4 32b MCU+FPU, up to 64KB Flash, 16KB SRAM 2 ADCs, 3 DACs, 3 comp., op-amp 2.0 - 3.6 V
f:id:CCWO:20170904045356p:plain:w300
ピン配置を確認していきます。STM32F3のハードウェアマニュアルにSWDPで使用するポートは記載されているので確認程度で、長いので省略。上図は1ページ目です。どうやらSTMはすべてのピンパッケージが一つの表にまとめて書いてあるのですね。

コネクション

ここまで見てきたので、これらをもとにSWDPとJTAGでの接続方法を表にまとめました。

ST-LINK/V2 JTAG Pin no. Name Connection MCU SWDP MCU JTAG
1 TVCC ----- MCU VCC MCU VCC
2 TVCC ----- MCU VCC MCU VCC
3 TRST ----- GND NJTRST
4 UART-RX (-----) USART-TX(optional) USART-TX(optional)
5 TDI ----- SWO(optional) JTAG TDO(JTDO)
6 UART-TX (-----) USART-RX(optional) USART-RX(optional)
7 TMS ----- SW IO(SWDIO, SWDAT) JTAG TMS(JTMS)
8 BOOT0 ----- GND GND
9 TCK ----- SW CLK(SWCLK) JTAG TCK(JTCK)
10 SWIM ----- GND GND
11 NC NC NC
12 GND ----- GND GND
13 TDO ----- NC JTAG TDI(JTDI)
14 SWIM-RST ----- GND GND
15 RESET ----- RESET(NRST) RESET(NRST)
16 KEY NC NC
17 NC NC NC
18 GND ----- GND GND
19 VCC NC NC
20 GND ----- GND GND

また、Nucleo 64 boardには6ピンのコネクタが出ていますこれはST-LINK/V2と接続されているので、

ST-LINK/V2 MCU
VCC MCU VCC
TCK SW CLK
GND GND
TMS SW IO
NRST RESET
SWO OSC IN(optional)

と接続すれば大丈夫です。SWD接続です。

STM32F303K8との接続

ST-LINK/V2とコネクションはわかったから結局接続はどうすればいいというかというと、
SWDP 2本とGND・VCCを繋げば動く

ST-LINK/V2 JTAG Pin no. Name STM32F303K8 Pin no. Name
7 SW IO 23 SWDIO
9 SW CLK 24 SWCLK
15 RESET 4 NRST(optional)
5 SWO 2 OSC IN(optional)
1,2 TVCC 1, 5, 17 VDD
12,18,20 GND 32,16 GND

JTAG 通信に5本とGND・VCCを繋げば動く

ST-LINK/V2 JTAG Pin no. Name STM32F303K8 Pin no. Name
3 TRST 27 NJTRST
5 TDI 25 JTDI
7 TMS 23 JTMS
9 TCK 24 JTCK
13 TDO 26 JTDO
15 SRST 27 NRST(optional)
1,2 TVCC 1, 5, 17 VDD
12,18,20 GND 32,16 GND

NRSTはoptionalですが、つなぐとSW4STM32からRESETがかけれるので便利です。
と言った感じで見てきました。これでST-LINK/V2を使って書き込みが出来るようになりました。

SW4STM32での動作確認

birdhouse.hateblo.jp
こちらの通りに設定しました。ありがとうございます。
Nucleoとはデフォルトの設定で接続が出来るのですが、ST-LINK/V2とはいろいろいじらないといけないみたいです。電源は外部で入れないとdebugは走りません。ST-LINKから供給できると便利なんですけどね~。