前提条件:app独自运行没有问题,初始化或者长时间运行都不会跑飞;但是加入bootloader后主程序出现异常。
程序框架:
0x08000000 ~ 0x08003000 :bootloader占用;
0x08003000 ~ 最大: app占用;
通过查阅资料发现是APP应用程序起始地址修改后中断向量表没有重映射,在APP进入main函数前会先执行system_stm32xxxx.c中的SystemInit这个函数,函数内的中断向量映射地址赋值为
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
其中FLASH_BASE 就是默认程序起始地址0x8000000,VECT_TAB_OFFSET偏移地址默认为0;
现在整个APP的地址偏移0x3000,因此将VECT_TAB_OFFSET修改为0x3000后重新烧录运行程序功能都OK了。
注:
若看到没有定义USER_VECT_TAB_ADDRESS,则把上面一行的/* #defiene USER_VECT_TAB_ADDRESS */改为
#defiene USER_VECT_TAB_ADDRESS即可。