STM32G0 HAL のEXTIコールバックに非互換性

By | 2019年12月21日

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のコミュニティで修正を要請していまです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください