47 stm32f0 IAP跳转APP后中断无法进入

47.1 引言

本次问题叫做:stm32f0 IAP跳转APP后中断无法进入

之前弄了stm32f103的iap程序,因为stm32f103有中断向量起始地址控制器,直接修改VECT_TAB_OFFSET的值,然在APP里面NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2400);,这样就行了,但是cortex-m0不行,因为没这个功能,所以导致需要较为特殊的处理。然后我根据网上的资料,仿照stm32f030单片机的的机制去做了另外一款同样是cortex-m0的IAP,但是问题出现了,在原来stm32f030单片机可以正常运行的APP,在新的cortex-m0单片机上不行,程序从IAP跳转到APP的时候,所有的中断函数都进不去,但在IAP的程序中,中断函数是没问题的,那肯定在是中断向量表拷贝这边出现的问题,然后找问题找了一个晚上,今天早上弄好了,特此记录一下。

 

47.2 实验

本实验使用的是cortex-m0处理器,编写了IAP以及APP应用程序,IAP跳转到APP是正常的,APP的程序也在正常运行,除了中断外!!!!!为此,开始了找bug之旅,以下是常见的cortex-m0在APP中进行拷贝中断向量表的操作!

#define APPLICATION_ADDRESS (uint32_t)0x8002400
#if   (defined ( __CC_ARM ))
  __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
#endif

	/* Enable the SYSCFG peripheral clock*/
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); 

	// copy vector table from flash to ram
	for (uint8_t i = 0; i < 48; i++) 
    {
        VectorTable[i] = *(__IO uint32_t *)(APPLICATION_ADDRESS + (i << 2));
    }
	/* Remap SRAM at 0x00000000 */
	SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

上述的跳转后APP的向量拷贝,我在stm32f030这款单片机上,是正常的,但是在另外一款cortex-m0的单片机不行,原因是:

不能用这个函数:RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); //这个函数估计重置系统配置时钟后,没起来,然后后面设置的没用

要把这个函数改为:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //这个是系统配置使能,那就正常了。

如下所示:

#define APPLICATION_ADDRESS (uint32_t)0x8002400
#if   (defined ( __CC_ARM ))
  __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
#endif	

/* Enable the SYSCFG peripheral clock*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

	// copy vector table from flash to ram
	for (uint8_t i = 0; i < 48; i++) 
    {
        VectorTable[i] = *(__IO uint32_t *)(APPLICATION_ADDRESS + (i << 2));
    }
	
	/* Remap SRAM at 0x00000000 */
	SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

就这样改完后,就一切正常了!Over!

 

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值