STM32 IAP成功跳转APP ,能进入用户程序,但所有跟中断有关系的外设全部失灵,全部中断处理函数都没进

2019-07-21 01:23发布

STM32 IAP成功跳转APP ,能进入用户程序,但所有跟中断有关系的外设全部失灵,全部中断处理函数都没进

IAP程序里代码如下图:
QQ截图20170928150834.png QQ截图20170928150848.png


APP程序里代码如下图:
QQ截图20170928151216.png QQ截图20170928151047.png

各位大神们帮我看一下什么问题,急等!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
东海之郊
1楼-- · 2019-07-21 05:52
午夜狼嚎 发表于 2018-8-28 21:55
没有

中断向量表只有一个,要么IAP里使用,要么APP里使用,一般我们都是在APP里使用,如果IAP里一定要使用,那么在APP跳转到IAP时不要使用Jump跳转代码,直接对内核复位,复位前在内部flash某一位置做一个标志,复位后首先进入的是IAP,在IAP里读取标志位,判断是否升级,不需要就使用Jump跳转代码跳转到APP(APP第一句记得修改中断向量表偏移地址),需要升级就进入升级程序,升级完清除升级标志,然后内核复位,千万不要升级完跳转,跳转会导致APP里中断找不到中断向量表入口地址,尽管你在APP里设置了偏移地址也没用。为何复位内核能够使IAP和APP里的中断能正常使用,是因为复位内核后中断向量表会被重置。下面是内核复位代码,调用NVIC_CoreReset();即可。
skygz
2楼-- · 2019-07-21 07:57
 精彩回答 2  元偷偷看……
ylsljp
3楼-- · 2019-07-21 13:29
 精彩回答 2  元偷偷看……
windowswan
4楼-- · 2019-07-21 17:00
跳转前,把所有的中断关闭,io复位为初始状态
ylsljp
5楼-- · 2019-07-21 22:36
windowswan 发表于 2017-9-28 15:26
跳转前,把所有的中断关闭,io复位为初始状态

跳转前有做啊,跳转前__set_PRIMASK(1); NVIC_DeInit(); RCC_DeInit();
adlu
6楼-- · 2019-07-22 04:26
问题可能是在APP部分。
请参考正点原子教程中,怎么把一般程序转成APP程序的相关章节。

另外,可以参考http://www.openedv.com/forum.php ... id=83250&extra=中第15篇第二部分。

一周热门 更多>