1. В прерывании EXTI нужно очищать флаг прерывания для возможности повторного срабатывания этого прерывания.
2. SysTickDelay должен иметь тип uint32_t, иначе вы не используете целую половину возможного диапазона.
3. Хорошо что у вас SysTickDelay декрементируется, а то были случаи.
4. Никаких прерываний с дилеями внутри! Делайте асинхронно, с таймерами, спинлоками (это просто переменная-флаг) и т.д.