stm32 iAP成功跳转APP 但是没有执行 正解在5楼

2019-12-17 21:29发布

本帖最后由 天涯行客 于 2014-12-4 12:37 编辑

程序所有配置都没有问题,就是不执行APP程序,不知道怎么回事啊 2014-12-04_105927.png (77.37 KB, 下载次数: 4) 下载附件 2014-12-4 11:00 上传

程序跳转代码

        if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
        {
            SerialPutString("Execute user Program ");

            JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
            Jump_To_Application = (pFunction) JumpAddress;

            __set_MSP(*(__IO uint32_t*) ApplicationAddress);
            Jump_To_Application();
        }
#define ApplicationAddress    0x8010000


我APP程序比较大 生成的BIN文件有60K左右,会是堆栈溢出的问题吗?


正解在5楼
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
64条回答
cl1cl1cl1cl1
1楼-- · 2019-12-22 18:18
 精彩回答 2  元偷偷看……
huangqi412
2楼-- · 2019-12-22 23:40
xf331785508 发表于 2014-12-4 11:40
我遇到过,能进用户程序,但所有跟中断有关系的外设全部失灵,后来在本坛无意中发现有人在跳用户程序之前关 ...

请教下,APP中一定要加开中断代码么,     我的只在BOOT中跳转前关闭中断,APP中没有开中断代码,但是用了很久一直都正常。                   坛里别人帖子似乎也没提到APP工程要加开中断代码。
xf331785508
3楼-- · 2019-12-23 05:36
本帖最后由 xf331785508 于 2015-11-24 17:13 编辑
huangqi412 发表于 2015-11-23 16:58
请教下,APP中一定要加开中断代码么,     我的只在BOOT中跳转前关闭中断,APP中没有开中断代码,但是用 ...


跟你的描述一样啊,在BOOT也即跳转APP段前关中断,等进入APP段后,BOOT已经不再管理程序,由APP接管CPU 的一切资源,此时,再开中断啊,不然,你的异步外设如何响应(定时循环检测外设的除外). 除非你的APP中完全用不到中断,那就不用开了。
(插个话:MCU集成了那么多的外设,IO,TIMER,AD,DA,USB,USART,IIC,IIS,SPI等等的接口,难道就没有一个用到中断。 五楼提到的开关中断代码是可以开关全局中断的。)
huangqi412
4楼-- · 2019-12-23 09:39
xf331785508 发表于 2015-11-24 17:06
不是开中断,是关中断。

因为我看你 5楼说        进到用户程序后,在中断向量表地址设定完成后再开中断。OK 了。

还有个问题,如果在BOOT中假如开启了定时器中断啊串口中断啊一大堆,跳转到APP后是不是这些中断依然是开着的。  跳转并没有复位单片机,外设寄存器应该还是保留BOOT中写入的值吧。

一直没细究过这些问题,只是BOOT中中断,一直好像也没出问题。
xf331785508
5楼-- · 2019-12-23 11:36
huangqi412 发表于 2015-11-24 17:11
因为我看你 5楼说        进到用户程序后,在中断向量表地址设定完成后再开中断。OK 了。

还有个问题, ...

那就要看你的APP段的程序开始后是否有重新配置中断(NVIC)寄存器,重新配置外设寄存器,有配置肯定被更新了,没配置 的话,理论上讲应该是BOOT配置后的结果,但我没实测过,有用到的话,你可以自己测测。
adee4210
6楼-- · 2019-12-23 16:11
 精彩回答 2  元偷偷看……

一周热门 更多>