stm32L4xx 通过USB DFU功能升级固件
背景
因为项目需求,用户不方便用SWD模式下载程序,而且本设备也留有USB,因此考虑用USB DFU模式进行固件升级。
设备上使用的单片机是stm32l476,ST官方在单片机内部bootloader已经支持通过USB方式升级固件,但是需要通过修改MODE来切换是升级固件还是运行用户程序,设备本身也没有留修改mode的按键等,因此考虑修改使用USB DFU实现的IAP功能。
设计思路
设备上电后,5秒内没有检测到USB,那么进入用户程序区,如果检测到USB插入,进入Bootloader,等待下载固件。
实现步骤
- USB DFU Bootloader代码
基本上完全使用了STM32Cube库中的例子,只是在它的基础上稍微做了修好,加入了usb是否插入的状态读取。
/**
* @brief SetupStage callback.
* @param hpcd: PCD handle
* @retval None
*/
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
{
/*监测到USB插入后,亮绿灯,并且把标志位置1*/
BSP_LED_On(LED_GREEN);
usb_dfu_is_activated = 1;
USBD_LL_SetupStage(hpcd->pData, (uint8_t *)hpcd->Setup

本文介绍了如何利用STM32L4xx的USB DFU功能进行固件升级。在没有SWD下载模式的情况下,通过检测USB连接决定运行用户程序还是进入Bootloader。详细步骤包括Bootloader的USB DFU代码修改、用户程序起始地址配置以及固件升级过程。最后,通过DfuSe工具验证升级成功。
最低0.47元/天 解锁文章
3723





