|
在 STM32F106RDT上开发 Bootloader 引导程序,Flash 空间划分如下: 0x08000000 ~ 0x0802DFFF:主固件(固件 1) 0x0802F000 ~ 0x08030FFF:预留分区 0x08031000 ~ 0x0805FFFF:备用临时固件(固件 2) Bootloader 跳转函数存放于 Flash 中。 上电后程序进入启动文件 startup_stm32f10x_hd.s 的复位中断服务函数,我通过导入符号调用自己的 Bootloader 函数,修改复位处理代码如下:
我需要根据条件二选一启动两个固件。该如何获取目标固件main()函数的入口地址? 我直接跳转到第一个固件起始地址偏移 4 字节(0x08000000+4),程序没有任何反应。 有没有规范的方法实现两个应用固件的选择与跳转运行? |
STM32 官方Bootloader相关咨询
Bootloader升级固件
STM32F405在片 Flash 存放多份固件镜像实现固件升级
STM32F407VG Bootloader 跳转异常
如何通过 U 盘实现固件升级
跳转地址实现二选一运行 Flash 内两份固件镜像
Bootloader,实现从地址 A 或地址 B 启动同一份应用固件
向 NUCLEO-F767ZI 烧录包含 MicroPython 的.dfu 文件无法操作
微信公众号
手机版
跳转跟系统里有几块固件没多少关系,反正每次只能跳到一个地方。
跳转前把环境整理干净,新的中断矢量表准备好,获取MSP,跳转地址正确即可。
这种IAP示例很多,你尽可以参考。
STM32 IAP应用中的几个常见问题
先写个bootloard,里面规定一个固定的地址,代表要跳转A区还是B区,
你升级的时候,自己去先读这个地址的数据,是A就改为B,是B就改为A,要注意先进行OTA 升级包校验,校验过来再设这个地址,再重启