[MM32硬件] MM32F0144的IAP实例

[复制链接]
1125|0
 楼主| tpgf 发表于 2024-4-10 08:36 | 显示全部楼层 |阅读模式
这里不再介绍原理了。本人看了原理,尝试了写了个简单的验证程序,结果跳转成功后中断不灵了,又查了很多网文,发现是uboot中是在中断中触发了跳转导致的异常,后来修改成直接在main函数中执行跳转,就成功了。这里记录一下关键点,并把工程源码也附上,供人参考。

UBOOT
#define APPLICATION_START_ADDR (uint32_t)(0x08001000)
typedef void (*pFunction)(void);

uint32_t JumpAddress = 0;
pFunction JumpToApplication;


s32 main(void)
{
       
                DELAY_Init();
        LED_Init();   //这里点灯的目的是方便观察运行在APP还是uboot上
                LED2_ON();
                DELAY_Ms(200);
                LED2_OFF();       
                DELAY_Ms(200);
       
                LED2_ON();
                DELAY_Ms(200);
                LED2_OFF();       
                DELAY_Ms(200);
       
                LED2_ON();
                DELAY_Ms(200);
                LED2_OFF();       
                DELAY_Ms(200);

//IAP跳转,不能在中断程序中执行,否则切换到APP后中断异常
                JumpAddress = *(volatile uint32_t *)(APPLICATION_START_ADDR + 4);
                JumpToApplication = (pFunction) JumpAddress;
                __set_MSP(*(volatile uint32_t *)APPLICATION_START_ADDR);
                JumpToApplication();
//IAP跳转

    while(1)
                {                       


    }

}

489106615df1d6d4e0.png

516876615df17921fd.png

APP
#define APPLICATION_START_ADDR (uint32_t)(0x08001000)
s32 main(void)
{
                 

        memcpy((uint8_t *)SRAM_BASE, (uint8_t *)APPLICATION_START_ADDR, 48*4);        //这里复制中断向量表
        RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFG, ENABLE);                               
        SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
       
       
        DELAY_Init();
    LED_Init();
    KEY_Init();
    EXTI_Config();
    while(1)
        {
                       
                        DELAY_Ms(200);
                        LED1_TOGGLE();
                        DELAY_Ms(200);


    }

}

274776615df0f8af8b.png

这里0xC0是48预留给中断向量的

0x10000-0x1000=0xF000

0x2000-0xC0=0x1F40

130136615df07901a2.png

768766615df003714b.png

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/hyhsandy1803/article/details/136286999

您需要登录后才可以回帖 登录 | 注册

本版积分规则

2392

主题

17668

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部