【IAP更新设备】STM32CubeProgrammer DFU功能实现设备固件升级 - J3 M Q1 x* O8 G% q Z清单' X* ]+ R x3 l6 g7 |' h 软件: 硬件: ( I+ p& H3 g+ j 一、先用STM32CubeMX生成 dfu工程8 J& M5 K% a. i* q/ X7 t6 Y 图文演示的usb的配置步骤: 前面1,2项默认。/ b: p& \1 [* Y. s0 `4 A 第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;1 c! A* K5 u# a8 e 第4项USBD_DFU_MEDIA Interface @Internal Flash /0x08000000/03*016Ka,01*016Kg,01*064Kg,01*128Kg 0 X1 y& Y- v3 A4 j5 M0 w @之后是特殊的映射描述符(解码标准描述)---------Internal Flash 8 W$ Y' J! g5 d% W3 h* I+ I8 X /0x之后是芯片flash起始地址------------------0x08000000: z0 K% r! D1 w* ^ H% p /后面是描述这个芯片flash的Sector的使用---------03*016Ka,01*016Kg,01*064Kg,01*128Kg $ a* u7 ~5 g' l. k * I' O$ y. r; {/ N0 m Sector具体是如何分块的要从数据手册(RM0368)中得知:6 _. p2 }1 i+ @% \ 9 r2 Y ]. }, x0 o ; Q* ?8 r: y4 x: J) O- a4 X 不同型号的stm32,其flash大小可能不同,具体看对应手册。stm32f401ccu6的flash大小是256kb,包含的Sector0-Sector5所以03*016Ka的意思是Sector0-Sector2共48kb,a代表是只可读。01*016Kg,01*064Kg,01*128Kg是分别描述剩下的Sector,g代表可读写。 6.jpg- ]9 L& @# O o USB标准通信时钟48MHz 7.jpg 堆栈Heap,Stack要设置大一点,否则usb设备枚举不成功(出现感叹号或者无法识别设备) 然后就是生成Keil MDK5工程了,补充:我们的工程应避免中文路径或者空格,否则生成工程失败。 $ r% B0 Z0 m% `/ r) S 二、修改dfu工程 具体修改是usbd_dfu_if.c,usbd_dfu_if.h和main.c三个文件。(参考链接在本文最后,若想复制代码到最后链接原文中复制) usbd_dfu_if.c中修改如下:4 n2 F. D$ {0 C3 P1 b/ j) O pEraseInit.NbSectors = 1;//即可,HAL_FLASHEx_Erase函数会遍历erase的。 usbd_dfu_if.h中修改如下:; D3 F+ y( r- B main.c中修改如下:; z' G! Y' }: x. D% h, O5 Y2 D 主函数意思是Key_IAP默认上拉,即默认跳转app程序,要通过dfu方式下载程序先将Key_IAP拉低。 编译成功后用stlink烧录到核心板上。 三、生成dfu_app工程 万物从点灯开始!. E C. P! d' s7 J/ b- `% d7 Q 编写好LED程序后,我们只需修改三处地方就可以了。 修改app flash启动地址和剩余size大小2 K. C. k1 q, p [$ p 打开system_stm32f4xx.c 文件,修改中断向量偏移量,注释上说明偏移量要是0x200的整数倍。我们修改和app的启动地址偏移一致0xC0007 j B1 j4 R' y0 m6 G3 U: m1 g/ a8 i 生成.hex文件: s2 s( h' t7 K! G 编译工程。 四、用stm32CubeProgrammer下载dfu_app程序5 z9 y- e1 o' n H$ x5 U U 下载完成有个error表示无法软重新启动设备,需要重新上电,核心板会自动跳转执行app程序, r# |. |( ]3 r9 |" f4 F/ E 6 x: g6 |- O+ h5 D' E 文章出处: Tkwer望远镜 : C" ~: \2 B: v |
【STM32MP135-DK】裸机开发
[STM32MP125-DK] 裸机开发
STM32MP135F-DK开发板评测-SD卡启动裸机程序
在 Keil中使用STM32CubeProgrammer
【STM32U599】1.初步尝试
【STM32WB55评测】评测一 DTM射频&ACI事件测试
在 Keil 中使用 STM32CubeProgrammer
STM32CubeProgrammer软件说明
STM32CubeProgrammer基础使用说明
资料下载 | STM32CubeProgrammer软件说明