Я новичок в этом. Что здесь что? SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; Кроме того здесь http://www.feaser. …ual:ports:armcm4_stm32 они пишут
Because the bootloader remaps the base address of the interrupt vector table, make sure that your program's initialization routine does not set it back to its original location. This is the case if you use function SystemInit() from ST's standard peripheral driver library. To correct this you need to remove the following lines from function SystemInit():
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
С учетом найденного хочу потыкаться с NVIC_SetVectorTable
В приложении переносим таблицу векторов, ведь мы приходим сюда с активной таблицей векторов бутлоадера и первое же прерывание выкинет нас в обработчик бутлоадера, если он определен, а если не определен, то возможен переход неизвестно куда и его следствие - HardFault.
Код
void main(void)
{
__disable_interrupt(); // Запрещаем прерывания
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000); //Адрес таблицы относительно начала Flash