如果有人想要使用DFU(“固件升级”)功能,本教程将教您如何在STM32使用USB Host(或者说OTG)操作时通过二进制文件加载来使用USB。
STM32 USB training - 11.3 USB MSC DFU host labs
这个教程是一系列视频的一部分,强烈建议程序员观看,以更好地了解STM32 USB端口的工作和使用方式(这些视频由STM32制造商提供,我建议程序员观看该频道上的所有视频)。
MOOC - STM32 USB training
注意:STM32教程中的示例代码可在视频描述中获得。
可以通过同事Employed Russian解释的命令来获取二进制文件(*.bin),并且该命令也可以适应生成包含CRC使用比较值的文件,有关详细信息请参见以下帖子。
实践:CRC 校验和生成
Srec_cat 可以用于生成 CRC 校验和并将其放入 HEX 文件中。为了简化流程,请将 srec_cat.exe 放置在项目文件夹的根目录中。
关于 CRC 使用的一些提示和解决方案(Windows/Linux)
不幸的是,代码量太大了,无法直接在这里发布,但我会在下面留下与其他答案相关的代码:
arm-none-eabi-objcopy -O ihex "${BuildArtifactFileBaseName}.elf"
"${BuildArtifactFileBaseName}.hex" && ..\checksum.bat
${BuildArtifactFileBaseName}.hex
checksum.bat 文件的内容:
#!/bin/bash
# Windows [Dos comment: REM]:
#..\srec_cat.exe %1 -Intel -fill 0xFF 0x08000000 0x080FFFFC -STM32 0x080FFFFC -o ROM.hex -Intel
# Linux [Linux comment: #]:
srec_cat $1 -Intel -fill 0xFF 0x08000000 0x080FFFFC -STM32 0x080FFFFC -o ROM.hex -Intel
注意:在这种情况下,要写入的文件是ROM.hex(您需要配置STM32CubeIDE才能执行此操作,IDE使用*.elf文件,请参见上面的提示了解如何执行此操作)
另一个教程涉及使用具有*.DFU扩展名的文件:
DFU - DfuSe
DFU Bootloader的主要优点是:无需特定工具,如JTAG、ST-LINK或USB-to-UART电缆。通过USB在新组装的板上编程“空”STM32设备的能力。并且可以在开发或预生产期间轻松升级STM32固件。
使用HEX文件的需求简化了实现带有CRC值生成的ROM.hex文件的操作,几乎是连续的:
您必须从.HEX或.S19文件生成.DFU文件,以执行此操作,请使用DFU文件管理器。
但是看起来使用*.DFU文件并不像使用*.BIN文件那样独立,因此我找到了另一段代码,它将带有CRC的HEX文件转换为*.BIN文件,可以按照本答案开头引用的教程(11.3 USB MSC DFU host)使用USB闪存驱动器:
objcopy --input-target=ihex --output-target=binary code00.hex code00.bin
来源
听起来有点混乱,但我们可以按照以下步骤进行操作:
1- STM32CubeIDE生成*.elf文件。
2- 编译后,*.elf文件被转换为*.hex文件。
3- 通过srec_cat应用程序在*.hex文件中添加CRC值。
4- 现在将*.hex文件转换为*.bin文件。
5- 然后将BIN文件存储在USB闪存驱动器上。
6- STM32使用USB闪存驱动器文件更新固件。
要使用*.BIN文件,必须先将STM32编程加载BIN文件。如果未编程(STM32为空、未烧录或程序未制作为加载BIN文件),则需要使用St-Link或其他编程器,或者可能需要使用上述教程中描述的DFU方法(DFU-DfuSe)。