GPIO все успевает, согласно последнему рисунку смена с высокого уровня на низкий и обратно произошла за 3 сотых микросекунды, что в десятки раз быстрее времени всего периода.
У HAL по особому обрабатываются прерывания. Когда вы в кубе активируете прерывание таймера UpdateEvent, то в файле stm32f1xx_it.c автоматически создаётся обработчик с соответствующим именем - TIM1_UP_IRQHandler() (тут и далее для f1 проца и 1 таймера, у f4, думаю, также).
Когда случается прерывание таймера, мы попадаем в этот обработчик, он вызывает HAL-обработчик HAL_TIM_IRQHandler(&htim1). И тут уже происходит самое веселое - один за одним перебираются все флаги прерываний таймера. И лишь когда очередь дойдет до нужного - флаг сбрасывается и вызывается пользовательский коллбэк HAL_TIM_PeriodElapsedCallback() с вашим кодом.