External STLink V2

From Embedded Workshop
Jump to navigation Jump to search

External STLink V2

My friend Rusty and I sat down after breakfast one Saturday morning and decided we wanted to use our new STLink V2 units to talk to our new NUCLEO-F103RB boards using JTAG vs the on-board SWIM (SWD).
Using STM32CubeMX and Keil uVision 5, we built a typical "Blinky" program and attempted to download the program to flash using the JTAG interface.
Here's the result of our exploration:

1) Connect the external ST-Link unit to the NUCLEO board

This example is using the NUCLEO-F103RB board
JTAG Signal (20 pin)  NUCLEO Attach Point  Wire*    Comment
VCC (1)                     CN7-12         Red      Required - Adapter senses target supply voltage
GND (20)                    CN7-8          Black    Common ground
TMS  / SWDIO (7)            CN7-13         Blue     PA13  JTAG Test Mode Selection / Serial Wire Data Input/Output
TCK  / SWCLK (9)            CN7-15         Yellow   PA14  JTAG Test CLocK / Serial Wire Clock
TDI (5)                     CN7-17         Green    PA15  JTAG Test Data Input
TDO/TRACESWO (13)           CN10-31        White    PB3   JTAG Test Data Output
NRST (15)                   CN7-14         Orange   Active Low Reset

* The wire colors depicted here are not part of any standard but what we used to keep track of each signal

2) It is recommended to remove the two ST-LINK jumpers on the NUCLEO board, at CN2.

This disconnects the on-board debug adapter from the target processor.

3) Plug in the USB debug adapters

Plug in the External ST-Link adapter first, and then the NUCLEO board.

4) Configure the adapter

When applying power to the NUCLEO board as well as the external STLink-V2, the Keil IDE
saw two USB debug adapters, the on-board one and the external one. The on-board one was
labeled "ST-LINK/V2-1", and the external one was labeled "ST-LINK/V2".
The debug adapter to use and settings for the adapter are configured under:
 Project -> Options for Target <project name> -> Debug tab -> ST-Link Debugger (Settings) ->
   Debug Adapter Unit: {{#if:|{{#ifexpr:({{#time:U|{{{3}}}}} - {{#time:U|now}}) > 0|ST-LINK/V2|ST-LINK/V2}}|ST-LINK/V2}}

If all the wires are connected correctly, within that Debug Adapter settings dialog,
 Target Com Port: selecting {{#if:|{{#ifexpr:({{#time:U|{{{3}}}}} - {{#time:U|now}}) > 0|JTAG|JTAG}}|JTAG}} or {{#if:|{{#ifexpr:({{#time:U|{{{3}}}}} - {{#time:U|now}}) > 0|SW|SW}}|SW}} should both display information in the
 Target Device window.
Select "JTAG"
Click on "OK" button(s) to close the dialogs

5) Build the application(F7)
6) Download (F8)

The program should download to the target.

7) Press the reset (black) button to begin running the program.

Reference Documentation

https://www.st.com/resource/en/user_manual/dm00026748-stlinkv2-incircuit-debuggerprogrammer-for-stm8-and-stm32-stmicroelectronics.pdf
https://www2.lauterbach.com/pdf/arm_app_jtag.pdf
https://www.tincantools.com/wp-content/uploads/2018/08/Flyswatter2-20-Pin-JTAG-Connector.pdf
It appears there's a 10-pin connector version: http://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_jtag_connectors.html