前言
伴随着固件升级需求的增加,STM32提供了灵活的升级方式。本文一步一步介绍如何利用USB DFU Class以及ST提供的DfuSe demo软件工具实现IAP(In Application Program)功能,但并不涉及到DFU class移植。
一 实现环境
开发板:STM32F746G-DISCO
开发库:STM32CubeF7 v1.3.0
集成开发环境:IAR v7.70.1.11486
:MDK-ARMPlus v5.20.0.0 (只需两者中一种)
优化级别 : High (IAR)
Level 3 (-O3) (MDK-ARM)
DFU演示软件: Dfu file manager v3.0.5
DfuSeDemo v3.0.5
实现过程在STM32F7系列上展开,但USB DFU实现的IAP功能并不只局限于STM32F7系列,可以通过用户手册判断所采用微控制器型号是否支持USB以及IAP功能。STM32Cube开发库为各系列STM32提供了齐全的USB DFU例程可供参考。
二 IAP介绍
IAP(In application program)主要为使用者提供了一种更加灵活的固件升级方式,可以根据应用需要定义何时、何种情况发生时进行固件升级。在介绍步骤前,需要对IAP原理有一定认识。结合下图(仅供参考,IAP实际应用方式更加灵活),IAP的应用中,用户程序与IAP驱动程序位于不同的存储区域。在应用过程中,利用IAP驱动程序将用户固件加载到固定位置,完成升级。更多关于IAP应用介绍请参考AN3965。
其中,IAP驱动程序首先烧录固化,并不会随着用户程序的升级而改变。用户固件升级完毕后,在IAP驱动程序引导下,跳转到用户固件对应Flash位置,执行用户程序。