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); // ← ダメ?