你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】在stm32上使用DFU

[复制链接]
STMCU小助手 发布时间:2022-2-6 20:35
   今天在STM32上尝试了一下DFU功能。使用DFU需要准备PC上的软件DfuSe,驱动程序就在软件的安装目录下;另外还需要DFU固件的MDK的工程。
    因为网上有很多图文教程,这里只说下大致的流程:
    首先修改DFU工程文件,根据板子的情况修改上拉电阻的使能引脚,如果是12M的外部晶振还需要修改时钟的配置;同时,DFU模式是通过判断某一引脚(比如按键是否按下)来选择是否进入的,因此这个引脚也要根据板子的情况自定义。最后就是工程的Option里ROM起始地址及范围的设置(例如0x08000000和0x3000)。完成后就可以编译,烧到板子上了。
    用户的程序也需要修改,打开项目,修改ROM的起始地址为0x08003000,把大小从0x80000改为0x7D000(这里用的是stm32f103zet6,512K的内部FLASH)。资料上提到需要将调用函数NVIC_SetVectorTable()的参数进行修改,但是在我的工程里并没有调用这个函数,而是直接操作寄存器,因此需要修改的是宏定义VECT_TAB_OFFSET,将其从0x0改为0x3000。另外,为了后面产生.dfu文件,需要在Option中设置编译生成Hex文件。
    然后安装DfuSe,用DFU File Manager把用户程序的Hex文件转换为.dfu后缀的文件。连接好USB线,按下板上的按键并上电,如果一切正常则PC会识别新设备。安装好驱动程序后,打开DfuSe Demostration软件,就可以看到已连接设备了。接下来下载过程都是很简单的。
    不过,在我第一次下载好程序,板子重新上电后,stm32并没有成功运行用户程序,在Debug中发现固件没有被全部烧写进FLASH。后来在DfuSe Demostration中找到了原因,在Actions一栏中的Internl FLASH只有128个扇区,每个扇区1K,而我的固件有150K左右。经过摸索,才发现这关于Internal FLASH的描述是由板上的DFU固件提供的,在usb_desc的字符串DFU_StringInterfaceX中修改。修改后,重新下载固件,并烧写用户程序,运行一切正常。
   
160047545854235.png

+ f1 q$ M, O2 g3 Z
160048154942593.png
  S" D( V$ w0 y$ M: @6 W& G
收藏 评论0 发布时间:2022-2-6 20:35

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版