首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译应用程序以使其不是从闪存stm32L4R9I开始运行

编译应用程序以使其不是从闪存stm32L4R9I开始运行
EN

Stack Overflow用户
提问于 2020-08-24 19:18:22
回答 1查看 98关注 0票数 0

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

我将服装启动加载器固件闪存到闪存的开头(0x8000000),它允许您加载到由DFU模式上传的另一个固件中,或者停留在当前程序中以闪存新固件抛出USB。

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

我尝试了STM32Cube附带的.dfu包,我看到程序运行成功,所以我假设引导加载程序可以工作。

但是,当我试图从我的软件中制作自己的DFU包时,软件永远不会加载,我得到了严重的错误。我根据ST工具迁移了软件&我在0x800C000上做了一些研究,改成了下面这几行:

在FLASH.ld文件中:

代码语言:javascript
运行
复制
    FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 2048K

至:

代码语言:javascript
运行
复制
    FLASH    (rx)    : ORIGIN = 0x800C000,   LENGTH = 2048K

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

代码语言:javascript
运行
复制
    #define FLASH_BASE            (0x0800C000UL)

在另一次尝试中,我没有更改FLASH_BASE来更改VECT_TAB_OFFSET,但仍然不起作用。

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

代码语言:javascript
运行
复制
    dfu-tool convert dfuse software.bin software.dfu

我还尝试使用我在教程中使用的官方工具转换十六进制int dfu包,但仍然不起作用

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

谢谢

itay

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 01:41:00

在我看来,您忽略了一个事实,即您的应用程序专用闪存大小将不再是2048K,因为您的自定义引导加载程序现在被放置在闪存的开头。因此,您需要从总闪存大小中减去应用的闪存来源:

代码语言:javascript
运行
复制
 FLASH    (rx) : ORIGIN = 0x800C000,    LENGTH = 2048K - (ORIGIN(FLASH) - 0x8000000)

在这种情况下,建议尝试使用HardFault_Handler()和一些编码来调试硬故障。然后,您将能够提取和分析硬故障发生时的链接寄存器、程序计数器、程序状态寄存器等。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63559971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档