startup.c

Добавим вектор для обработчика таймера и сам обработчик:

    0,                  /*!#13 cortex-m4 penable request for system service interrupt */
    sys_tick_handler,   /*!#14 cortex-m4 system tick timer interrupt */
    /* External Interrupts */
/* system tick timer handler */
void sys_tick_handler(void) {
    hard_delay();
}

Также изменим обработчик прерывания exti0 - уберем условия и добавим очистку очереди и выключение прерывания:

/* exti0 irq handler */
void exti0_irq_handler(void) {
    LED_PORT->ODR ^= GREEN_LED | RED_LED;
    /* clear pending irq */
    EXTI->PR |= EXTI_PR_PR0;
    /* disable exti0 interrupt */
    EXTI->IMR &= ~EXTI_IMR_MR0;
}