stm32 应用程序跳转到系统boot

本文介绍了如何在STM32F2和STM32F4上从应用程序跳转到系统BOOTloader,通过使用特定的函数Jump_To_APP。在跳转前需关闭外设时钟、PLL、中断并清除非悬空中断标志位。作者对比了 Cortex-M 处理器时代与早期如LPC2294上实现bootloader的难度,强调了STM32官方库中未明确提供Systemmemory地址的使用。

STM32F2 STM32F4  的System memory 地址从0x1FFF0000开始的,

我看了最新的HAL库,里面也没有System memory 的地址定义,看来ST官方是不想让我们用系统BOOT中的功能了,

但是鉴于ST系统bootloader的稳定性与可靠性,还有ISP上位机的丰富性、通用性,用起来还是很不错了,

怎么从应用跳转到bootloader呢,可以使用下面的函数,Jump_To_APP(0x1FFF0000),就直接进入到系统bootloader中了,

void Jump_To_APP(uint32_t app_address)
{
    void (*pUserApp)(void);
    uint32_t JumpAddress;      
    __asm("CPSID  I");     //关中断

    JumpAddress = *(volatile uint32_t*) (app_address+4);
    pUserApp = (void (*)(void)) JumpAddress;
    /* Initialize user application's Stack Pointer */
    __set_MSP(*(volatile uint32_t*) app_address);
    pUserApp();
}

在跳转到Bootloader 之前,有几个事情必须要做好:
1) 关闭所有外设的时钟
2) 关闭使用的PLL
3) 禁用所有中断
4) 清除所有挂起的中断标志位

说真的,自从cortex-M推出以来,我自定义个bootloader太容易了,“一跳”就完成了,如果用cube来做,三分钟搞定,

记得我在LPC2294上做bootloader,真是太难了,耗费了我好长时间才稳定下来。

1,要做用户态与内核态的切换,

2 要搬移中断向量表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值