问题1:
我用CAN接口做了IAP
两个程序区
8000000-8002000是BOOT区,写入的启动代码,引导应用程序写入的。
8002000-结尾是应用区,APP程序区
现在的问题是进行APP程序后,不响应中断
如果不用中断程序,在APP工作一切正常,用中断程序的话就不正常
说一下我的设置:
在应用程序区APP区,
IROM设置8002000-801E000共56K为应用程序区。
在LINKer中设置R/O base为8002000
在NVIC初始化时设置: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
其它地方没有动过。
答案:
问题是在这里产生的,当从CAN接受中断中跳转到应用区时,整个应用区程序都是Boot程序中CAN接收中断的ISR,于是在应用区中任何优先级低于CAN接受中断的中断程序都是得不到执行的。
问题2:
IAP跳转到App中会死在下面这个函数里?
void Delay(u32 nCount)
{
TimingDelay = nCount;
/* Enable the SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Enable);
while(TimingDelay != 0)
{
}
/* Disable the SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Disable);
/* Clear the SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Clear);
}
答案:
在stm32f10x_nvic.h
中,找到#define ((u32)0x08000000)
这
一
行
,
改
为
#define
((u32)0x08002000) IAP下载和APP应用程序运行正常。
NVIC_VectTab_FLASH NVIC_VectTab_FLASH