你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

跳转地址实现二选一运行 Flash 内两份固件镜像

[复制链接]
patch1582 提问时间:2026-7-18 22:36 / 未解决

我在 STM32F106RDT上开发 Bootloader,Flash 分区规划如下:

0x08000000 ~ 0x0802DFFF 主固件(第一份镜像)

0x0802F000 ~ 0x08030FFF 保留分区

0x08031000 ~ 0x0805FFFF 临时升级固件(第二份镜像)

Bootloader 跳转函数存放在 Flash 里。使用 Keil 调试时,程序先进入启动文件startup_stm32f10x_hd.s的复位中断,我通过 IMPORT 引入自定义 Bootloader 函数,修改复位处理汇编如下:

; Reset handler

Reset_Handler PROC

        EXPORT  Reset_Handler             [WEAK]

        IMPORT  __main

        IMPORT  SystemInit

        IMPORT  FLASH_Bootloader       /*my add*/

        LDR     R0, =SystemInit

        BLX     R0            

        LDR     R0, =FLASH_Bootloader  /*my add*/

        BLX     R0                                 /*my add*/

        ;LDR     R0, =__main

        ;BX      R0

        ENDP

当前问题是需要在两份应用镜像之间选择其一跳转运行。如何获取应用main()函数的 Flash 地址?

我直接跳转到第一份镜像基址 + 4(0x08000004),程序无任何反应,无法启动。

请问如何实现两份应用的选择与跳转?

收藏 评论0 发布时间:2026-7-18 22:36

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版