百度优化网站建设,网站推广的目标是什么,网页设计图片上加文字,张北网站seoSTM32 OTA应用开发——通过内置DFU实现USB升级#xff08;方式1#xff09; 目录STM32 OTA应用开发——通过内置DFU实现USB升级#xff08;方式1#xff09;前言1 硬件介绍2 环境搭建2.1 Keil uVsion2.2 zadig2.3 STM32CubeProgrammer2.4 安装USB驱动3 OTA升级结束语前言
…STM32 OTA应用开发——通过内置DFU实现USB升级方式1 目录STM32 OTA应用开发——通过内置DFU实现USB升级方式1前言1 硬件介绍2 环境搭建2.1 Keil uVsion2.2 zadig2.3 STM32CubeProgrammer2.4 安装USB驱动3 OTA升级结束语前言
什么是OTA 百度百科空中下载技术Over-the-Air Technology; OTA是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。经过公网多年的应用与发展已十分成熟网络运营商通过OTA技术实现SIM卡远程管理还能提供移动化的新业务下载功能。 实际上现在我们所说的OTA比百度百科的定义还要更广泛OTA的形式已经不再局限于手机和SIM卡只要涉及到远程下载升级程序的方式我们都可以称之为OTA。例如通过4G5GWiFI蓝牙等无线通讯进行下载升级的可以称为OTA通过U盘RS485等串行接口进行升级的也可以称之为OTA。
OTA的作用 OTA的意义在于它在一定程度上突破了距离的限制在不借助烧录器的情况下完成固件的下载升级极大的方便了产品的升级和维护降低售后成本。
什么是BootLoader 百度百科在嵌入式操作系统中BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图从而将系统的软硬件环境带到一个合适状态以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中通常并没有像BIOS那样的固件程序注有的嵌入式CPU也会内嵌一段短小的启动程序因此整个系统的加载启动任务就完全由BootLoader来完成。 实际上BootLoader不仅仅在操作系统上使用在一些内存小功能应用较为简单的单片机设备上面也可以通过BootLoader来完成OTA升级。
什么是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远程OTA的文章实现的方式有很多种感兴趣的同学可以去看一下。 OTA应用开发系列合集https://blog.csdn.net/ShenZhen_zixian/article/details/129074047
1 硬件介绍
我这里测试用的是STM32F407。 用到的硬件接口如下
接口引脚作用USBPA11 PA12必要通过USB连接PC端用来传输固件以实现OTABOOTBOOT0 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的环境这里就不具体介绍了网上教程也很多不懂的同学自行查阅资料。 环境搭建好之后需要准备一个能够正常运行的代码用来测试我们后面的OTA升级。
2.2 zadig
zadig是用来安装一个USB驱动的只有安装好这个驱动后面的升级流程才能正常进行不然识别不到STM32的USB DFU模式。 这里先下载好软件后面我们再安装。 下载地址请自行查阅或者在我上传的链接下载也行。 zadighttps://download.csdn.net/download/ShenZhen_zixian/87570348 注本文测试的时候用的是v2.7.7版本。
2.3 STM32CubeProgrammer
这个工具是用来烧录代码的可以通过ST-Link、UART和USB下载。其中USB下载就是我们今天要讲的DFU模式。 STM32CubeProgrammer官方下载地址 https://www.st.com/en/development-tools/stm32cubeprog.html 根据自己的操作系统下载对应的安装包然后直接安装即可。 提示默认地址C:\Program Files\STM32Cube\STM32CubeProgrammer\bin如果安装完找不到应用程序的话可以在这个路径找到。
2.4 安装USB驱动
1、让STM32进入系统存储器启动模式 也就是配置BOOT0引脚拉高BOOT1引脚拉低。 提示BOOT引脚的状态要在MCU启动之前配置好才能进入对应的模式可以先配置BOOT引脚再上电也可以在配置好BOOT引脚之后复位MCU。
2、安装USB驱动 1把STM32的USB连接到PC端然后打开前面下载好的zadig点击Install WCID Driver。 提示打开zadig之后可能会出现两种情况第一种是什么设备都没有检测到第二种是有检测到设备但是设备不能正常使用。如下图所示。 不管是哪种情况直接点击安装即可。 等待安装完成。 安装完成后可以在zadig上看到设备。 提示如果没有看到设备可以插拔USB然后重复上面的操作。 另外如果之前安装过DfuSeDemo驱动能看到STM Device in DFU Mode设备需要先卸载掉原来的驱动才能用zadig安装新的驱动。 如果前面的驱动安装没有问题连接上电脑之后可以在设备管理器也能看到一个STM BOOTLOADER设备而且是没有黄色感叹号的。
3、打开STM32CubeProgrammer 如果驱动和接线都没问题那么在STM32CubeProgrammer可以看到检测到STM32设备。 提示如果没有找到设备请检查前面的步骤。
至此环境部分就搭建完成了。
3 OTA升级
1、连接USB 把STM32的USB接入到PC端。 在STM32CubeProgrammer上连接设备。此时能读取到芯片的Flash。2、导入hex或bin文件 打开要升级的固件hex或bin都可以。 打开后能看到固件存储的数据。
3、下载固件 点击“Download”下载固件到STM32.
4、重启设备 升级完成后将BOOT模式要改成主Flash模式BOOT0引脚拉低然后重新上电或复位即可运行新版本的代码。
至此整个升级流程就走完了。
结束语
好了关于如何通过STM32内置DFU实现USB升级就讲到这里这种方式虽然限制较多但在某些应用场景是很方便的比如SB键盘不需要自己编写Bootloader和上位机就可以实现OTA而且官方的升级渠道还稳定。其他应用场景就再另说合适的才是最好的。 如果你有什么问题或者有更好的方法欢迎在评论区留言。
更多相关文章 OTA应用开发系列合集https://blog.csdn.net/ShenZhen_zixian/article/details/129074047