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
今回はSWD connectorでSWDP(serial wire debug port)を用いて書き込みとデバッグを行います。JTAGとSWDPは同じピンを共有しています。
使用するpinはこのようになっています。SW debug portのほうを参考にします。
ちなみにピンの使用範囲によってデバッガの使い方が異なります。
内部プルアップとプルダウンがあるようで外部で用意する必要はないみたいです。これは便利なのかな。
JATGとの接続はこのようにすればいいみたいです。
ついでにクロックの設定はこんな感じらしいです。
ST-LINK/V2のマニュアル
UM1075 User manual
ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32
ST-LINK/V2はSTM8とSTM32の接続コネクタがあります。今回はSTM32なので、STM32側の接続コネクタのピンアサインを確認します。
JTAG20ピンはこのようになっています。一応MCUとの接続ピンも記載されています。
ついでに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
ピン配置を確認していきます。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から供給できると便利なんですけどね~。
20170904の記事