我有一个steval-stwinkt1板,我正在尝试启用对DFU模式的支持。
我将服装启动加载器固件闪存到闪存的开头(0x8000000),它允许您加载到由DFU模式上传的另一个固件中,或者停留在当前程序中以闪存新固件抛出USB。
我使用了这个st教程- 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包,我使用dfu-tool (我使用linux),并使用以下命令:
    dfu-tool convert dfuse software.bin software.dfu我还尝试使用我在教程中使用的官方工具转换十六进制int dfu包,但仍然不起作用
当我加载dfu包时,我需要进行哪些更改才能使我的软件正常工作?
谢谢
itay
发布于 2020-08-25 01:41:00
在我看来,您忽略了一个事实,即您的应用程序专用闪存大小将不再是2048K,因为您的自定义引导加载程序现在被放置在闪存的开头。因此,您需要从总闪存大小中减去应用的闪存来源:
 FLASH    (rx) : ORIGIN = 0x800C000,    LENGTH = 2048K - (ORIGIN(FLASH) - 0x8000000)在这种情况下,建议尝试使用HardFault_Handler()和一些编码来调试硬故障。然后,您将能够提取和分析硬故障发生时的链接寄存器、程序计数器、程序状态寄存器等。
https://stackoverflow.com/questions/63559971
复制相似问题