当前MCU的APP应用程序已经调试OK,为了实现在线升级,需要保留一个存储段添加BootLoader程序实现在线升级和应用程序的跳转;
STM32默认代码段起始位置为0x8000000,现在自定义应用程序起始地址为0x8008000,因此BootLoader程序在keil编译的时候起始地址保持默认不变,APP程序编译时需要修改起始地址为0x8008000,将两个bin文件合并后烧录到芯片运行发现BootLoader这边能正常跳转到APP,不过APP应用程序不能正常运行,被看门狗看住反复重启;
通过查阅资料发现是APP应用程序起始地址修改后中断向量表没有重映射,在APP进入main函数前会先执行system_stm32xxxx.c中的SystemInit这个函数,函数内的中断向量映射地址赋值为
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
其中FLASH_BASE 就是默认程序起始地址0x8000000,VECT_TAB_OFFSET偏移地址默认为0;
现在整个APP的地址偏移0x8000,因此将VECT_TAB_OFFSET修改为0x8000后重新烧录运行程序功能都OK了
关于STM32的BootLoader+应用程序后不能正常跳转的问题总结
最新推荐文章于 2024-05-17 16:40:57 发布