通过应用程序跳转到STM32的Bootloader,即在Boot模式下使用Boot 0和Boot 1引脚从用户闪存中跳转到Boot加载器。
我有固件升级的要求.我打算使用USB DFU课程.但是,在我的情况下,固件升级的命令将来自PC应用程序.因此,我需要切换到系统内存中存在的引导加载程序.最初,我正在运行应用程序,因此它将从用户闪存中启动,即我有boot0和为用户闪存配置的启动1个引脚.由于DFU引导加载程序在System Flash中存在,因此现在需要更改该boot0和boot1引脚设置.有没有启动0和引导1设置与用户闪存相同的方法,在应用程序中,我们跳到系统内存? 解决方案 boot0/1销仅在处理器启动时进行采样,以便检查是否应该从内存中加载用户代码,还是应该加载引导程序. 这些引脚的状态之后没有启动加载器的效果. 我遇到了类似的请求,并找到了两种按需加载引导加载程序的方法. 首先,您可以从用户代码"跳"到引导加载程序.例如,按下按钮时,您可以跳到引导加载程序. 但是...这比简单的跳跃指令要复杂得多:必须正确重新配置某些寄存器和设备以与引导加载程序一起使用,您必须确保在跳跃过​​程中不会触
0 2023-11-10
编程技术问答社区
在STM32 F072上如何用软件跳转到引导程序(DFU模式)?
STM32 App Note 2606讨论了这一点,但是没有简单的代码示例. 解决方案 使用IAR Ewarm在STM32F072核板上测试了此答案.此答案使用" STM32标准外围图书馆",没有其他. 请注意,验证您成功使用启动加载器模式(DFU模式)的最佳/最简单方法是连接一个USB-2-UART转换器(从Sparkfun获取一个: http://sfe.io/p9873 以$ 15)在行PA_9(USART1_TX)和PA_10(USART1_RX)上(不要忘记也连接地面).我无法使用nucleo usart2默认连接(/dev/ttyACM0),因此外部USB-2-USART连接.然后创建一个简单的C程序以在USART连接上编写0x7F.如果您处于DFU模式,它将使用一个字节:0x79回复.我使用Ubuntu,因此我的测试程序编译并在Linux上运行. 此外,测试引导加载器模式的最简单方法(又称DFU模式)是跳动boot0行 +3.3V.这些就在核上彼此相邻.
60 2023-09-30
编程技术问答社区
我怎样才能从主程序和引导程序中使用一个功能?(嵌入式)
首先,我需要说我根据皮质M4开发嵌入式设备的应用. i具有引导加载程序和主应用程序常见的功能.现在,我将源文件编译为2次,以获取Bootloader和App.但是我在Dual Bank DFU的空间上跑了很短,我想在ROM中只有一次这些功能.知道我该如何实现这一目标? 编辑: 使用函数指针可能在某些情况下可能危险,检查我的问题 - 使用指针功能-1个设备上的2个单独应用程序 解决方案 这只是一个部分答案,假设您可以使用相同的地址空间从主代码跳入引导加载程序.然后,一种常见的技术是将您的" bootloader API"作为函数指针表. 说例如您在引导程序中具有以下功能: static int do_something(void) { return 42; } static int do_something_else(int arg) { return arg+5; } 然后,您将在这样的标题中声明您的API: struct
24 2023-02-03
编程技术问答社区
通过应用跳转到STM32的Bootloader,即在Boot模式下使用Boot 0和Boot 1引脚从用户闪存中跳转到Boot加载器。
我有固件升级的要求。我打算使用USB DFU类。但对于固件升级的命令将来自于我而言PC应用程序。所以我需要切换到引导程序是存在于系统内存。由于最初我运行应用程序,它正从用户闪存引导即我有BOOT0和引导1引脚配置用户闪存。由于DFU引导程序是在有系统的闪存,现在该BOOT0和BOOT1引脚设置需要改变。有没有像引导0和引导的方式1设置保持一致的用户闪存,并在应用中,我们跳转到系统内存? 解决方案 BOOT0 / 1引脚仅当处理器开始,以检查它是否应该从内存中加载用户code或采样是否应加载引导程序。 这些引脚的状态没有引导装载程序之后的效果。 我已经面对了类似的请求,并发现2种方式来加载点播的引导程序。 首先,你可以在“JUMP”从用户自code到bootloader。例如,您可以跳转到引导程序当按钮为pressed。 不过......这不仅仅是一个简单的指令JUMP复杂得多:一些寄存器和设备必须正确地重新配置与引导加载程序的工作,你必须确保没有IRQ将跳转过程中引发的,
3776 2022-07-19
编程技术问答社区