Новую прошивку помещaю в массив памяти flash микроконтроллера. Далее, использую функцию постраничного копирования этого массива в начало flash по адресу 0X00400000 (flash base address). Для функции использую атрибут __ramfunc, который копирует ее код из flash в ram во время выполнения записи. Соответственно перед этим запрещаю все прерывания (например, void __disable irq (void)

В принципе, проект работает, только когда ему подсовываешь свою же старую прошивку, если новую, измененную, то после выключения-включения питания мк виснет. Может проблема в том, что не все прерывания отключаются? Или в чем то другом..