startup.c

Подключим заголовочный файл ядра в котором у нас определены функции работы с прерываниями и системой управления программный сбросом:

#include "core_cm4.h"

Также в обработчик прерывания функцию вызова программного сброса:

/* exti0 irq handler */
void exti0_irq_handler(void) {
    if (EXTI->PR | EXTI_PR_PR0) {
        NVIC_SystemReset();
        /* clear pending irq */
        EXTI->PR |= EXTI_PR_PR0;
        /* disable exti0 interrupt */
        EXTI->IMR &= ~EXTI_IMR_MR0;
    }
}

Ну и в таблицу векторов внесем ссылку на обработчик:

    0,                  /*!%5 RCC                          */                                           
    exti0_irq_handler,  /*!%6 EXTI Line0                   */                       
    0,                  /*!%7 EXTI Line1                   */