STM32G0のHALのEXTIは、コールバックの名前が変更になっています。これはアプリケーション・コードとの間で非互換問題を起こします。
STM32G0 HALのユーザーズマニュアルUm2319 Rev 1.0は、3.11.2節でこう書いています。
When selecting EXTI mode with interrupt generation, the user must call HAL_GPIO_EXTI_IRQHandler() from stm32g0xx_it.c and implement HAL_GPIO_EXTI_Callback()
UM2319 Rev 1
CubeIDEはこれに従い、EXTI割り込みが発生するとHAL_GPIO_EXTI_IRQHandler()を呼び出すコードを生成します。
ですのでユーザーはこれに従ってHAL_GPIO_EXTI_Callback()関数を実装し、割り込みを待ちます。ユーザーがHAL_…という名前の関数を実装するのは居心地が悪いですが、割り込みにおけるこの方法はSTMのHALの割り込み実装で一貫したやり方です。
さて、STM32G0ではこの方法でアプリケーションを書いても全く割り込みをキャッチできません。STM32G0 HALのEXTIコールバックは次のように書かなければなりません。
- void HAL_GPIO_EXTI_Rising_Callback (uint16_t GPIO_Pin)
- void HAL_GPIO_EXTI_Falling_Callback (uint16_t GPIO_Pin)
キサンナンシヨンカ(北九州市の方言)。
私が調べた限り他のシリーズでは冒頭に述べたHAL_GPIO_EXTI_Callback()を使います。調査したのは以下のシリーズです
- STM32F0 HAL
- STM32F4 HAL
- STM32F7 HAL
- STM32G4 HAL
- STM32L1 HAL
- STM32L4 HAL
要するにSTM32G0 HALのEXTI実装はこれらのHALとの互換性をぶち壊してしまっています。Hardware Abstraction という言葉に正面から唾を吐きかける行為です。
この問題はSTのコミュニティで修正を要請していまです。