OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3966|回复: 12

STM32H750使用System Memory 进行USB DFU升级该怎么做?

[复制链接]

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
发表于 2019-7-19 15:50:23 | 显示全部楼层 |阅读模式
20金钱
使用的是STM32H750,User Flash只有128k,所以想要借助ST自己的System Memory的DFU升级代码,不知道该怎么做,一脸茫然,求大佬指点,或者有没有相关例程和资料能分享下,感谢!!

最佳答案

查看完整内容[请看2#楼]

Boot = 0,从主函数跳到System Memory,代码如下[/backcolor] #define APPLICATION_ADDRESS (uint32_t)0x1FF09800 //注意不是0x1FF00000[/backcolor] typedef void (*pFunction)(void);[/backcolor] pFunction JumpToApplication;[/backcolor] uint32_t JumpAddress; [/backcolor] JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);[/backcolor] JumpToApplication = (pFunction) J ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-7-19 15:50:24 | 显示全部楼层
Boot = 0,从主函数跳到System Memory,代码如下

#define APPLICATION_ADDRESS   (uint32_t)0x1FF09800  //注意不是0x1FF00000
typedef  void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddress;      



      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      JumpToApplication = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) 0x08000000);
      JumpToApplication();


因为debug发现0x1FF00000处到0x1FF097FF都是0xFFFF
而0x1FF09800刚好不是0xFFFF所以尝试将APPLICATION_ADDRESS的地址改为了0x1FF09800
然后就可以了...


至于System Memory中0x1FF00000的0xFF是什么意思还是不得而知
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-7-19 16:54:45 | 显示全部楼层
目前找到的相关资料是官方的AN3156和AN2606
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-20 02:13:06 | 显示全部楼层
帮顶
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-7-20 14:45:34 | 显示全部楼层
尝试了直接跳到了System Memory,结果设备管理器里面没有发现DFU的设备啊

#define APPLICATION_ADDRESS   (uint32_t)0x1FF00000  //System Memory
typedef  void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddress;      



      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      JumpToApplication = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
      JumpToApplication();

各位大佬,是不是这样玩的啊?
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-7-20 19:58:15 | 显示全部楼层
虽然还是不知道怎么在BOOT = 0的情况下跳进System Memory中的自举程序
但是通过将Boot = 1,然后插入USB ,reset,就可以在设备管理器中看到DFU设备了,
但是Programmer找不到DFU设备,DfuSeDemo.exe软件可以找到DFU设备,通过
DfuFileMgr.exe软件将Keil编译生成的.hex文件转换为.dfu文件后,再通过DfuSeDemo.exe软件
即可升级了。

可是我如果不将Boot设置为1,能够在应用代码中跳转到System Memory中的自举程序呢?
我尝试了将APPLICATION_ADDRESS = 0x1FF00000
        JumpAddress = (__IO uint32_t)(APPLICATION_ADDRESS);
        JumpToApplication = (pFunction) JumpAddress;
        /* Initialize user application's Stack Pointer */
//      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
      JumpToApplication();

结果debug直接跑硬件错误中断中去了


设备管理器中DFU设备

设备管理器中DFU设备

DfuFileMgr软件将hex文件转换为dfu文件

DfuFileMgr软件将hex文件转换为dfu文件

DfuSeDemo软件进行Update

DfuSeDemo软件进行Update

Programmer找不到DFU设备

Programmer找不到DFU设备

en.stsw-stm32080.zip

17.74 MB, 下载次数: 97

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-21 03:00:31 | 显示全部楼层
Levi123456 发表于 2019-7-20 19:58
虽然还是不知道怎么在BOOT = 0的情况下跳进System Memory中的自举程序
但是通过将Boot = 1,然后插入USB  ...

继续努力,相信你可以搞定
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-7-21 18:03:06 | 显示全部楼层
正点原子 发表于 2019-7-21 03:00
继续努力,相信你可以搞定

已经解决了,可以在Boot = 0的情况下升级了,稍后发一下解决过程
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-22 02:15:15 | 显示全部楼层
Levi123456 发表于 2019-7-21 18:03
已经解决了,可以在Boot = 0的情况下升级了,稍后发一下解决过程

谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-6-12
在线时间
12 小时
发表于 2019-8-14 11:54:55 | 显示全部楼层
可以做一个DFU升级外部的SPI FLASH的,H750内部的flash太小。
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-8-21 16:03:11 | 显示全部楼层
嗯,这个应该属于IAP了吧
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-14
在线时间
13 小时
 楼主| 发表于 2019-8-21 16:04:39 | 显示全部楼层
我不是医生 发表于 2019-8-14 11:54
可以做一个DFU升级外部的SPI FLASH的,H750内部的flash太小。

嗯,这个属于IAP吧,这位兄弟有做过吗
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-4-28
在线时间
21 小时
发表于 2019-11-9 17:14:12 | 显示全部楼层
大佬,可以发一下整个过程吗?我搞DFU也遇到一些问题一头雾水中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 20:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表