|
【IAP更新设备】STM32CubeProgrammer DFU功能实现设备固件升级 : R2 [3 c+ G# ?( W: Y7 v$ }5 \4 V \+ r 清单( h& j. S5 @8 f( T U; B 软件:
硬件:
% l: G2 \7 F9 U* r5 i/ V . e l8 n" w1 s4 ]" C a- y
一、先用STM32CubeMX生成 dfu工程 图文演示的usb的配置步骤:
前面1,2项默认。# s( p8 Q) g/ ^" @ 第3项USBD_DFU_APP_DEFAULT_ADD (Base Address 0x)是指定dfu_app开始存放代码的flash地址,也是说明dfu代码最大占用空间,不能超过这个大小。stm32f401ccu6内置flash大小是256kb,所以我任性使用48Kb来存dfu代码,实际上生成的简单dfu代码是很小的,几kb量级。具体型号具体设置这个地址。stm32默认flash启动地址是0x08000000,0x0800C000 - 0x08000000 = 0xC000,0xC000 ÷ 1024 = 48kb; 第4项USBD_DFU_MEDIA Interface @Internal Flash /0x08000000/03*016Ka,01*016Kg,01*064Kg,01*128Kg % ~8 t! U7 U# L/ ? @之后是特殊的映射描述符(解码标准描述)---------Internal Flash " G ?5 p) L/ h; B* n. a( U, i, e /0x之后是芯片flash起始地址------------------0x08000000 /后面是描述这个芯片flash的Sector的使用---------03*016Ka,01*016Kg,01*064Kg,01*128Kg 3 ?9 N6 d: s: e. @5 @# w& @/ K/ | & R3 Q! z w G7 v. r5 A3 Q Sector具体是如何分块的要从数据手册(RM0368)中得知: 6 a: l7 s0 [! N 不同型号的stm32,其flash大小可能不同,具体看对应手册。stm32f401ccu6的flash大小是256kb,包含的Sector0-Sector5所以03*016Ka的意思是Sector0-Sector2共48kb,a代表是只可读。01*016Kg,01*064Kg,01*128Kg是分别描述剩下的Sector,g代表可读写。 6.jpg USB标准通信时钟48MHz; e+ N- W+ r6 b" I1 N 7.jpg 堆栈Heap,Stack要设置大一点,否则usb设备枚举不成功(出现感叹号或者无法识别设备)' s' g3 v+ w E! P# T 然后就是生成Keil MDK5工程了,补充:我们的工程应避免中文路径或者空格,否则生成工程失败。 f! u; t |3 k& S 二、修改dfu工程 具体修改是usbd_dfu_if.c,usbd_dfu_if.h和main.c三个文件。(参考链接在本文最后,若想复制代码到最后链接原文中复制) usbd_dfu_if.c中修改如下:# N7 t- j, s9 a. D1 m4 c- v/ Z
pEraseInit.NbSectors = 1;//即可,HAL_FLASHEx_Erase函数会遍历erase的。
usbd_dfu_if.h中修改如下:
main.c中修改如下:, `7 ]3 |4 t% n4 a" M1 }- ?6 [
主函数意思是Key_IAP默认上拉,即默认跳转app程序,要通过dfu方式下载程序先将Key_IAP拉低。# C {' E% w2 @' V& }9 b E7 I 编译成功后用stlink烧录到核心板上。% X; N* u( l" I! b' q4 E5 F8 v 三、生成dfu_app工程. T( D+ {) M. l% h0 V 万物从点灯开始! 编写好LED程序后,我们只需修改三处地方就可以了。
修改app flash启动地址和剩余size大小+ x0 Y- T' n! |. [9 N# { 打开system_stm32f4xx.c 文件,修改中断向量偏移量,注释上说明偏移量要是0x200的整数倍。我们修改和app的启动地址偏移一致0xC000! T1 D5 J* U' v t3 v, O, O7 r3 N. H
生成.hex文件: }% @- C& a: }1 w/ L1 x
编译工程。+ Z* o" o7 q% v7 ]% A' ] 四、用stm32CubeProgrammer下载dfu_app程序1 g0 i$ m3 i0 G5 n
下载完成有个error表示无法软重新启动设备,需要重新上电,核心板会自动跳转执行app程序 - t' A5 k( ?$ F4 M 文章出处: Tkwer望远镜 % I5 J3 _3 @7 h; ?4 R, r |
STM32CubeProgrammer 里的“安全编程”
STM32CubeCLT 1.22.0新版本发布
STM32CubeProgrammer 2.23新版本发布
实战经验 | STM32CubeProgrammer与STM32 Bootloader连接全流程实战指南
【STM32U3 评测】人体行为识别
【STM32U3评测】实战项目:无电池温湿度计
STM32CubeProgrammer 2.22:眼见为实 —— 全新MCU内存映射图形导出界面,规避常规开发错误
重磅升级!STM32CubeProgrammer 2.21 解锁SWD多从机模式,开发效率再飙升!
在主机模式下使用STM32Cube HAL I2C驱动
【问卷有礼】STM32CubeProgrammer—您的声音很重要!
微信公众号
手机版