硬汉嵌入式论坛

 找回密码
 立即注册
查看: 408|回复: 9
收起左侧

STM32F429无法从APP跳转到系统bootloader

[复制链接]

17

主题

42

回帖

93

积分

初级会员

积分
93
发表于 2025-3-24 17:20:10 | 显示全部楼层 |阅读模式
STM32F429无法从APP跳转到系统bootloader,之前f103和f407也无法跳转,后面看了论坛帖子更改HAL_RCC_DeInit();的顺序后就可以了,但这次却不行。
[C] 纯文本查看 复制代码
static void JumpToBootloader(void)
{
    uint32_t i = 0;
    void (*SysMemBootJump)(void); /*声明一个函数指针*/
    __IO uint32_t BootAddr =  0x1FFF0000;
    /*关闭全局中断*/
        __disable_irq();
 
    HAL_DeInit();
    /*设置所有时钟到默认状态,使用HSI时钟*/
    HAL_RCC_DeInit();


    /*关闭滴答定时器,恢复到默认值*/
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;



    /* 关闭所有中断,清除中断挂起标志 */
    for (i = 0; i < 8; i++)
    {
        NVIC->ICER[i] = 0xFFFFFFFF;
        NVIC->ICPR[i] = 0xFFFFFFFF;
    }

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

    /* 设置主堆栈地址*/
    __set_MSP(*(uint32_t *)BootAddr);

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

    /* 跳转到系统 BootLoader */
    SysMemBootJump();
}
回复

使用道具 举报

95

主题

530

回帖

830

积分

金牌会员

积分
830
发表于 2025-3-25 08:21:46 | 显示全部楼层
直接软件复位就能跳转到Boot了。
共产主义一定胜利!
回复

使用道具 举报

0

主题

18

回帖

18

积分

新手上路

积分
18
发表于 2025-3-25 09:36:10 | 显示全部楼层
持续关注,期待大牛解惑
回复

使用道具 举报

5

主题

144

回帖

159

积分

初级会员

积分
159
发表于 2025-3-25 09:43:22 | 显示全部楼层
回复

使用道具 举报

5

主题

38

回帖

53

积分

初级会员

积分
53
发表于 2025-3-25 09:48:48 | 显示全部楼层
会飞的猪_2020 发表于 2025-3-25 08:21
直接软件复位就能跳转到Boot了。

他这个boot不是放在最前面的
回复

使用道具 举报

5

主题

38

回帖

53

积分

初级会员

积分
53
发表于 2025-3-25 09:49:15 | 显示全部楼层
无关风月 发表于 2025-3-25 09:43
https://mp.weixin.qq.com/s/uVktPkcbh2XAVo2QAluxnA        看看这个

好东西,学习了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-3-25 09:58:02 | 显示全部楼层
F429的话。
1、这个改成全局变量 __IO uint32_t BootAddr =  0x1FFF0000;
2、下面这个放在SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));前面

/* 设置重映射到系统 Flash */
. __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();


回复

使用道具 举报

17

主题

42

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2025-3-25 14:40:50 | 显示全部楼层
无关风月 发表于 2025-3-25 09:43
https://mp.weixin.qq.com/s/uVktPkcbh2XAVo2QAluxnA        看看这个

多谢
回复

使用道具 举报

17

主题

42

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2025-3-25 14:46:13 | 显示全部楼层
eric2013 发表于 2025-3-25 09:58
F429的话。
1、这个改成全局变量 __IO uint32_t BootAddr =  0x1FFF0000;
2、下面这个放在SysMemBootJump ...

感谢,确实提升全局变量之后就可以了。看二楼的帖子,好像这样还是无法完全避免出错,用汇编才是最安全的。有兴趣出个汇编例程不
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-3-26 09:28:49 | 显示全部楼层
厉飞雨 发表于 2025-3-25 14:46
感谢,确实提升全局变量之后就可以了。看二楼的帖子,好像这样还是无法完全避免出错,用汇编才是最 ...

问题3

初步确诊MDK AC6的0级优化是个大坑,玩不顺手的话,慎用(2022-10-23)
https://www.armbbs.cn/forum.php? ... 9584&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-9 22:42 , Processed in 0.411765 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表