编译应用程序使其不从Flash stm32L4R9I开始运行

问题描述

我有一个steval-stwinkt1板,我正在尝试启用对DFU模式的支持

我将服装引导加载程序固件刷新到了闪存的开头(0x8000000),可让您加载到由DFU模式上传的另一个固件中,或者停留在当前程序中以刷新新固件并抛出USB。 / p>

我使用了本教程-https://www.youtube.com/watch?v=n_LDXOQHerU

我尝试了STM32Cube随附的.dfu软件包,并且看到程序成功运行,因此我认为引导加载程序可以工作。

但是,当我尝试使用我的软件制作自己的DFU软件包时,该软件永远不会加载,并且会出现严重故障。我根据ST指南迁移了该软件,并通过更改以下代码行对0x800C000进行了一些研究:

在FLASH.ld文件中:

    FLASH    (rx)    : ORIGIN = 0x8000000,LENGTH = 2048K

收件人:

    FLASH    (rx)    : ORIGIN = 0x800C000,LENGTH = 2048K

并在stm32l4r9xx.h中将FLASH_BASE更改为:

    #define FLASH_BASE            (0x0800C000UL)

我尝试了另一种尝试,而不是将FLASH_BASE更改为VECT_TAB_OFFSET,但仍然没有用。

使用dfu-tool(我使用linux)制作dfu软件包并使用以下命令:

    dfu-tool convert dfuse software.bin software.dfu

还尝试使用我在本教程中使用过但仍无法正常工作的官方工具来转换hex int dfu包

加载dfu软件包时,我需要做哪些更改才能使软件正常工作?

谢谢

意大利

解决方法

在我看来,您已经忽略了以下事实:您专用的应用程序闪存大小不再是2048K,因为您的自定义引导加载程序现在位于闪存的开头。因此,您需要从总闪存大小中减去该应用的闪存来源:

console.log

在这种情况下,建议使用 FLASH (rx) : ORIGIN = 0x800C000,LENGTH = 2048K - (ORIGIN(FLASH) - 0x8000000) 和一些编码来尝试调试硬故障。然后,当发生硬故障时,您将能够提取和分析链接寄存器,程序计数器,程序状态寄存器等。