STM32 IAP/BOOT,三步速成

Stm32的IAP现在已经是非常简单了,下面就教大家三步学成:

前提条件:已经有Flash读写函数,这个函数好弄,很多stm32例程里面都有


第一步(对于Boot程序):跳转到指定Flash位置函数,如下:

void Jump_To_Application(const u32 startAddr)
{
Jump_To_App = (pFunction)(*(vu32*) (startAddr + 4));
MSR_MSP(*(vu32*) startAddr);
Jump_To_App();

}


第二步(对于APP):在keil工程配置里设置程序起始地址和APP程序大小,如图:


第三步(对于APP):如果APP中涉及中断,则要在APP起始位置设置中断向量偏移,否则你会发现可以正常跳转运行,但是所有中断都不执行,就一句话:

SCB->VTOR = FLASH_BASE | 0x20000;


注意项:一般来说在Boot程序中不会使用任何外设,最多也就配置几个IO口,但如果你由于某些特殊原因需要配置了串口、ADC或DMA等一些外设的话此时跳转到APP程序的时候有可能会卡在APP程序的相应外设初始化函数里(如你在boot中配置了串口,这时就有可能卡在APP的串口配置里),这时你可能需要在跳转到APP之前(调用跳转函数之前)删除相应外设的配置(相应DeInit函数),如果这还不行那就在跳转之前静止所有中断(在keil里面是 __disable_irq();)然后在APP里面配置完相应外设后再开启所有中断;实际上我有碰到执行了这两个操作还是不行的(我在boot里面初始化了串口,用于在引导的时候打印信息),后面解决办法是在APP里在初始化完该串口后打印一个字符串出来,误打误撞解决的,为什么这样可以我也不知道大笑

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值