Understanding SysTick_Handler()

I am setting up a project to make some tests with an STM32F7 MCU. I am using the STM32Cube HAL and the idea is to configure some timers and their interrupts using this HAL. The board is equipped with and 25MHz HSE so in the code I am configuring the HSE and disabling the PLL.

The problem is that if I don't write the SysTick_Handle() function inside my code the MCU and the interrupts don't work. The PC goes to the SysTick_Handler() defined inside "startup_stm32f769xx.s".

I am trying to understand why is it a must to define the SysTick_Handler() in the code so you can use the HAL properly but I am not sure whether I really understand why.

In the FAQs of the HAL manual the third step of the sequence to use the HAL drivers is:

The use of the ticker is systemic to the HAL implementation, dangerously so, there are a vast number of blocking loops.

It is critical that the SysTick interrupt has the highest preemption level as your callback functions are occurring in interrupt context. Even for timeout loops one has to be skeptical of a design that can block in interrupt context for >1ms for no useful purpose.

There are some HAL/BSP implementation that use the RTC, HW counters, or TIM to generate the time base.

Also notice that many of the timeouts in the HAL read the timer tick count at the entry into the HAL call. And like the USART code, when calling it as a blocking call, checks for the timeout delta at the end of each byte being written. If you get interrupted away, the tick count keep going while interrupted away. When you return the output of the data my have worked on time, but the function will return a timeout error because the delta was larger than the timeout value passed in.