【STM32】無償のRAMモニターJ-Scopeを使おう

# 1. はじめに
[STのモータ制御開発キットで『自力で』モータを回す　Vol.1 強制転流](https://qiita.com/motorcontrolman/items/5a9c17008314f0224ef9) にて、ひとまずモータを回すところまでは解説を行いましたが、これはただ単純にモータを回しただけで<b>どのように回っているのか</b>まで踏み込んでいません。

さらなる深淵に踏み込むためには、マイコンの内部における演算内容が正しく行われているか、あるいはセンサによって検出した値が正しく取り込めているかをしっかりと検証する必要があります。
やりはじめると段々辛くなります


これら値を確認する方法の１つに、RAMモニターを使う方法があります。これは何かと言うと、マイコンの内部値を取り出してオシロスコープのように表示する方法です。

「RAMモニター」についてyoutubeで調べたりすると下記の動画がヒットしたりして、便利な時代になったなぁと思うと同時にやはりモータ制御開発には重要なアイテムなんだということを実感できます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/BtA0maKfjr4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

ただしこのRAMモニター、上記の動画で紹介されているようなプロ用のものは大変お高く、趣味用途では中々手が出しにくいものです。

そこで登場するのが表題にあるSEGGERのRAMモニター<b>「J-Scope」</b>です。

J-Scopeのアプリそのものは無償で使う事が出来ます。またJ-Scopeを使うために必要となるデバッガについても、STM32の評価ボードを利用する限りは購入の必要がございません。正直、<b>「え、こんな便利なもん無償で使っていいんか？」</b>というのが率直な感想です。※

そんなわけで、本記事ではJ-Scopeの利用方法を割と丁寧に示すものとします。
<b>さぁ、J-Scopeを使ってモータ制御沼の深みに漕ぎだそう！</b>

※ただしサンプル周期は1kHが限度で、それより上げるには課金(10万円前後)必要。いい商売してるなぁ…詳細は下記参照。
https://www.embitek.co.jp/product/jscope.html

# 2. 前準備 デバッガを用意する
「はじめに」にて記載した通り、STM32評価ボードを利用している場合はデバッガを新たに購入する必要ありません。（もちろん購入しても良いですが）
その代わり、デバッガのファームをST-LinkからJ-Linkに書き換える必要があります。詳細は下記を参考。
[超便利 最強デバッガ J-Link](http://idken.net/posts/2017-08-31-jlink/)

ファーム書き換えと聞くと何やら難しそうに思えますが、実際にやる事としてはSEGGERのサイトからユーティリティをDLしてきて実行、3回ぐらいキーボード入力を行うだけです。
https://www.segger.com/downloads/jlink#STLink_Reflash
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/3ae380b9-7e8a-6926-d7f2-c6acebdec30c.png)

下記画面では１を入力してエンター。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/0ec40049-71d7-22e8-2250-58ce1b10a3c5.png)


所要時間としては3分ぐらいで終わります。注意点としては評価ボードをPCに接続の上行うぐらい。


# 3. J-Scopeのインストール

## 注意点：Beta version(2021/9月時点：V7.55b)を使う
J-Link Software and Documentation PackをインストールすることでJ-Scopeも同時にインストールされるようになっているのですが、SEGGERのサイトには正規版とbeta版が置いてあります。

普通に考えればbetaをわざわざ使う必要はないように考えられますが、<b>浮動小数点をサポートしているのはbetaのみ</b>となります。このためbetaを使うこと推奨です。

https://www.segger.com/downloads/jlink#J-LinkSoftwareAndDocumentationPackBeta
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/be192577-e6ef-158a-e7d0-1e5bacd93a3b.png)

なお稀にですが、betaの浮動小数機能がSEGGER側の手違いによって無効化されている場合があるようです。この場合、フォーラムで報告するか静かに最新がリリースされるのを待ちましょう。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">J-Scopeですが、最新のbeta version(V7.55b)を確認したところfloatが読めるようになっていました。<a href="https://twitter.com/okayannnnnnnnnn?ref_src=twsrc%5Etfw">@okayannnnnnnnnn</a><br> 情報ありがとうございました！ <a href="https://t.co/wMUmDVjt51">https://t.co/wMUmDVjt51</a> <a href="https://t.co/ukBGKuM6ZB">pic.twitter.com/ukBGKuM6ZB</a></p>&mdash; モータ制御マン (@motorcontrolman) <a href="https://twitter.com/motorcontrolman/status/1439236909671149568?ref_src=twsrc%5Etfw">September 18, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


インストール時の注意点は特にありません。

# 4. J-Scope V7.55b以降での内部値モニター方法
2021/9月時点での方法は下記となります。

# 4.1 J-Scopeの設定
デバイスを接続対象となるマイコンに設定します。
STMのモータ制御用ボードの場合はSTM32F302R8となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/ccd1e91e-98a2-8fe7-e982-c3f02945d014.png)

その他の設定はデフォルトでも良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/70b95bdb-00d8-00e6-f124-83b9b7125a52.png)


## 注意点：Elf FileはDebugフォルダ下のものを使用する
当たり前の事なのですが、自分でやって詰まったポイントなので記載。

マイコン知識なさすぎて「Elfファイルって何…どこで貰えるのそれ…」というところからスタートした私ですが、何のことはなく<b>STM32プロジェクトファイル保管先のDebugフォルダ下</b>にあります。私の環境だと下記。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/ec38e33d-06b1-3dff-dc29-67267ad28370.png)

なぜわざわざこれを強調したかと言うと、<b>ビルドをリリースで行った場合にはリリースフォルダにもElfファイルが出来ます。</b>そしてこちらを参照した場合はJ-Scopeでのモニターが出来ません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/1277fd81-e6bc-b6a0-1178-f1069f1d6b5a.png)

モニターが正常に出来ない場合はElfファイルの場所が正しいかを見直しましょう。

Elfの設定まで完了してOKを押下すると、モニター項目の選択画面が出ます。適当にモニターしたい項目を設定しましょう。STM32評価ボードのデバッガを使う場合は項目は10個までです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/6446deb2-d01c-66d9-ef84-4e81412a5d0b.png)

# 5. J-Scope V6.11mでの内部値モニター方法
2021/5月頃は下記にてモニター可能でした。
## 5.1 CubeIDEでデバッグを開始する

### 5.1.1 CubeIDEの設定

虫のアイコン→デバッグの構成から設定変更を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/89eb799d-f4d1-dad6-94e0-6f7e8a56fed9.png)

CubeIDEの標準だとデバッグプローブにST-Linkを使用する設定となっていると思いますのでJ-Linkへと変更します。その他設定は特にいじる必要ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/49364e98-0279-8737-f02b-5c40c227fca8.png)

SEGGERのデバッガを別途購入、JTAG接続の場合はインターフェースも変更の必要あるかと思いますが、今回は評価ボード上のものを使いますので変更不要です。

## 5.2 デバッグの開始
虫ボタンを押してコンソールが走り、デバッグが開始されます。
J-Linkですが、使用目的の確認を１回／１日の頻度で問われます。チェックボックス入れてAcceptしてあげましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/059e291f-5dc1-6b4b-68c4-24e28c025c61.png)

そうすると、main文の一番最初でマイコンが止まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/94e67f36-bb72-ffe1-50fb-14c5abda458b.png)

「再開」ボタンを押してマイコンを動作させましょう。
忘れがちですが、これをしないとマイコンは止まったままです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/d1d2a459-7b7c-7889-3945-7ec0c709015b.png)



## 5.3 J-Scopeで内部値をモニターする
### 5.3.1 J-ScopeをJ-Linkと接続する
STMCubeにてデバッグを開始済みのため、Existing Sessionを設定することでJ-Scopを接続することが可能です。サンプルレートはSTM32評価ボードのデバッガを使う場合は1kHzが限度です。これ以上の設定を行うと怒られた上で強制的に1kHzとなるだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/74081950-c7a8-ac4c-4311-c5106b130e00.png)

elf選択における注意点は4章同様です。

## 5.4 モニターを開始する
赤いポチを推すとモニターが開始されます。
正直なところ、ちょっと感動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302506/a6583f62-20d6-f6a8-a9ac-0282d8c6c5c1.png)

# 6. 終わりに

これでやっとモータ制御沼の入り口に立ったぐらいです。続く。