STM32H750在只能调试时运行,重新上电和reset都不行
最近在调试 STM32H750VBT6 时遇到程序只有在调试时可以运行,虽然勾选了 rest and run ,但下载完任然不运行。检查了 boot 和 reset 电压均正常。最后,是用了 AC5 编译一遍后下载,就解决了问题。再用 AC6 也行。不晓得怎么回事啊 这个AC5和AC6来说,确实不一样,有些时候尽量用低版本的比较好 你是在使用 ST-LINK 进行调试吗?有时调试器的配置或者固件版本可能会影响程序的下载和启动。 你检查过编译选项和链接脚本吗?可能是某些优化设置或者启动地址有问题,导致程序无法正常启动。 使用 AC5 和 AC6 可能是因为它们生成的固件映像格式不完全相同,AC5 可能默认启用了某些启动选项。 你试过清除芯片的 Flash 内容再下载程序吗?有时候残留的数据可能会导致程序无法正常启动。 你在检查 boot 和 reset 电压时,有没有关注到复位电路上的微小波动?它可能影响 MCU 的启动行为。 STM32H7 系列的启动模式比较复杂,确保 BOOT0 和 BOOT1 引脚的配置是正确的,避免进入系统引导模式。 你用的是什么调试接口?SWD 还是 JTAG?不同接口的配置和行为可能会有所不同。 是否有看到调试日志中的错误信息?它可能提供了为什么下载后程序没有执行的线索。 如果程序只有在调试模式下运行,可能是没有正确设置程序的启动点或复位矢量。可以试着在 AC6 中重新配置启动文件。 你确认过下载后的程序是否会执行 SystemInit() 和 main() 启动函数吗?有时启动文件可能没有正确配置。 链接脚本或内存映射问题:调试时,调试器可能自动调整了程序的加载地址或堆栈指针。独立运行时,程序可能因初始化错误(如堆栈溢出、向量表未正确映射)而崩溃有可能是你的启动文件(如 startup_stm32h750xx.s)未正确初始化关键寄存器(如 VTOR 向量表基址寄存器)。调试器可能隐式修复了某些初始化问题
AC6 默认的优化级别可能生成了与 AC5 不兼容的代码,导致运行时错误。例如,AC6 的某些优化可能改变了全局变量的初始化顺序
下载工具可能未正确擦除目标 Flash 区域,导致旧代码残留。AC5 和 AC6 生成的二进制文件格式或对齐方式不同,可能影响写入结果
虽然您已检查 BOOT 和 RESET 电压,但仍需确认:是否启用了外部晶振(HSE)或内部时钟(HSI)是否正确配置了时钟树
在 system_stm32h7xx.c 或启动文件中,确保 SCB->VTOR 指向正确的向量表地址。确保链接脚本(如 .ld 文件)中,FLASH 和 RAM 的地址与芯片手册一致
在编译器设置中,将优化级别设置为 -O0(无优化)。逐步启用优化(如 -O1、-O2),观察问题是否复现
建议检查全局变量和静态变量的初始化顺序是否正确
页:
[1]