如何使用CubeMx生成一个DFU工程

本文详细介绍了如何使用CubeMx生成一个STM32F407IGHx的DFU工程,包括配置USB_OTG_FS为Device_Only模式,选择Download Firmware Update Class(DFU),设置中断优先级,以及Flash读写接口的实现。同时,文章强调了APP起始地址的选择原则,确保其在DFU描述的可读写扇区范围内。
摘要由CSDN通过智能技术生成

1 前言

DFU用来做IAP是很方便的,可以直接通过USB来对APP进行升级,因此,掌握DFU的制作还是挺有好处,特别是使用CubeMx工具可以快速制作,本文将基于STM3240G-EVL评估板来一步一步实现一个DFU的IAP工程。

2 制作CubeMx工程

新建一个STM32F407IGHx工程:
Pinout:

  • Peripherals:
    RCC->High Speed Clock(HSE):Crystal/Ceramic Resonator
    SYS->Debug:Serial Wire
    USB_OTG_FS->Mode:Device_Only

  • MiddleWares
    USB_DEVICE->Class For FS IP:Download Firmware Update Class(DFU)

再配置PG15脚为GPIO_Input模式。

Clock Configuration:

时钟树设置

图1 时钟树设置

如上图,STM3240G-EVAL评估板使用的是25M HSE。
Configuration:
NVIC中将USB中断优先级调为5,PG15的标签设置为USER_BTN,此外还需要设置中间件USB DFU参数,如下图:

USB DFU参数设置

图2 USB DFU参数设置

如上图,红色框内为需要修改的代码,0x0800C000为需要为用户程序APP烧录的起始地址,字符串“@Internal Flash /0x08000000/03*016Ka,01*016Kg,01*064Kg,07*128Kg”实际为USB DFU类的interface字符串描述符,在USB DFU标准文件中有提到可选接口可以使用一个对应的接口字符串来表示此可选接口对应的目标设备的存储块信息,但如何具体规定的,DFU标准(DFU_1.1)并没有要求,是开放的,如下:

DFU标准对接口字符串定义的描述

图3 DFU标准对接口字符串定义的描述

由此可见,接口字符串定义是可以自由定义的,那么在这里,由于使用到ST工具软件DfuSe Demo(v3.0.5),那么这个工具与USB DFU设备就有一个自定义的接口字符串定义,用来表示当前MCU内部的FLASH组织结构。

接下来我们来看看MCU内部FLASH的组织,由于这里的MCU是STM32F407IGHx,找到其参考文档,并查看其内部FLASH组织结构:

STM32F407内部FLASH的组织结构

图4 STM32F407内部FLASH的组织结构

如上图,STM32F407内部FLASH包含4个16K扇区+1个64K扇区+7个128K扇区,并且起始地址为0x0800 0000,所以它对应的接口字符串表示为: “@Internal Flash /0x08000000/03*016Ka,01*016Kg,01*064Kg,07*128Kg”, Internal Flash为在工具软件显示的名称,0x08000000为起始地址,03*016Ka表示3个16K大小只读的扇区,01*064Kg表示1个64K大小的可读写扇区,07*128Kg表示7个128K大小的可读写扇区,后缀a表示只读,后缀g表示可读写。这个就是工具软件DfuSe Demo(v3.0.5)与DFU设备之间的约定。如下:
DfuSeDemo软件中所显示的内部FLASH的可读写属性

图5 DfuSeDemo软件中所显示的内部FLASH的可读写属性

知道了这些信息后,我们再回过头来看APP的起始地址0x0800C000,那么APP的起始地址该如何得来的?有什么要求?与这个接口字符串之间是否有关系?

到目前为止,我们可以确定地是,APP_DEFAULT_ADD的地址必须是位于接口字符串表示的可读写的地址范围内,也就是第4个扇区起(前3个扇区都是只读的),不然是烧录不进去的。其他问题我们先暂且放一放࿰

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值