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

STM32F401RCT6在bootloader中初始化了usb外设,跳转到app失败

[复制链接]
KAO西瓜 提问时间:2023-10-27 20:48 / 未解决

在项目中使用了STM32F401RCT6这个芯片,使用cubemx生成的代码,在bootloader中初始化了usb外设,去读取U盘中的bin更新文件,能读取到并且写入正确flash,但是当跳转到app的时候会失败。app不运行,网上查了下说是在跳转前需要关闭USB外设时钟,于是使用__HAL_RCC_USB_OTG_FS_CLK_DISABLE()来尝试关闭,但是失败。有没有好点的解决办法?

收藏 评论8 发布时间:2023-10-27 20:48

举报

8个回答
STMCU-管管 回答时间:2023-10-30 08:32:33
确认在调用__HAL_RCC_USB_OTG_FS_CLK_DISABLE()之前,USB外设时钟是否已经启用。如果时钟已被禁用,则无需再次关闭,直接跳转到app即可
butterflyspring 回答时间:2023-10-30 10:40:29
APP的中断向量地址是否正确,这是关键因素。

编译APP时注意设置该地址,否则编译后的地址没有偏移是无法正确运行的。

这一点可以参考官方的例程。
KAO西瓜 回答时间:2023-10-30 10:56:42

butterflyspring 发表于 2023-10-30 10:40
APP的中断向量地址是否正确,这是关键因素。</p>
<p>编译APP时注意设置该地址,否则编译后的地址没有偏移是无法正 ...

地址没有问题,只要隐去usb外设的初始化,就可以正常跳转到app。没什么太好的办法,现在的做法是bootloader更新完app以后,软复位,再次执行一遍bootloader,读取到更新标志位不需要更新,就不执行后面的代码,直接跳转到app,这样是可以的。不过没搞清楚为何bootloader里初始化usb外设以后,在跳转app失败这个问题,以后遇到怕是要出大问题

KAO西瓜 回答时间:2023-10-30 11:08:33

STMCU-管管 发表于 2023-10-30 08:32
确认在调用__HAL_RCC_USB_OTG_FS_CLK_DISABLE()之前,USB外设时钟是否已经启用。如果时钟已被禁用,则无需 ...

这个问题挺严重的,不知道其他人有没有遇到过。我在bootloader里隐去对usb外设的初始化就可以正常跳转到app。没什么太好的办法,现在的做法是bootloader更新完app以后,软复位,再次执行一遍bootloader,读取到更新标志位不需要更新,就不执行后面的代码,直接跳转到app,这样是可以的。不过没搞清楚为何bootloader里初始化usb外设以后,在跳转app失败这个问题,以后遇到怕是要出大问题

KAO西瓜 回答时间:2023-10-30 11:20:19

网上有人在跳转到app以前调用了这2个函数

__HAL_RCC_PWR_CLK_DISABLE(); HAL_RCC_DeInit();,进去看了下里面的内容,貌似就是把时钟又配置了一遍。试了下,有了这2句话,就可以正常跳转到app了,搞不懂。希望有猛男来指点下,这个有点狠,把整个工程的时钟都在配置了一遍,如果有其他外设在运行不知道会不会有影响,如果有单独的针对usb外设的操作,不影响其他外设,就完美了

xmshao 回答时间:2023-10-30 14:25:24
如果中断矢量配置没问题的话,跳转失败往往跟跳转前的中断处理有关。


跳转前让BOOT区开启过的外设中断使能都禁用掉,包括systick的。


也不要霸王硬上弓似地简单做总中断的关闭。保证开始跳转后BOOT区不会


产生任何有效中断请求。


至于你提到的关闭外设时钟并非必须的。对于开启过的外设中断,我们往往


可以对相应外设进行复位操作令其中断使能位清零,尤其当我们针对某个外设开启的


中断较多时,这也是比较快捷而有效的方式。


比方我们对USB外设做下复位。写法可能跟芯片系列有关系,望具体调整参考使用。


__HAL_RCC_USB_FORCE_RESET()  ;
__HAL_RCC_USB_RELEASE_RESET() ;


至于你提到的其它方式,有些方式的确有点猛,呵呵!当然能达到目的也行。


不过,当我们搞清根本原因后,在组织代码时就可以灵活处理。     
butterflyspring 回答时间:2023-10-30 17:43:44
是不是还有什么中断没有关闭,可以关闭所有中断试试?
KAO西瓜 回答时间:2023-10-31 14:49:33

butterflyspring 发表于 2023-10-30 17:43
是不是还有什么中断没有关闭,可以关闭所有中断试试?

不是这个问题,中断在跳转前我都会屏蔽的。以后还是慎用usb外设,这次还能用其他办法绕过,下次就不好说了

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版