通过应用程序跳转到STM32中的Bootloader,即在用户闪存的引导模式下使用Boot 0和Boot 1 Pins

通过应用程序跳转到STM32中的Bootloader,即在用户闪存的引导模式下使用Boot 0和Boot 1 Pins,第1张

概述我有固件升级的要求.我打算使用USB DFU类.但在我的情况下,固件升级命令将来自PC应用程序.所以我需要切换到系统内存中的bootloader.最初我正在运行应用程序,因此它从用户闪存启动,即我为用户闪存配置了Boot0和Boot 1引脚.由于DFU引导加载程序存在于系统闪存中,现在需要更改Boot0和Boot1引脚设置.有没有像启动0和启动1设置保持用户闪存相同的方式,在应用程序中我们跳转到系 我有固件升级的要求.我打算使用USB DFU类.但在我的情况下,固件升级命令将来自PC应用程序.所以我需要切换到系统内存中的bootloader.最初我正在运行应用程序,因此它从用户闪存启动,即我为用户闪存配置了Boot0和Boot 1引脚.由于DFU引导加载程序存在于系统闪存中,现在需要更改Boot0和Boot1引脚设置.有没有像启动0和启动1设置保持用户闪存相同的方式,在应用程序中我们跳转到系统内存?解决方法 Boot0 / 1引脚仅在处理器启动时被采样,以检查它是否应从内存加载用户代码或是否应加载引导加载程序.
之后这些引脚的状态对引导加载程序没有影响.

我一直面临类似的请求,并找到了2种按需加载引导加载程序的方法.

首先,您可以从用户代码到引导加载程序“JUMP”.例如,您可以在按下按钮时跳转到引导加载程序.

但是……这比简单的JUMP指令复杂得多:一些寄存器和设备必须正确配置才能与引导程序一起工作,你必须确保在JUMP期间不会触发IRQ,…实际上,你必须重新配置处理器,就像它在重置后刚启动一样.
您可以找到有关此技术的一些信息:on this video from ST.

我设法在STM32F1xx项目上做了这样的事情.
然而,在基于STM32F4的更复杂的项目中,这将变得非常困难……我将不得不停止所有设备(定时器,通信接口,ADC,DAC ……),确保不会触发IRQ,重新配置所有时钟,……

相反,我决定实现第二个解决方案:当我想跳转到引导加载程序时,我在其中一个备份寄存器中写入一个字节,然后发出软复位.然后,当处理器重新启动时,在程序的最开始,它将读取该寄存器.该寄存器包含指示应在引导加载程序模式下重新引导的值.然后,跳转到引导加载程序要容易得多,如the youtube video所示.

总结

以上是内存溢出为你收集整理的通过应用程序跳转到STM32中的Bootloader,即在用户闪存的引导模式下使用Boot 0和Boot 1 Pins全部内容,希望文章能够帮你解决通过应用程序跳转到STM32中的Bootloader,即在用户闪存的引导模式下使用Boot 0和Boot 1 Pins所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1236322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存