单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:7417|回复:0
打印上一主题下一主题

STM32F7利用USB DFU实现IAP功能详解

[复制链接]
跳转到指定楼层
楼主
ID:422626发表于 2018-11-16 18:07|只看该作者|只看大图回帖奖励
前言
伴随着固件升级需求的增加,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-ARM Plus 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位置,执行用户程序。

三 实现步骤
3.1 DFU 工具安装
安装 DFU demo工具 DfuSe v3.0.5,主要提供了驱动、Dfu file manager 和 DfuSeDemo。关于 DfuSe的详细内容(安装步骤、使用介绍)请参考 UM0412。

3.2 IAP 驱动固件生成与装载
利用 STM32CubeF7 v1.3.0开发库提供的 USB DFU例程生成 IAP驱动固件(文件夹路径: …\
STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Applications\USB_Device\ DFU_Standalone)。
利用烧录工具烧录到开发板中。本例程实现重启后,如果板上 User按键按下或者没有有效的用户应用程序,则进入 USB DFU模式,等待升级;否则,进入用户应用。

下面是摘取的部分例程。

用户固件对应的首地址被定义在 0x08008000。用户也可以自定义地址,需要注意如下几点:
1.  禁止定义在 0x08008000地址前(STM32F7系列,0x0~0x0800FFFF属于 Sector0,已经开辟为 IAP驱动程序区域)
2.  自定义地址所属 Sector在升级时会全部擦除,即使定义地址并不位于对应 Sector的首地址
3.  自定义地址需要保持 512-byte对齐
4.  自定义地址需要与用户固件对应的装载地址以及用户中断向量表地址保持一致
在实现跳转到用户程序的代码中,将用户中断向量表中第一个 4字节指向的栈首地址分配给 MSP。第二个 4字节为复位中断向量,指向执行首地址。  
在开发 IAP驱动程序时,需要避免 PC指针跳到用户程序区域。同时,充分考虑 Stack& Heap大小,避免出现 USB DFU正常识别,但不能正常工作情况,如下图所示。

完整的pdf格式文档51黑下载地址(共8页):
stm32F7利用 USB DFU 实现 IAP 功能.pdf(729.52 KB, 下载次数: 66)


评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网