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程序大小,如图:

STM32 IAP/BOOT,三步速成_第1张图片

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

SCB->VTOR = FLASH_BASE | 0x20000;


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

你可能感兴趣的:(Bootloader,IAP,单片机,STM32)