- STM32F4 の各 IO ポートは外部割り込み入力として使用できます。
- 外部割り込みライン EXTI には、外部 IO ポートの入力割り込みに対応する 0 ~ 15 のみがあり (対応関係は、GPIOX.0 が EXTI0 にマッピングされます。たとえば、GPIOF.0 が EXTI0 にマッピングされます)、EXTI ライン 16 ~22 は他のユニークなイベントに関連しています。
- 各割り込みラインに対して、対応するトリガー モード (立ち上がりエッジ、立ち下がりエッジ、エッジ トリガー) を設定でき、各割り込みラインのイネーブルを設定できます。
- 外部割り込みの一般的な構成手順は次のとおりです。
- SYSCFG クロックを有効にします (外部割り込みを使用する限り、 GPIO と割り込みライン間のマッピング関係の構成などの関連レジスタを使用する必要があるため、SYSCFG クロックをオンにする必要があります); (APB2 上)
- IO ポートと割り込みラインの間のマッピング関係を設定します (SYSCFG_EXTILineConfig())。
- オンライン割り込みの初期化、トリガ条件の設定など、EXTI_Init();
- 割り込みグループ (NVIC) を構成し、割り込み NVIC_Init() を有効にします。
- 割り込みサービス関数 EXTIX_IRQHandler() を作成します (STM32 は 7 つの割り込みサービス関数のみを使用できます。0 ~ 4 は EXTI3_IRQHandler() などの別個の割り込みサービス関数で、5 ~ 9 は割り込みサービス関数を共有し、10 ~ 15 は次のような割り込みサービス関数を共有します)。 EXTI15_10_IRQHandler()、すべての STM32 割り込みサービス関数の名前は、startup_stm32f40_41xx.s で定義されています)
- その他の外部割り込みの共通機能
EXTI_GetITStatus(); 割り込みラインの割り込みステータス、発生したかどうかを確認します。
EXTI_ClearITPendingBit(); 割り込みラインの割り込みフラグビットをクリアします。
- 一般に、対応する GPIO 初期化とクロック イネーブルは、割り込みをトリガーする関数に書き込まれているため、割り込み構成では構成されません。ボタンを使用して割り込みをトリガーする場合は、カプセル化されたトリガー関数を割り込み構成に書き込むだけです。 、すべてのボタン 関連する関数は key() に記述され、次に key() が割り込み設定に導入されます
- 一般的に使用される割り込みサービス関数の形式
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!=RESET) //特定のラインで割り込みが発生したかどうかを判断します
{
割り込みロジック
}
EXTI_ClearITPendingBit(EXTI_Line3);//ラインの割り込みフラグをクリア
}