STM32 VS Code Extensionを導入する（Windows10）

# 『VSCode for STM32 extension』 ver1.0.0 が正式リリースされた
今までSTM32cubeIDEを使用していたのだが、VSCodeでの拡張が公式リリースされたのでどんなものか確かめてみる。
以前まではPlatformIOなどさらに別の拡張機能を導入しなければ整わなかった開発環境がこれで一気に楽になったらいいな。

ちなみに前提条件として、
* Windows10でのインストール
* STM32CubeMXがインストール済み

であること

# 拡張機能からインストール
* 拡張機能:マーケットプレースから『STM32 VS Code Extention』を検索してインストール
タブに追加されているかを確認。
![スクリーンショット 2023-04-11 121023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/fc743c10-6c8e-8a77-1cfc-d69af192826e.png)

必要な拡張機能はこれでおしまい。

# 試しにLチカをやってみる
## VSCode→STM32CubeMX
* 『Create a new application project』を選択するとSTM32CubeMXが起動する。
![スクリーンショット 2023-04-11 121845.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/14377b1d-70b3-9dcd-dadc-a1f54a57f84b.png)
今手元にあるのはNucleo-G031K8なので、今回はこれを使う。

* 『ACCESS TO BOARD SELECTOR』を選択
![スクリーンショット 2023-04-11 122316.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/51724b3f-6b9c-ed4e-c0bb-8b07c6a88cfc.png)
* 使用するボードを選択して、『Start Project』を選択。（ペリフェラルはデフォルトモードで進めます。）
![スクリーンショット 2023-04-11 122426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/1b9cb7bc-8eb7-e4d3-34f2-6234436854b2.png)

ペリフェラルをデフォルトモードで設定した場合、特に変更する部分はない。
* 『Project Manager』タブを選んで、『Project Name』に好きなプロジェクト名を、『Project Location』にワークスペースとなる場所を選ぶ。
* 『Toolchain/IDE』はSTM32CubeIDEを選択
* 『GENERATE CODE』を選択するとコードが生成され、『Project Location』で指定した場所にテンプレートが作成される。
![スクリーンショット 2023-04-11 123428.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/4afd10b8-d31a-3010-de32-7271dbc017ed.png)

これでSTM32CubeMXはおしまい。

## STM32CubeMX→VSCode
VScodeに戻る
* 『Importa local project』を選択
![スクリーンショット 2023-04-11 124221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/e69cc8da-5af8-91a2-c7dd-552b93e800f7.png)

* 先ほど『Project Location』で指定した場所に『.cproject』が生成されているので選択する。
* Core/Src/main.cを開いて、以下を変更
```C:Core/Src/main.c
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
    HAL_Delay(500);
  }
  /* USER CODE END 3 */
```
* 変更後、『Build』を選択し、問題がないか確認する。
![スクリーンショット 2023-04-11 130704.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/cb2bdf9c-24fd-b1e1-c9c5-c6e1e2a1e77a.png)

※問題があるときはちゃんと報告してくれる。（『;』忘れ）
![スクリーンショット 2023-04-11 130602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/f136f54d-c20b-e2c8-2a84-ff6538be8e79.png)
![スクリーンショット 2023-04-11 130512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/15209c32-ea00-9abd-832c-d7b4a086061e.png)

## デバッグ開始
* STM32とPCが接続されていることを確認し、『実行とデバッグ』を選択し、三角マークを選択するとデバッグが始まる
![スクリーンショット 2023-04-11 131247.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/a158281b-b1b4-2e7d-01e8-2494df76e778.png)

* 途中一時停止した場合は続行ボタンを選択
![スクリーンショット 2023-04-11 131534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/01ccbda4-0c05-c377-2671-3289f55c053b.png)

* LEDがチカチカし始めたら成功です。
* 終了する際は四角ボタンを選択すると止まります。

## ウオッチ式
* main.cで記述した`HAL_Delay(500);`の前にブレークポイントを設定
![スクリーンショット 2023-04-11 131938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/cd15df3c-d0e3-0169-e2fe-05ecdb3b2a80.png)
* ウオッチ式に『LD3_GPIO_Port』と入力
![スクリーンショット 2023-04-11 132029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/13cee566-c560-a030-2056-6d5971e5672d.png)

* この状態でデバッグを開始すると設定したブレークポイントで一時停止する。
* 続行ボタンを押すとウオッチ式の『IDR』と『ODR』が変化する様子が観察できます。
![スクリーンショット 2023-04-11 132332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/0b9bd416-8be6-ac87-3794-2f6158f54b37.png)
![スクリーンショット 2023-04-11 132432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653556/e91defc2-9efb-83f0-ab3d-8f724cbf65dc.png)

## Ninjaについて

* 別環境ではビルドもしくはデバッグ時に`[cmake] CMake Error: Error: generator : Ninja`とエラーメッセージが出ました。
* 用は『Ninja』というものが見当たらないらしいので、[Ninja](https://github.com/ninja-build/ninja/releases)をダウンロード（Windows10なので『ninja-win.zip』を選択）して解凍してください。
※私は『Program Files』内に新規でフォルダを作成して、その中に解凍しました。
* その後、Pathを通すためにコントロールパネルから、
システムとセキュリティ>システム>システムの詳細設定>環境変数>システム環境変数>Pathを選択し、
『編集』からNinjaの解凍先をフルパスで追加指定してください。
* 私はこれで動きました。

# 終わりに
* 他にもいろいろなことができるようですが、私自身もよくわからず使っています。
* 公式が[コミュニティーサイト](https://community.st.com/s/topic/0TO3W00000006cJWAQ/vscode-for-stm32)を開設しているので困ったときはそちらを頼る方が確実だと思います。