stm32 bootloader跳转

stm32执行完loader程序后如何跳转到应用程序呢,一共有四件事要做:

第一,关闭外设中断,关闭外设时钟,失能外设功能,如果不关闭,跳转到app区后会产生各种奇怪的问题

第二,重设中断向量表位置,设置在app程序的起始地址

根据stm32中断向量表的定义,表的地址就是可执行程序的起始地址,设置好后方便应用程序进入中断后可以找到对应的中断程序入口

第三,重设堆栈指针,设置在app程序的起始地址,application_addr + 0x00000000

stm32复位后的第一件事就是取堆栈地址,此处跳转也是一样,第一件事就是取得堆栈地址,想想ucos中切到新任务第一件事不也是找到堆栈地址吗

第四,取出app程序的main函数地址,application_addr + 0x00000004

stm32复位后的第二件事就是找到复位地址,然后从里面取得main函数的地址,根据stm32中断向量表的定义,复位地址的偏移量是0x04,紧挨着堆栈栈顶地址,因此需要取得application_addr + 0x00000004地址处的内容,然后执行
 

typedf void(*pfunc)(void);

((pfunc)(*(uint32_t*)(application_addr + 0x00000004)))();

 

你可能感兴趣的:(stm32 bootloader跳转)