Доброго времени суток!
Всё ПО пишу в Keil.
Есть самописный Bootloader, функция джампа на пользовательское ПО стандартная, адрес начала пользовательского ПО 0x08002000:
Код:
void GoToUserApp(void){
uint32_t appJumpAddress;
void (*GoToApp)(void);
appJumpAddress = *(__IO uint32_t*)(FLASH_DISK_START_ADDRESS + 4);
GoToApp = (void (*)(void))appJumpAddress;
SCB->VTOR = FLASH_DISK_START_ADDRESS;
__set_MSP(*(__IO uint32_t*) FLASH_DISK_START_ADDRESS); //stack pointer (to RAM) for USER app in this address
GoToApp();
}
1) Есть пользовательское ПО со стоп-режимом, заливаю обычным ST-Linkом, всё работает, как часы
2) Шью через бутлоадер:
а) та же самая прошивка не работает как надо. МК не просыпается от RTC,
б) выключаю стоп-режим, прошивка начинает работать.
Т.е. явно нарушена адресация таблицы векторов прерываний
В файле system_STM32L1xx.c указал адрес смещения таблицы векторов
#define VECT_TAB_OFFSET 0x00002000U
в Target IROM1 указал 0x8002000 соответственно
на вкладке Linker поставил птицу в Use Memory Layout from Target Dialog
Что я упускаю?