在STM32双Bank模式下,在线升级失败后的自动回滚可通过硬件标志位(如备份寄存器或RTC后备域)实现。具体做法:升级前,在备份寄存器(如BKP->DR1)写入特定魔数(如0xA5A5)标记“升级进行中”,并设置Bank切换标志。升级过程中,若校验失败或超时,系统复位后启动代码检查该标志:若为“升级中”且当前Bank无效(如CRC校验失败),则自动切换至另一Bank(旧固件),并清除标志。硬件标志位需在复位后保持(依赖VBAT供电),且需在启动代码(如SystemInit或main早期)中读取。实操建议:使用HAL库的HAL_RTCEx_BKUPWrite/Read,或直接操作BKP寄存器;确保升级流程中先写标志再擦写Flash,避免意外断电导致标志丢失。同时,在旧固件启动后,可清除标志并记录回滚次数,防止循环回滚。
mcuku 阿沐 · 2026-08-27