CubeMX/HALのSystick割り込みについて

STM32マイコンのCubeMX/HAL環境では、HALライブラリ内でSystick割り込みを利用してHAL_Delay関数や通信のタイムアウト処理等の時間を管理している。(Tickカウンタの変数名はuwTickである。)


Systick割り込みより優先しなければならない他の割り込みがある場合、Systick割り込みの優先度を下げる。

    // Systick割り込みの優先度を最低(※)に設定
    HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);

※ CubeMXで、NVICのPriority Groupが「4 bits for pre-emption priority 0 bits for subpriority」の場合


もしもSysTick割り込みを無効化したいなら下記のようにする。ただし、HAL_Delay関数等から帰って来られなくなるので、それらを使わないか、別途なんらかの方法でuwTickをカウントすること。

    // SysTick割り込みを無効化する
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
                 // SysTick_CTRL_TICKINT_Msk   |  ←割り込みを無効
                    SysTick_CTRL_ENABLE_Msk; 



ちなみに下記のようにしたらHard Faultが発生した。原因はよく分からない。

    HAL_NVIC_DisableIRQ(SysTick_IRQn); // ← ダメ?