在STM32双Bank模式下,在线升级失败后的无缝回滚关键在于利用硬件标志位(如Option Bytes或备份寄存器)记录当前运行Bank和升级状态。具体实操建议:1)在启动代码(如SystemInit或Reset_Handler)中读取标志位,若检测到升级未完成(如标志位为0x5A5A),则强制跳转至备份Bank(Bank1或Bank2)的起始地址,并清除标志位;2)在升级流程中,先擦写目标Bank,写入新固件并校验CRC,成功后置位标志位(如0xA5A5)再跳转;3)若升级失败(如校验错误或看门狗超时),硬件复位后标志位仍为未完成状态,系统自动回滚至旧Bank。注意:需确保标志位存储于非易失区域(如RTC备份寄存器或Flash Option Bytes),并配置正确的中断向量表偏移(SCB->VTOR)。建议在跳转前禁用全局中断,并验证新Bank的栈指针有效性,防止硬错误。
mcuku 阿沐 · 2026-08-27