Posted on February 01, 2018 at 15:28Drill into the HAL_TIM_PWM_Start_IT method.
You'll see it sets the Compare event interrupt with;
__HAL_TIM_ENABLE_IT(htim, TIM_IT_CCx);
Directly after your Start IT call, add the following to also enable the Update event;
__HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
in your case, based on your code sample, it would look like;
HAL_TIM_PWM_Start_IT(&_t_HTIM1, TIM_CHANNEL_3)
__HAL_TIM_ENABLE_IT(&_t_HTIM1, TIM_IT_UPDATE);
If you are using a CubeMX generated project,
you have to check both interrupts

the interrupts can be handled in
TIM1_UP_TIM10_IRQHandler(void) for the update event
TIM1_CC_IRQHandler(void) for the compare event
or you can provide your own own handlers for the weak methods;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) for the compare event
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) for the update event
If you are using count UP, active HIGH polarity;
Update event is rising edge, state is HIGH in handler
Compare event is falling edge, state is LOW in handler
Note, if you were using another timer, say TIM2,
There would only be one global interrupt checkbox in cubemx,
The global handler would be;
TIM2_IRQHandler
and the your implementations of;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) for the compare event
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) for the update event
would be common to all your compare and update interrupt enabled timers.