硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3232|回复: 11
收起左侧

[有问必答] stm32f4 USB DFU不成功

[复制链接]

8

主题

50

回帖

79

积分

初级会员

积分
79
发表于 2021-6-2 16:51:43 | 显示全部楼层 |阅读模式
芯片:stm32f411ret6
stm32cubeprog: V2.7.0
工程:使用RTX5系统、RL-USB、FS,连接USB后,通过USB将SD卡识别为U盘
问题:直接用的V5版本的JumpToBootloader代码,连接USB后,电脑把SD卡识别为U盘,长按按键,断开USB连接,执行JumpToBootloader函数,然后在SysMemBootJump()函数这里,居然进入HardFault了,堆栈大小按照手册上修改了

这个F4的USB DFU还有其他要配置的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2021-6-2 19:37:24 | 显示全部楼层
按照楼主的意思来看,这个貌似还不是USB DFU,应该是SD加载APP。不知道楼主表达是这个意思不

回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-2 20:32:42 | 显示全部楼层
eric2013 发表于 2021-6-2 19:37
按照楼主的意思来看,这个貌似还不是USB DFU,应该是SD加载APP。不知道楼主表达是这个意思不

是要用usb dfu,正常情况下插上usb把sd卡识别成u盘是我的软件的一个功能,列出来是担心是不是有这个功能引起的问题。我使用的按键跳转,跳转之前软件断开了usb连接,相当于取消了u盘功能。

我不太清楚要实现usb dfu是不是就是移植一下JumpToBootloader函数,配置一下堆栈大小就可以了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2021-6-3 08:12:15 | 显示全部楼层
wling597074509 发表于 2021-6-2 20:32
是要用usb dfu,正常情况下插上usb把sd卡识别成u盘是我的软件的一个功能,列出来是担心是不是有这个功能 ...


你的意思是你的boot是RTX5的,然后模拟个U盘,将APP拖到U盘里面,然后做升级,是这个意思不。

回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-3 08:26:40 | 显示全部楼层
eric2013 发表于 2021-6-3 08:12
你的意思是你的boot是RTX5的,然后模拟个U盘,将APP拖到U盘里面,然后做升级,是这个意思不。

不是,boot就是用自带的bootloader,然后我想把boot功能用在我的工程里面,U盘什么的就是个我的应用功能,跟boot没关系。就是想直接通过USB升级固件,用stm32cubeprog。跟“V5-009_基于系统bootloader的USB接口方式IAP升级(USB DFU)”这个例程一样。
回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-3 16:31:58 | 显示全部楼层
eric2013 发表于 2021-6-3 08:12
你的意思是你的boot是RTX5的,然后模拟个U盘,将APP拖到U盘里面,然后做升级,是这个意思不。

硬汉兄,我这个可能是什么问题了,有点找不到方向
回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-3 16:59:01 | 显示全部楼层
eric2013 发表于 2021-6-3 08:12
你的意思是你的boot是RTX5的,然后模拟个U盘,将APP拖到U盘里面,然后做升级,是这个意思不。

我觉得可能是跳转代码放的位置不对,之前是把跳转代码放到一个任务里面的,此时设备处于的状态是U盘模式,估计是因为USB是不是被RL-USB配置过了,所以出现了HardFault。
我把跳转代码放到了AppTaskStart的bsp_init()之后,在那判断按键,然后根据按键时长来判断是否进入bootloader,这次就成功了,我觉得区别可能就是那会儿连RTX5都还没运行起来,RL-USB 也没配置,所以就可以了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2021-6-3 18:21:37 | 显示全部楼层
wling597074509 发表于 2021-6-3 16:59
我觉得可能是跳转代码放的位置不对,之前是把跳转代码放到一个任务里面的,此时设备处于的状态是U盘模式 ...

我现在还没有搞明白你的程序是怎么玩的,方便简单说下逻辑情况。

boot是怎么搞的,app是怎么搞的,你的模拟U盘又是干啥的。
回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-3 18:38:00 | 显示全部楼层
是这样的,我的一个传感器数据采集设备,设备有一个按键开关,用于开关机,软件使用了RTX5系统、RL-USB、FS,然后这个设备有个功能就是连接USB后,会将板载的SD卡识别为U盘。这些是我设备的功能

然后我希望在设备连接了USB后,通过长按按键,在一个任务里面跳转到bootloader,按照例程那样通过USB更新固件,没有区分boot和APP,就一个工程。

模拟U盘仅仅是我设备采集完数据后,读数据用的,我之所以提出来是觉得就是这个功能影响了USB DFU,不要纠结模拟U盘,没打算用U盘更新固件。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2021-6-4 07:17:53 | 显示全部楼层
wling597074509 发表于 2021-6-3 18:38
是这样的,我的一个传感器数据采集设备,设备有一个按键开关,用于开关机,软件使用了RTX5系统、RL-USB、FS ...

进入hardfault说明没有正确跳转,测试下简单的裸机例子能正常跳转不
回复

使用道具 举报

8

主题

50

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-6-4 08:52:49 | 显示全部楼层
eric2013 发表于 2021-6-4 07:17
进入hardfault说明没有正确跳转,测试下简单的裸机例子能正常跳转不

我应经放弃在任务里跳转了,直接放在了RTOS和RL-USB启动之前了,这样没问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2021-6-5 08:39:24 | 显示全部楼层
wling597074509 发表于 2021-6-4 08:52
我应经放弃在任务里跳转了,直接放在了RTOS和RL-USB启动之前了,这样没问题。

好的,还有什么问题再交流。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 09:58 , Processed in 0.303993 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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