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

本文解决了一个在STM32F030 MCU上使用IAP进行固件升级时遇到的中断卡死问题。通过调整中断向量表地址,成功避免了NVIC_Init()函数在跳转到IAP程序时导致的MDK停止问题。

新项目需求,然后用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"错误!

真是急死宝宝了!找了半天都没有思路!然后看了一下这位工程师写的博客,网址是: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;

 

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值