当单片机已下载过bootloader程序后,我们在编写应用程序时,无法直接使用keil的下载和在线调试功能,这非常不方便,只需执行一个小设置,即可完美解决,就像没有bootloader一样
1 设置中断向量
这个步骤在任何需要bootloader的项目都需要设置
打开startup_stm32f429xx.s文件,找到语句 LDR R0, =SystemInit,大概在第180行附近,在这句之前添加以下代码:
c
;/* 在调用SystemInit之前先设置VTOR */
LDR R0, =0x08080000 ; 应用程序起始地址
LDR R1, =0xE000ED08 ; SCB->VTOR地址
STR R0, [R1] ; SCB->VTOR = 0x08080000

为什么要在这里设置?
有些资料中说在进入main函数之后执行,如下:

这种方法有些情况下没有问题,但单片机启动后实际会先执行SystemInit函数,再进入main函数,这个过程如果发生中断,则PC会跳转到错误的地址,引起程序崩溃,所以最好尽早设置VTOR。
有些情况下,即使在.s中设置了VTOR,程序仍然可能会死机,这可能是由于SystemInit函数中重置了VTOR,此时,只要在main函数中也添加设置VTOR即可解决。
设置程序偏移:

2 修改编程算法
keil下载时默认从0x08000000处开始擦除和编程,通过下面一步设置,可使编程操作跳过bootloader所在区域


注意size不要设置地小于应用程序大小
现在可以直接下载了,在线调试也不受影响,bootloader程序会正常运行
