STM32 > Nucleo基板搭載のST-LINK/V2-1を使用して、別の基板をデバッグする > デバッガーの一つとして使う

```txt:動作環境
Ubuntu 18.04 LTS
STM32CubeMX v5.2.1
STM32CubeIDE v1.0.1
基板1: Nucleo STM32F446RET6 64 PINS (以下、F446RE)
基板2: Nucleo STM32L476RGT6 64 PINS (以下、L476RG) 
```

### 前置き

- [STM32 > License > Nucleo基板 > 商業利用できない](https://qiita.com/7of9/items/89e57bbb76efafa4fdf5)

NucleoやDiscoveryをそのまま商業利用できない場合、自作のSTM32基板を開発することになる。

自作の場合、ST-LINKは搭載できないだろう。
デバッガが必要になる。

デバッガとしては[ST-LINK V2](http://akizukidenshi.com/catalog/g/gM-04012/)や[STLINK-V3SET](http://akizukidenshi.com/catalog/g/gM-14361/)がある。
これらの入手性は高くはなく、通販での受取になる（著者の行動範囲では）。

一方で、Nucleo基板は容易に手に入る。Nucleo基板上にはST-LINK/V2-1が搭載されている。

- [ST-LINK/V2 と ST-LINK/V2-1](http://blog.livedoor.jp/prittyparakeet/archives/1070961147.html)
    - by prittyparakeetさん
    - 情報感謝です

Nucleo基板上のST-LINK/V2-1を使用してデバッグができれば、自作STM32基板もデバッグできるのではないか、と考えてその方法を探した。

## 基板搭載のST-LINK/V2-1を使用して、別の基板をデバッグする

### 情報

- [Nucleoボードをぶった切って書き込みとUART通信した](http://kt33.hatenablog.com/entry/2019/02/14/163317)
    - by kt33-JASALMAさん
    - 情報感謝です

上記の例ではNucleo基板のST-LINK/V2-1とSTM32メインMCU基板を分離して、配線をした上でデバッグをしている。
同じことを二枚のNucleo基板で試してみることにした。

<font color=red>Note:上記のリンクの再現が多くであるため、上記リンクを参考にして、なお、参考になる情報があると考えられたら、以降を読んでみてください。</font>

### 使用基板

- Nucleo STM32L476RGT6 64 PINS (以下、L476RG) 
    - こちらのST-LINK/V2-1を使う
- Nucleo STM32F446RET6 64 PINS (以下、F446RE)
    - こちらをデバッグする
    - そのため、ST32CubeIDEのプロジェクトはF446RE用に作る

### ジャンパ設定

- L476RG
    - CN2のジャンパ二つをはずす
        - => デバッグにSWDを使用するようになる
    - B2近傍のJP5ピンをはずす
        - => こちらのSTM32メイン基板の電源を切るため
        - [AN4989](https://www.st.com/content/ccc/resource/technical/document/application_note/group0/3d/a5/0e/30/76/51/45/58/DM00354244/files/DM00354244.pdf/jcr:content/translations/en.DM00354244.pdf) Appendix BのFigure 67. ST-LINK cuttable part of NucleoにJP5をはずす記載がある

### 配線

L476RGのST-LINK/V2-1用基板のSWDコネクタ(CN4)から、F446REのメイン基板のCN7へ接続する。
(CN4:1という記載は、CN4の1番ピンを意味する。)

| 用途 | L476RG | F446RE | ケーブルの色 |
|:-:|:-:|:-:|:-:|
| VDD_TARGET | CN4:1 (3.3V) | CN7:16| Red |
| SWCLK | CN4:2 | CN7:15(PA14) | Yellow |
| GND | CN4:3 | CN7:20(GND) | Green |
| SWDIO | CN4:4 | CN7:13 (PA13) | Orange |
| NRST | CN4:5 | CN7:14 (Reset) | Brown |

ケーブルとしては[QIケーブル1S-1S 300mm/赤 3本入](https://eleshop.jp/shop/g/gG2F413/)の各色を用意した。

### USB接続

Ubuntu 18.04 LTSのシステムに二本のケーブルでUSB接続する。

- L476RG
- F446RE

それぞれのドライブがマウントされる。


### STM32CubeIDE

以下の通り実施する。

- `1. STM32CubeIDEでF446RE向けのプロジェクトを作る。
詳細は割愛するが、[2019-07-03 STM32L476 > FreeRTOSでLチカ (環境: Ubuntu 18.04 LTS + STM32CubeMX + STM32CubeIDE)](https://qiita.com/7of9/items/9ebf8331c8916613f2b2)記載の内容をF446RE選択で実施する。
    - PA5のLチカ

- `2. Run > Debug configurationsの「Debbugerタブ」において、L476RG上のST-LINK/V2-1を使用する設定をする。図2-1のように「GDB Server Command Line Options」の「Use specific ST-LINK S/N」にてL476RG側(メイン基板の電源を切った方)のシリアル番号を選択する
    - どちらのシリアル番号がどちらの基板かは、片方ずつ接続して確認すればいい

図2-1. Debug configurations > ST-LINK/V2-1の指定
![Screenshot from 2019-07-22 21-08-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/1b2e51ec-f45d-079a-1006-908e00595b32.png)

- `3. F446RE向けのプログラムをビルドし実行する。F446RE側のデバッグが開始される。ブレークポイントで停止すると、該当の処理（例：LEDの点灯）を停止できる


### 実行例

右がST-LINK/V2-1を使っている基板(L476RG)で、左がデバッグされている方(F446RE)。
F446REのLED(緑色）が１秒ごとに点滅する。
![IMG_0936.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/ac5634bc-c209-fa3e-b614-1a8410964adb.jpeg)