打印
[应用相关]

STM32H743 跳转不成功

[复制链接]
648|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycamelaaa|  楼主 | 2021-12-2 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神好,遇到一个奇怪的问题,我从APP跳转到bootloader不成功,但是bootloader升级没有问题,重新上电也可以运行,但是就是无法跳转成功,源代码如下,希望有人能解答下!

void JumpToBootloader(void)
{
        uint32_t i=0;
        void (*SysMemBootJump)(void);       // 申明一个函数指针
        __IO uint32_t BootAddr = 0x08000000; //boot地址

        __set_PRIMASK(1);        //关全局中断

        //关定时器
        SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

        //关闭所有中断,清除所有中断挂起标志
        HAL_RCC_DeInit();

        //
        for (i = 0; i < 8; i++)
        {
                NVIC->ICER=0xFFFFFFFF;
                NVIC->ICPR=0xFFFFFFFF;
        }      

        __set_PRIMASK(0);        //开全局中断

        // 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址
        SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));

        //设置主堆栈指针
        __set_MSP(*(uint32_t *)BootAddr);

        //在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针
        __set_CONTROL(0);

        //跳转到系统BootLoader
        SysMemBootJump();

        //跳转成功的话,不会执行到这里,用户可以在这里添加代码
        while (1)
        {

        }
}

使用特权

评论回复
沙发
laocuo1142| | 2021-12-2 14:30 | 只看该作者
BOOT的程序编译时的起始地址是多少?和以下计算后的地址一样吗?建议这个地址和编译时配置的地址一样就行了。

* SysMemBootJump = (void ()(void)) (((uint32_t ) (BootAddr + 4)));

使用特权

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

本版积分规则

564

主题

1990

帖子

0

粉丝