打印
[STM32F0]

STM32F072从BootLoader跳转到App出现App程序跑飞的问题问题

[复制链接]
4125|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wan2008pfjy|  楼主 | 2017-7-6 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我已经测试STM32F072从BootLoader跳转到App是跳转成功了,当我在跳转到App前加上__disable_irq(),App的程序除了不能进中断,其他的都正常。当我在App里面加__enable_irq()时App就又不正常了(跑飞了)。

跳转代码如下:

typedef  void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;
if( ((*(__IO uint32_t*)APP_START_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
   {  
    __disable_irq();
       //跳转至用户代码
    JumpAddress = *(__IO uint32_t*) (Address + 4);
    Jump_To_Application = (pFunction) JumpAddress;
    //初始化用户程序的堆栈指针
    __set_MSP(*(__IO uint32_t*) Address);
    Jump_To_Application();
   }

希望有朋友遇到过这个问题,帮忙解答一下,谢谢!
沙发
alex_li0824| | 2017-7-6 23:43 | 只看该作者
需要考虑你在跳转之前做了什么?

使用特权

评论回复
板凳
wan2008pfjy|  楼主 | 2017-7-6 23:55 | 只看该作者
我跳转之前就是初始化了IO和时钟

使用特权

评论回复
地板
yklstudent| | 2017-7-7 07:58 | 只看该作者
IAP中开启中断了?

使用特权

评论回复
5
z00| | 2017-7-7 09:44 | 只看该作者
在APP中进行中断向量表映射

使用特权

评论回复
6
skygz| | 2017-7-7 12:19 | 只看该作者
APP里 向量表 改了吗....
int main(void)
{
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x7000); //在main里改可能不成功, 建议在 system_stm32fxxx.c 里改
        __enable_irq();
.................

}

//system_stm32f10x.c
#define VECT_TAB_OFFSET  0x7000 /*!< Vector Table base offset field.
                                  This value must be a multiple of 0x200. */

使用特权

评论回复
7
LMCH| | 2017-7-7 12:34 | 只看该作者
有没有可能是像我原来发过的一个问题:开启了类似systick中断,开启中断后systick的中断服务函数跳飞,调试的时候看到程序到了hardfault异常服务的死循环中去了

使用特权

评论回复
8
LMCH| | 2017-7-7 12:36 | 只看该作者
LMCH 发表于 2017-7-7 12:34
有没有可能是像我原来发过的一个问题:开启了类似systick中断,开启中断后systick的中断服务函数跳飞,调试 ...

是不是把向量表整好了,再重映射,最后再开中断?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝