石榴大王 发表于 2025-7-17 23:02

将静态库添加到项目中后,不会退出dfu模式。

大家好,我之前在True Studio中有可正常工作的代码,该代码可与引导加载程序(boot loader)配合运行。我将该代码迁移到了STM32 Cube IDE中。在STM32 Cube IDE中,我通过参考文档DM00629856的第2.2.2节创建了静态库将创建的静态库包含到Cube IDE项目中,代码编译通过,并生成了HEX转DFU文件。使用ST-Link引导加载程序将HEX文件加载到硬件中,之后通过DfuSe软件加载DFU文件。根据引导加载程序的设计,上电后设备会进入DFU模式并保持10秒,在此期间应将DFU文件加载到硬件中。问题描述:
当添加了静态库的DFU文件加载到硬件后,设备无法退出DFU模式,会一直停留在该模式。如果手动退出DFU模式,DfuSe软件会卡死。求助:
是否我的库创建过程存在问题?是否有其他方法可以将库添加到项目中?或者从Atollic迁移到STM32 Cube IDE的项目是否不适用于库的集成?

公羊子丹 发表于 2025-7-25 07:26

感觉像是库里有初始化或者中断没对上,DFU 跳不到 APP 去了。

周半梅 发表于 2025-7-25 07:27

之前在 TrueStudio 用的链接脚本和 CubeIDE 的一样吗?地址要对齐才行。

帛灿灿 发表于 2025-7-25 07:28

看下你库里有没有用到 vector table,可能覆盖了 boot 跳转逻辑。

童雨竹 发表于 2025-7-25 07:29

有时候库里带了自己的启动文件,会把原来的 boot code 覆盖掉。

万图 发表于 2025-7-25 07:30

试试把库去掉再编译,确认是库引起的还是 CubeIDE 配置问题。

Wordsworth 发表于 2025-7-25 07:30

Boot 和 APP 的对接要用 attribute((section)) 固定入口地址,不然会跑飞。

Bblythe 发表于 2025-7-25 07:31

也可能是 DFU 完写完后复位跳转地址没设置对。

Pulitzer 发表于 2025-7-25 07:32

建议先用裸代码链接,确认 APP 单独烧写能正常跑。

Uriah 发表于 2025-7-25 07:33

库里要是有系统初始化函数,要小心和主工程里的重复。

Clyde011 发表于 2025-7-25 07:34

有结果记得分享下哈,我也准备把老工程搬到 CubeIDE,正担心这块呢!

是你的乱码 发表于 2025-7-28 14:32

中断向量表配置或引导加载程序与应用程序的交互逻辑有关。

flycamelaaa 发表于 2025-7-28 14:48

静态库的编译选项与主项目不一致?

powerantone 发表于 2025-7-28 14:48

重新生成库。

elephant00 发表于 2025-7-28 14:54

检查链接顺序和脚本有无冲突。

stormwind123 发表于 2025-7-28 15:49

清理并重新构建静态库,避免旧编译产物干扰。

probedog 发表于 2025-7-28 16:50

链接器按顺序解析符号,顺序错误可能导致未解析的引用。

cr315 发表于 2025-7-28 18:53

更新ST-Link驱动和DfuSe工具至最新版本

classroom 发表于 2025-7-28 19:51

链接脚本不兼容?

jcky001 发表于 2025-7-28 19:52

Cube IDE基于Eclipse,可能使用不同版本的GCC或标准库。检查库是否依赖特定库版本。
页: [1]
查看完整版本: 将静态库添加到项目中后,不会退出dfu模式。