STM32G0 调试usb dfu 问题记录

一、概述

在做STM32G0 系列单片机的usb dfu功能。按照网上的教程,到官网下载了 。安装后,配置编写stm32 的BootLoader 功能代码,进入DFU模式(插入usb线)。

二、STM32 Download Firmware Update 驱动安装不成功

问题描述

Windows 能检测到usb的接入,但是识别不到当前设备。

点击STM32 DownLoad Firmware Update 查看驱动信息,提示该设备的驱动程序未被安装。

解决问题

找到DfuSe v3.06 的安装路径,根据自己操作系统的版本,选择对应的驱动文件,直接双击安装。我的系统是win10,路径是C:Program Files (x86)STMicroelectronicsSoftwareDfuSe v3.0.6BinDriverWin10 双击 dpinst_amd64 安装,问题解决。

三、升级后,校验不通过,无法开机

问题描述

通过dfuse 选择要升级的固件,点击upgrade , 程序显示升级成功。但是重新开机后,程序跑飞,没法开机。重试几次,偶尔能捕抓到程序出现hardfault 。

问题分析解决:

直接通过Jlink 烧录,程序能正常从boot 跳转到APP,app 能正常运行。说明跳转地址的处理,向量表重定向都是没问题的。

写数据出错?

通过Jlink分别读取usb升级前的hex文件和usb升级后的hex文件,并进行比对,发现hex文件中的app部分确实出现个别内容不一致,并且没有规律。 也通过升级工具的校验功能,验证了上述问题。通过dfuse 升级后,点击Verify ,提示如下(matching not good...):

说明程序想写的数据,跟写完读取出来的数据不一致。

flash擦写函数有bugs?

尝试优化flash擦写函数,禁止中断,检查地址边界。问题都没解决。

最终解决

在百思不得其解的时候,将升级用的usb线,从usb hub拔出,插入机箱的usb口,最终问题解决。搞了半天,原来是线材的问题。

经验分享 程序员 微信小程序 职场和发展