ホームホーム

HAL_Delay 関数の注意点

STM32 マイコンの HAL ライブラリには HAL_Delay 関数という時間待ち用の関数があります。使い方はいたって簡単で,例えば,

    HAL_Delay(10);

とすれば,10 ms 待ってくれます。

しかしこの関数,ISR(割り込みサービスルーチン)内で使うときは注意が必要です。 なぜなら,HAL_Delay 関数は時間待ちをするのに SysTick 割り込みを使っているので,呼び出し元 ISR の割り込み優先順位が SysTick の割り込み優先順位より低くないと,SysTick 割り込みがブロックされてしまい,関数から戻ってこなくなるからです。

このことは HAL のユーザーズマニュアルにも書いてあるのですが,知らずに悩んだことがありました。

STM32CubeMX でコードを生成するときは,デフォルトですべての割り込みの優先順位が同一の 0 になっていたりするので注意が必要です。

川内 康雄 (著)