STM32CubeIDEを使ってみよう STM32H745 DualCore編

STM32CubeIDEを使ってみようの続編として __STM32H7シリーズのデュアルコア STM32H745__ を使ってみましょう。
本記事において使用する __NUCLEO-H745ZI-Q___ は2022年10月1日開催の __IoT あるじゃん　ALGYAN x STM x mROS-base 世界初！mROS 2ハンズオン__ においてを __STマイクロエレクトロニクス社 村澤様__ より頂戴したものを使用しています。
なお、コードの書き方等については __STM32CubeIDEを使ってみよう　How To STM32CubeIDE 日本語版　Lチカ編__ をご覧ください。

https://qiita.com/usashirou/items/65be086c28f7a6feac7d
# プロジェクトを作る
__File⇒New⇒STM32 Project__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/62be0a3f-cc1c-69dd-cccd-641a6307cf69.png)
# ボード設定する
__Board Selector__ のタブにおいて __STM32H7__ のチェックをつけて今回使用する __NUCLEO-H745ZI-Q__ を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f88d8106-1cb8-02ce-761b-8fb95010f7c4.png)
プロジェクト名を入力して __Next__ をクリックします。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/04f15ca1-b5da-8c2f-7674-1067c23f5cb9.png)
これで __H745__ のプロジェクトが生成されました。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6af2b982-ce88-be14-f0ae-751ab6f1e513.png)
# そのままでは動かないプログラム
この段階でLD1~3のピンが設定されているのでプログラムを打ち込んでみましょう。
LD1~3が出てきません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/ddee7f8d-2747-4f73-7a94-c2a6d558e6ed.png)
エラーが出てしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a2fbbb53-1abc-9de5-048b-07affa2b1fcb.png)
ピン番号を入れても動作しません。
# コアとGPIOを紐づける
次にコアとGPIOを紐づけてみましょう。
__Pinout&Configuration__ の画面において該当のピンをクリックして __Pin Resevation__ を __Free__ から使用コアを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/91bcbf75-062e-08ca-858a-5c946e1eb54d.png)
次に __DeviceConfiguration Tool Code Generation__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/04b70e00-7f76-2ea0-1bd7-d6e710ccd28e.png)
# プログラム作成
今回は __LD1__ が選択可能になっています。
コードは必ずの間に記述してください。
コードジェネレートする事で消えてしまいます。
```
  /* USER CODE BEGIN 3 */
  /* USER CODE END 3 */
```
### 追加コード例
```
    /* USER CODE BEGIN 3 */
	  HAL_GPIO_TogglePin(LD1_GPIO_Port,LD1_Pin);
	  HAL_Delay(500);
  }
　  /* USER CODE END 3 */
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/0ccf26d9-2b90-fcc3-b161-2a282db7e3c0.png)
それではコンパイルしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/772cbd47-3339-71ca-962a-cb4b33867b05.png)
無事動作しました。
![5-2-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/46ceb1da-e30a-92d1-e861-e165a5d6fd71.png)
これはGPIOがコアとつながっていない為です。
今回は、__１つのGPIOは1つのコアが使用するように設定__ します。
# 2つ目のコアで動かす
それでは次はもう一個のコアで動かしましょう。
__Pinout&Configuration__ の画面においてもう一個のコアを選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6a3b620f-7e4d-5547-bd3f-564afef0e9cc.png)
__LD2,LD3__ が選択できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c5834ac7-ce4b-3bce-da7a-18055b65c592.png)
この状態で __Run__ を押してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/17faf311-50de-915d-d9e8-1700d33f0a54.png)
正常に動作してそうに見えますが、残念ながら動作しません。
![5-3-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/3c663f69-f0eb-6d28-bc6e-deb28b0e162d.png)
それではマルチコア用に修正しましょう。
# マルチコア向けに設定を変更する
__Run As⇒Run Configurations__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9065bd40-6c38-92a0-8a55-21e61d5944ef.png)
最初にM7コアを設定します。
__CM7__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/26400633-f13f-07c7-3e27-23b757bae26b.png)
__Startup⇒Add__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b245f3d9-a242-8634-10e8-8ee813771fd6.png)
__Project__ 名に __CM4__ を __Build Configuration__ を __Debug__ にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6541b73a-9a0b-7e5a-328f-33189430b923.png)
以下のような構成になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c106061a-2df8-8e25-618b-c1f566bb50be.png)
次にM4コアの設定をします。
__CM4__ をクリックします。
__デバッガ__ から
__ポート番号：61238
Type：None__
とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/3c1ee8f3-7d0b-bb48-9fb7-1ed8891b0cdc.png)
次に __Startup⇒Edit__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/106a1a28-4bd7-a9b0-3e86-f10682a7702e.png)
__Download__ のチェックを外してOKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/71d67932-0852-f5b0-4725-6dd5463bf877.png)
__Download__ が __false__ になっている事を確認し __Apply__ をクリックし、__OK__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6ceba1ef-3324-185c-8d6c-d2a64c79d5db.png)
これでコンパイルする事で両マイコンにプログラムを転送して、動作する事が出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a6970f0b-b6e9-b03c-3bf4-c0f12dc50bd6.png)
以上で2つのコアが動作するプログラムを作る事が出来ました。