将 Atollic TS 项目导入 STM32CubeIDE无法使用 bootloader
tollic TS pdf How-to 中boot程序运行良好(0x0800 0000),可以正常仿真调试应用程序(0x0800 8000)。将项目导入到 STM32CubeIDE,似乎没有从正确的地址开始。当我使用项目从 0x0800 0000 开始的 *.ld 文件时,似乎工作正常。但是一旦我为引导加载程序腾出空间,并在 *.ld 文件中使用地址 0x0800 8000,我就无法调试项目。当我将引导加载程序 和 固件的映像上传到 0x0800 0000 时,设备运行良好。我也遇到过类似情况,后来发现 CubeIDE 的调试器默认还是从 0x08000000 启动,要在 .launch 文件或 Debug 配置里手动改下起始地址。 你有把 Reset_Handler 的入口地址放在 0x08008000 吗?如果启动地址偏了,可能会跳不到应用程序。 在 Atollic TS 中你有没有用自定义的启动脚本?如果有的话,导入 CubeIDE 后要确保 .ld 文件和启动文件一致。 你是不是只改了 .ld 文件里的起始地址?记得还要在 Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU Settings 里也改起始地址! 建议你在 CubeIDE 中把 Debug Configuration 的 Run -> Reset Behavior 改成 “None”,否则它会试图从 bootloader 起始地址重新上电。 我遇到过 CubeIDE 把 application 的 vector table 还留在 0x8000000 的情况,要用 SCB->VTOR = 0x08008000; 手动重定向。 你可以试试用 ST-LINK Utility 工具分别下载 boot 和 app,然后观察跳转是不是失败,这样可以排除是 IDE 的问题还是代码问题。 Debug 的时候有没有用 connect under reset?有些 bootloader 会禁止 SWD 接口,只有在 reset 下连接才能调试 app。 有时候 CubeIDE 会生成多个 .ld 文件,看看是不是用错了那个 link script 文件,我之前就有一次改错文件了…… 能正常运行但无法调试,听起来像是 vector table 或 flash offset 没设置好,可以用 objdump 看看 elf 的偏移位置对不对。 链接脚本配置错误? 可能在导入过程中文件结构或配置损坏,建议重新导入项目。 bootloader和应用程序需要分别烧录到Flash的不同区域。若导入后未正确配置地址,可能导致应用程序覆盖bootloader或两者地址重叠,进而无法使用bootloader。 用STM32CubeProgrammer分别烧录bootloader和应用程序到指定的Flash区域。 若应用程序中未正确实现跳转到bootloader的逻辑,可能导致无法进入bootloader模式。 BOOT引脚配置错误? 可能是硬件连接或启动模式配置问题。 检查硬件连接,BOOT0引脚在需要进入bootloader时拉高。 看着挺简单
页:
[1]