欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F030 做IAP时NVIC_Init()中断卡死和“could not stop cortex-m device”问题分析

程序员文章站 2022-04-02 07:54:52
...

新项目需求,然后用STM32F030的MCU编写的一个IAP&&APP程序,这中间就出现一个问题,就是在APP跳转到IAP升级的时候出现了NVIC_Init()中断卡死现象,其中在APP main()函数里面开头就有这么一段代码

	memcpy((void*)0x20000000, (void*)0x8003000, 0xB4);
	SYSCFG->CFGR1 |= 0x03;

 也就是说中断的向量表地址在APP里面被移位了地址,然后跳转到到IAP程序中,IAP出现问题的代码段如下:

	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;  
	NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

执行到NVIC_Init()函数的时候,MDK无缘无故地被停止了,而且是不断地被停止,不管是F5还是step over都不行,其中单步运行的时候还出现了"could not stop cortex-m device"错误!

STM32F030 做IAP时NVIC_Init()中断卡死和“could not stop cortex-m device”问题分析

真是急死宝宝了!找了半天都没有思路!然后看了一下这位工程师写的博客,网址是:http://blog.chinaunix.net/uid-30016330-id-4859863.html,然后才有一点点思路。

      首先是APP的中断向量的地址被修改了,跳转到IAP时,索取中断向量的地址没有改过来,只要IAP的mian()函数里面也像APP一样添加索取中断修整向量的地址,既可以正常运行了。

IAP在main函数里面前面添加如下代码即可:

	memcpy((void*)0x20000000, (void*)0x8000000, 0xB4);
	SYSCFG->CFGR1 |= 0x03;

 STM32F030 做IAP时NVIC_Init()中断卡死和“could not stop cortex-m device”问题分析

 小小错误却走了不少的弯路,希望能帮到你!

总结:程序找不到中断向量地址才出现的问题!