ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
603681 Топик полностью
rod-i-on (12.06.2015 16:56, просмотров: 579) ответил Vit на Где-то в первых строках (обычно в конце SystemInit()) переключается адрес таблицы векторов
Я новичок в этом. Что здесь что? 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