stm32 bootloader 跳转application后失败
最近遇到一个困扰已久的问题,使用STM32F103VE的单片机 ,按照常规方式测试,所有功能均正常,然后为了以后程序升级方便,先刷bootloader程序,然后再通过网口下载application程序,结果发现如下的问题(下边分步介绍):
1:升级下载工具提示下载完成,然后板卡应当会工作在application模式下,但实际上未看到任何功能,再次尝试依旧
2:用debug调试,先用JLINK下载bootloader程序,然后更改application工程内不擦出所有sector的方式将应用程序也下载进去并启动debug,这样就能将两者程序都通过JLINK下载进去并能在线调试
3:程序能成功从bootloader跳转到application的main入口,单步往下调试,程序都能正常工作,但使用全速运行(无断点方式), 程序就跑飞
4:此时点击停止按钮,程序停在启动文件的中断服务函数的末尾 B .处,好像是产生中断后没找到中断服务函数
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
B .
ENDP
ALIGN
5:屏蔽其他中断初始化,只使能一个定时器中断,在该中断内断点,每次都能进来执行并成功退出,但取消断点运行仍然不行
6:下边是application的main处初始化代码
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
ReadFlashCfg();
DrLed();
DrTimer_Init();
system_stm32f10x.c文件设置
#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
target option里的IROM1设置
start 0x8008000 size 0x1C000
mish.h文件设置,即偏移地址为0x8000
#define NVIC_VectTab_RAM ((uint32_t)0x20000000)
#define NVIC_VectTab_FLASH ((uint32_t)0x08008000)
#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
((VECTTAB) == NVIC_VectTab_FLASH))
bootloader程序是公司成熟的产品,其他程序可以正常执行,唯独此程序有问题。初步推测是中断重定位后出的问题,中断后指向非法地址了(但不理解单步调试可以运行)。哪位大神了解此情况,知道一下问题出在哪,感激不尽!