STM32CubeIDEを使ってみよう STM32H745 DualCore編（２）割り込みを使ってみよう

__STM32CubeIDEを使ってみよう STM32H745 DualCore編__ の2回目として割込みを使ってみましょう。

https://qiita.com/usashirou/items/c92fcfb74dca5aa3dd82

普通の1コアのSTM32の場合は、こちらをご覧ください。
__STM32CubeIDEを使ってみよう　How To STM32CubeIDE 日本語版　(7) 　割り込みを使ってみよう__

https://qiita.com/usashirou/items/0bcb008ef83a159538dd
# プロジェクトをコピーする
まずは、最初に作ったプロジェクトをコピーします。
__Ctrl+C⇒Ctrl+V__ で __コピー&ペースト__ をします。
プロジェクト名を入力して __Copy__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/36bfb69d-5e7f-87c8-bae9-d84123182bbf.png)
## Pin&Configuration
コピーしたままではプロジェクトの __Pin&Configuration__ を開く事が出来ません。
__iocファイル__ の名称を __プロジェクト名__ と同じものに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c80cc75f-2c4a-2ce4-6e0b-4cf455de6d36.png)
開く事が出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/77f9991d-bf7c-bbd5-d0bc-81ca12af5241.png)
## GPIO設定
今回は __スイッチB1__ を割込みで使用します。
__GPIO_Input__ を __GPIO_EXIT13__ に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/ae21a72e-2537-e4af-c101-dc9a579ad46c.png)
__GPIO→Pin Context Assignement__ を __ARM Coetex M7__ にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/18fee14b-b9d2-8e38-587e-33f90ae67fa6.png)
__GPIO mode__ を設定します。
今回は、__External Interrupt Mode with Falling edge trigger detection__ にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/1c77ae2b-28cc-bd72-fb91-31d1f0e21519.png)
__User Label__ を今回は __B1__ としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/43c6c9da-4250-fb5a-ccc1-a94fbd8b4333.png)
## NVIC設定
次に割込みの __NVIC__ の設定をします。
__NVIC⇒Exit line[15:10]interrupts__ のチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/72a7096c-7b47-c9e2-4653-9474af92ea71.png)
__Exit line[9：5]interrupts__ をチェックできない事を確認してください。
## プログラムの生成
__DeviceConfiguration Tool Code Generation__ をクリックしてプログラムを生成します。
![5-6-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/5abf68d3-175b-294f-5a18-56d5aa4e8106.png)
作ったプログラムは動作しないように __//__ を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/ec6b16f7-39d1-2db0-c796-edbb5c2a30ce.png)
__/* USER CODE BEGIN 4 */__ にコードを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/246cbfc0-12b0-2a4e-a055-fd2fbcfea607.png)
```
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_13){
        HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
    }
}

/* USER CODE END 4 */
```
__GPIO_PIN_13__ を __B1_Pin__ とする事も可能です。
これは、 __User Label__ において __B1__ と設定したためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/640c0dca-d754-185b-0c4e-61161160d4c9.png)
__stm32h7xx_it.c__ の該当箇所を見る事で設定されている名称を確認することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/1579e3a5-3459-0d17-1c2c-29e5590cf8e6.png)
## コンパイル
それではコンパイルしましょう。
コンパイルプログラムの確認が出ますので、今回は __H745-2_CM.elf__ を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/32f56d93-a485-1405-0627-c385e8a5bb99.png)
__H745-2__ であることを確認し、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e3d2e415-0772-8ee4-4023-0ec49d9bd697.png)
確認画面が出たらOKをクリックしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e0c57aa5-9b7a-0bb4-6192-ab7ae47eafe7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b65bf3df-e876-4021-11aa-f4d8afabff86.png)
問題なく、コンパイルされると、スイッチを押す事でLEDが点灯、消灯を繰り返すようになると思います。
以上で、スイッチにより割込みを使う事が出来るようになりました。