STM32 bootloader
Добавлено: Пт май 05, 2017 13:03:07
Доброго всем дня! Написал свой бутлодырь под STM32f103. Делал это впервые, так что не пинайте. Вопрос такой: прошиваю сначала основную прогу например с адреса 0x800A000, с корректировкой размера (в options for target в Кейле), затем прошиваю бут с опцией прошивальщика erase sectors. Сначала стартует бут, потом переходи в основную прогу, все норм. Но вот если питание после перепрошивки выключить и включить снова, стартует бут и не переходит в основную прогу. В чем может быть проблема?
Функция перехода к осн приложению
Перенос векторов в основном приложении
Функция перехода к осн приложению
Код: Выделить всё
void jumpToApplication(uint32_t addr)
{
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;
JumpAddress = *(uint32_t*) (addr + 4);
Jump_To_Application = (pFunction) JumpAddress;
// Initialize user application's Stack Pointer
__set_MSP (*(vu32*) addr);
Jump_To_Application();
}
Код: Выделить всё
__set_PRIMASK(1);
// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0800A000);
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0xa000);
__set_PRIMASK(0);
pll_init ();
pio_config ();
// ðàçáëîêèðîâàíèå ôëýøà
FLASH_Unlock();
// èíèò ôëýøà
EE_Init();
//__disable_irq();
for(i_tmp=0;i_tmp<12;i_tmp++){set_sns_lines(i_tmp);}
USART1_Init(2); //9600
RTC_conf ();
while(1)
{
}