STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

前言

什么是IAP?

IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区,从而实现固件升级。

什么是BootLoader?

百度百科:在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

实际上,BootLoader不仅仅在操作系统上使用,在一些内存小,功能应用较为简单的单片机设备上面也可以通过BootLoader来完成固件升级。

什么是DFU?

DFU全称为Download Firmware Update,是ST官方推出的一个通过USB接口进行IAP升级的方案,同串口ISP一样,他们都集成在了芯片内部的Bootloader区段,可以通过配置boot引脚来启动。

不过STM32内置DFU的型号都比较新,像STM32F4系列是有的,但是像F0和F1系列则没有,不过没有关系,如果你用的型号没有内置DFU程序,也可以通过CubeMX来快速生成和移植一个DFU功能程序到你的Flash中来使用。

使用DFU的优缺点?
使用DFU的好处是不用自己制作Bootloader,因为这部分代码在STM32出厂之前就已经做好并且烧录进去了,而且不占用用户代码的Flash,另外,在PC端我们也不需要专门定制一个上位机,因为官方就有专门的升级Tool以及USB驱动。
缺点是要改变boot引脚的电平,才能启动Bootloader,这样的话在应用场景上就有比较大的限制了。

所以,要根据项目的实际需求去选择合适的方案。

我之前也有发过一些关于STM32远程升级的文章,实现的方式有很多种,感兴趣的同学可以去看一下。
STM32 IAP应用开发——通过内置DFU实现USB升级(方式1)
固件升级系列合集:https://blog.csdn.net/ShenZhen_zixian/article/details/129074047

1 硬件介绍

我这里测试用的是STM32F407。
用到的硬件接口如下:

接口引脚作用
USBPA11 PA12(必要)通过USB连接PC端,用来传输固件以实现升级
BOOTBOOT0 BOOT1(必要)通过改变boot电平来切换运行模式
串口PA9(非必要)通过CH340连接到PC端,打印固件版本号,方便查看升级是否成功
LEDPF9(非必要)方便查看代码是否跑起来了

BOOT引脚配置对应如下图:
请添加图片描述

1)主Flash
主Flash起始地址为0x08000000,它指的是STM32内置Flash,通常我们烧录的代码就是存放在这个位置。
2)系统存储器
系统存储器起始地址为0x1FFF0000,这种模式启动的程序功能是由芯片厂家设置的,STM32在出厂时会这个区域内置一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。我们要使用的DFU就是放在这里。
3)嵌入式SRAM
嵌入式SRAM起始地址为0x20000000,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的 地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

2 环境搭建

2.1 Keil uVsion

关于STM32以及Keil的环境这里就不具体介绍了,网上教程也很多,不懂的同学自行查阅资料。

环境搭建好之后需要准备一个能够正常运行的代码,用来测试我们后面的固件升级。

2.2 DfuSeDemo

1、下载DfuSeDemo
DfuSeDemo是用来升级固件的,可以在ST的官网下载。
下载地址:https://www.st.com/en/development-tools/stsw-stm32080.html
注:本文测试的时候,用的是v3.0.6版本。
请添加图片描述

2、安装DfuSeDemo
下载完成后直接安装即可。
提示:记住安装的路径,后面要用。
默认安装路径:C:\Program Files (x86)\STMicroelectronics\Software\DfuSe v3.0.6\Bin
安装好之后打开安装路径的文件夹,会看到以下几个文件。
请添加图片描述

3、安装驱动
根据自己的操作系统选择对应的驱动。(Win11的自行查阅资料安装)
请添加图片描述
64系统安装dpinst_amd64.exe,32位系统安装dpinst_x86.exe
请添加图片描述

2.3 检查USB驱动

1、让STM32进入系统存储器启动模式
也就是配置BOOT0引脚拉高,BOOT1引脚拉低。
提示:BOOT引脚的状态要在MCU启动之前配置好才能进入对应的模式,可以先配置BOOT引脚再上电,也可以在配置好BOOT引脚之后复位MCU。
请添加图片描述

2、把STM32的USB连接到PC端
如果前面的驱动安装没有问题,连接上电脑之后可以在设备管理器看到一个STM Device in DFU Mode设备。
请添加图片描述

3、打开DfuSeDemo
如果驱动和接线都没问题,那么在DfuSeDemo可以看到已连接的STM32设备以及DFU的一些信息(VID、PID以及软件版本)。
提示:如果没有找到设备,请检查前面的步骤。
请添加图片描述

至此,环境就搭建完成了。

3 固件升级

3.1 打包新版本固件

因为DfuSeDemo只能下载dfu文件,所以在进行在线升级之前我们要先将编译好的hex文件或者bin文件转换成dfu文件。用的工具是DfuFileMgr.exe,前面其实也有提到,在DfuSeDemo的安装目录里面就有,不需要再额外安装了。

hex跟bin最终的效果基本是一样的,根据自己的需求选其中一种方式即可。

1、打包hex文件
步骤如下:
1)输入设备信息
提示:设备信息在DfuSeDemo中可以看到。
请添加图片描述
2)打开hex文件
请添加图片描述
3)生成dfu文件
请添加图片描述
4)保存dfu文件
请添加图片描述
5)成功生成dfu文件
请添加图片描述

2、打包bin文件
步骤如下:
1)输入设备信息
提示:设备信息在DfuSeDemo中可以看到。
请添加图片描述
2)选择bin文件并输入Flash起始地址请添加图片描述
请添加图片描述
3)生成dfu文件
请添加图片描述
4)保存dfu文件
请添加图片描述
5)成功生成dfu文件
请添加图片描述

3.2 升级固件

1、打开DfuSeDemo
请添加图片描述
2、导入打包好的dfu文件
请添加图片描述

请添加图片描述

3、升级固件
请添加图片描述
4、重启设备
升级完成后可以在DfuSeDemo上面点击Leave DFU mode退出DFU模式。
也可以配置好新的BOOT模式之后重启或重新上电。
提示:BOOT模式要改成主Flash模式(BOOT0引脚拉低)才能正常运行新版本的代码。
请添加图片描述

至此,整个升级流程就走完了。

结束语

好了,关于如何通过STM32内置DFU实现USB升级就讲到这里,这种方式虽然限制较多,但在某些应用场景是很方便的,比如SB键盘,不需要自己编写Bootloader和上位机就可以实现升级,而且官方的升级渠道还稳定。其他应用场景就再另说,合适的才是最好的。
如果你有什么问题或者有更好的方法,欢迎在评论区留言。

更多相关文章:
固件在线升级系列合集:https://blog.csdn.net/ShenZhen_zixian/article/details/129074047

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: STM32 IAP (In-Application Programming)是指在应用程序运行期间对STM32微控制器进行固件升级的一种方式。它通过编程接口,使得用户可以通过串口或网络等方式将新的固件程序烧录到设备中,而无需通过外部编程器。 STM32的远程升级(OTA)是利用无线通信技术实现的一种远程升级方式。通过EC20开发套件提供的无线通信能力,可以将新的固件程序通过网络发送到STM32设备,并进行自动更新。这种OTA方式可以方便快捷地更新设备的固件,无需物理接触设备。 EC20开发套件是一套基于EC20模块的开发工具。EC20模块是一款集成了2G/3G/4G通信功能的模块,支持数据传输、短信、语音通信等多种功能。通过EC20开发套件,可以方便地开发和测试与EC20模块相关的应用程序。 Boot和App是指STM32设备中的引导程序和应用程序。引导程序负责在设备上电时加载和启动应用程序,而应用程序则是设备具体的功能或应用逻辑。Boot和App源码是指这些程序的源代码,可以在开发过程中进行定制和修改,以满足特定的需求。 关于以上内容的详细资料可以在ST官方网站或相关论坛上找到。ST官方网站提供了丰富的文档、示例代码和应用笔记,可以作为开发参考。在相关论坛上,还可以找到其他开发者的经验分享和问题解答,对于理解和应用这些技术也是很有帮助的。 ### 回答2: STM32是一款高性能的32位微控制器系列,具有广泛的应用领域。其中的IAP功能使得STM32可以通过固件升级来更新应用程序。远程升级OTA)技术则进一步提供了通过网络进行远程固件升级的能力。 EC20是一款高速的4G LTE通信模块,具有广泛的通信能力。EC20开发套件提供了一套开发工具和示例代码,帮助开发人员快速实现与EC20通信的功能。 Boot和App源码是指STM32的引导程序和应用程序的源代码。引导程序是在系统启动时加载的程序,负责初始化硬件和加载应用程序。应用程序则是用户编写的程序,实现了具体的功能。 关于这些资料,可以从ST官网和其他技术资源网站上获得。ST官网提供了完整的STM32系列产品说明、技术手册和应用笔记,其中包含有关IAPOTA的详细信息。此外,还可以在社区论坛和在线教程中找到很多有关STM32开发和EC20通信的实例和解决方案。 总之,在进行STM32远程升级和EC20开发时,可以利用官方提供的资料和开发套件源码来实现相关功能。与此同时,参考论坛和技术资源网站上的案例和教程,可以获得更多的帮助和指导。 ### 回答3: STM32是意法半导体推出的一系列32位微控制器产品系列,拥有丰富的外设功能和高性能的处理能力。IAP(In-Application Programming)是指通过应用程序对微控制器进行编程和升级的技术。即可以在设备内部通过编程方式更新应用程序,不需要将设备连接到外部编程器。 STM32远程升级是指在网络连接的环境下,通过远程服务器将新的固件或软件包传输到设备,实现设备的无线升级。远程升级可以提高设备的维护效率和更新速度,并且避免了将设备带回到开发环境进行更新的麻烦。 OTA(Over-The-Air)是指通过空中接口进行数据传输的技术。在STM32OTA升级过程中,设备使用EC20开发套件进行通信。EC20是一款支持2G/3G/4G网络通信的模块,可以实现高速稳定的数据传输。 Boot和App源码是指STM32微控制器中的启动代码和应用程序的源代码。Boot源码负责启动设备并初始化系统,App源码则是主要的应用程序代码,实现设备的各种功能和业务逻辑。这些源码对于开发者来说是非常重要的,可以用于定制和优化设备的性能和功能。 对于这些资料,我们可以通过搜索STM32和EC20相关的官方文档和开发者论坛来获取。这些资料包括技术手册、应用笔记、示例代码等,可以帮助我们理解和掌握STM32IAP、远程升级OTA等功能的实现方法和注意事项。此外,还可以参考其他开发者的经验和分享,加快自己的开发进度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值