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

这篇具有很好参考价值的文章主要介绍了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。
用到的硬件接口如下:

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

BOOT引脚配置对应如下图:
dfu文件,OTA,单片机相关,stm32,OTA,USB

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版本。
dfu文件,OTA,单片机相关,stm32,OTA,USB

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

3、安装驱动
根据自己的操作系统选择对应的驱动。(Win11的自行查阅资料安装)
dfu文件,OTA,单片机相关,stm32,OTA,USB
64系统安装dpinst_amd64.exe,32位系统安装dpinst_x86.exe
dfu文件,OTA,单片机相关,stm32,OTA,USB

2.3 检查USB驱动

1、让STM32进入系统存储器启动模式
也就是配置BOOT0引脚拉高,BOOT1引脚拉低。
提示:BOOT引脚的状态要在MCU启动之前配置好才能进入对应的模式,可以先配置BOOT引脚再上电,也可以在配置好BOOT引脚之后复位MCU。
dfu文件,OTA,单片机相关,stm32,OTA,USB

2、把STM32的USB连接到PC端
如果前面的驱动安装没有问题,连接上电脑之后可以在设备管理器看到一个STM Device in DFU Mode设备。
dfu文件,OTA,单片机相关,stm32,OTA,USB

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

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

3 固件升级

3.1 打包新版本固件

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

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

1、打包hex文件
步骤如下:
1)输入设备信息
提示:设备信息在DfuSeDemo中可以看到。
dfu文件,OTA,单片机相关,stm32,OTA,USB
2)打开hex文件
dfu文件,OTA,单片机相关,stm32,OTA,USB
3)生成dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB
4)保存dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB
5)成功生成dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB

2、打包bin文件
步骤如下:
1)输入设备信息
提示:设备信息在DfuSeDemo中可以看到。
dfu文件,OTA,单片机相关,stm32,OTA,USB
2)选择bin文件并输入Flash起始地址dfu文件,OTA,单片机相关,stm32,OTA,USB
dfu文件,OTA,单片机相关,stm32,OTA,USB
3)生成dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB
4)保存dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB
5)成功生成dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB

3.2 升级固件

1、打开DfuSeDemo
dfu文件,OTA,单片机相关,stm32,OTA,USB
2、导入打包好的dfu文件
dfu文件,OTA,单片机相关,stm32,OTA,USB

dfu文件,OTA,单片机相关,stm32,OTA,USB

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

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

结束语

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

更多相关文章:
固件在线升级系列合集:https://blog.csdn.net/ShenZhen_zixian/article/details/129074047文章来源地址https://www.toymoban.com/news/detail-733868.html

到了这里,关于STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 IAP应用开发——自制BootLoader

    什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就

    2024年02月13日
    浏览(39)
  • STM32 IAP应用开发--bootloader升级程序

    原文链接:https://blog.csdn.net/ShenZhen_zixian/article/details/129424077 什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就

    2024年01月17日
    浏览(81)
  • STM32之Bootloader、USB、IAP/DFU下载

    STM32 IAP应用开发——通过内置DFU实现USB升级(方式2) STM32 IAP应用开发——通过内置DFU实现USB升级(方式1) STM32程序下载4:通过STM32CubePro-USB下载 STM32程序下载3:通过STM32CubePro-UART下载 STM32程序下载2:通过STM32CubePro-ST-Link下载 如何使用串口来给STM32下载程序 通过STM32内置的U

    2024年02月02日
    浏览(43)
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收

      参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866 目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。 现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。   MCU:STM32F429ZIT6 开发环境:

    2024年02月08日
    浏览(51)
  • STM32F429 Discovery开发板应用:实现SPI-SD Card文件写入(搭载FatFS文件系统)

    MCU:STM32F429ZIT6 开发环境:STM32CubeMX+MDK5   外购了一个SPI接口的SD Card模块,想要实现SD卡存储数据的功能。 首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。   此时,双击完后会关闭此界面,然后打开一个新界面。

    2024年02月08日
    浏览(59)
  • STM32CubeIDE开发(三十一), stm32人工智能开发应用实践(Cube.AI).篇一

    目录 一、cube.AI简介及cubeIDE集成        1.1 cube.AI介绍        1.2 cube.AI与cubeIDE集成与安装         1.3 cube.AI支持硬件平台         1.4 cube.AI应用的好处  二、FP-AI-SENSING1        2.1 FP-AI-SENSING1简介           2.2 FP-AI-SENSING1软件包支持硬件平台 三、FP-AI-SENSING1部署        

    2024年01月22日
    浏览(44)
  • STM32CubeIDE开发(三十三), stm32人工智能开发应用实践(Cube.AI).篇三

    目录 一、cube.AI实际项目应用 二、创建工程 2.1 工程配置 2.2 外设代码设计 2.3 传感器数据采集与输出源码设计 2.4 编辑下载程序,采集数据  三、模型训练 四、cube.AI配置及c模型生成 五、模型调用及测试         接篇二,前文都是采用FP-AI-SENSING1案例和配套的B-L475E-IOT01A开

    2024年01月17日
    浏览(70)
  • 使用STM32进行联网应用开发(代码可取)

    随着互联网技术的普及和物联网应用的兴起,各种设备和系统开始向互联网靠拢,实现互联互通。在这样的背景下,嵌入式系统的联网需求变得愈发迫切。传统的嵌入式系统往往只需实现单机功能,与外界通信的方式也大多是基于串口通信或者局域网通信,而现在越来越多的

    2024年04月09日
    浏览(38)
  • STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解STM32 片内资源ADC。本实验是基于STM32F103开发 实现 NTC温度采集。 NTC温度采集实现: 1、使用查表方式。可参考

    2024年02月03日
    浏览(44)
  • STM32 USB DFU固件升级的设计与实现

    STM32微控制器支持通过USB DFU(Device Firmware Upgrade)协议进行固件升级,这使得设备可以在不需要特殊的调试工具或编程器的情况下,通过USB接口实现固件的更新。 在本文中,我们将介绍如何设计和实现STM32 USB DFU固件升级功能,并提供相关的代码示例。 ✅作者简介:热爱科研

    2024年01月25日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包