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)))();

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值