ST意法半导体
直播中

楼斌

9年用户 962经验值
私信 关注
[问答]

STM32使用ISp烧录HEX文件运行,代码重新编译之后的产生的新hex文件选择全片擦除就没办法正常运行,为什么?

我有一套代码需要使用ISp烧录HEX文件运行,代码有一个老的HEX,无论是全片擦除还是擦除重要部分再下载都没有问题。但是代码重新编译之后的产生的新hex文件,如果选择全片擦除,就没办法正常运行。只有ISP选择擦除重要部分在下载,才是正常的正确的代码现象是灯可以闪烁,能连接上串口。新编译的HEX文件如果全片擦除,则没有任何现象。只有选择老的(正确的)HEX文件ISP下载一次,新编译的HEX文件再ISP烧录一遍才能够运行成功。这个问题很困扰我,希望有懂得朋友解答一下。谢谢各位

回帖(3)

张华仁

2025-3-10 10:06:58
正确的代码现象是灯可以闪烁,能连接上串口。新编译的HEX文件如果全片擦除,则没有任何现象。只有选择老的(正确的)HEX文件ISP下载一次,新编译的HEX文件再ISP烧录一遍才能够运行成功。这个问题很困扰我,希望有懂得朋友解答一下。
举报

黄鸿江

2025-3-10 10:07:02
用的keil嘛?可能跟版本有关
举报

一说就是错

2025-3-11 17:41:26

这个问题可能涉及到多个方面的原因,以下是一些可能的原因和解决方案:


1. Flash编程与擦除的差异



  • 全片擦除:全片擦除会将整个Flash存储器擦除为0xFF,包括所有配置位和引导程序(如果有)。


  • 部分擦除:部分擦除只会擦除指定的扇区或区域,保留其他区域的数据。


    如果新编译的HEX文件依赖于某些特定的Flash区域(如配置位、引导程序等),全片擦除可能会破坏这些关键数据,导致程序无法正常运行。




2. 引导程序或配置位



  • 引导程序:某些STM32芯片需要特定的引导程序来正确启动。如果全片擦除破坏了引导程序,程序可能无法正常启动。

  • 配置位:STM32的Flash存储器中可能包含一些配置位(如选项字节),这些配置位影响芯片的启动方式、时钟配置等。全片擦除可能会重置这些配置位,导致芯片无法正常启动。


3. 链接脚本或内存布局



  • 链接脚本:新编译的HEX文件可能使用了不同的链接脚本,导致代码或数据被放置在不同的Flash区域。如果这些区域在全片擦除后被破坏,程序可能无法正常运行。

  • 内存布局:检查新编译的HEX文件的内存布局,确保所有必要的代码和数据都被正确放置。


4. 调试信息或符号表



  • 调试信息:新编译的HEX文件可能包含调试信息或符号表,这些信息可能被放置在特定的Flash区域。全片擦除可能会破坏这些信息,导致程序无法正常运行。


5. ISP工具配置



  • ISP工具配置:检查ISP工具的配置,确保在烧录新编译的HEX文件时,所有必要的配置(如选项字节、引导程序等)都被正确设置。


解决方案



  1. 检查链接脚本和内存布局:确保新编译的HEX文件的链接脚本和内存布局与老版本一致。

  2. 保留关键区域:在ISP工具中配置为保留关键区域(如引导程序、配置位等)不被擦除。

  3. 手动设置选项字节:在烧录新编译的HEX文件之前,手动设置选项字节,确保芯片的启动方式和时钟配置正确。

  4. 比较新旧HEX文件:使用工具比较新旧HEX文件的差异,找出可能导致问题的部分。

  5. 调试启动过程:使用调试器逐步调试芯片的启动过程,找出程序无法启动的具体原因。


通过以上步骤,你应该能够找到并解决新编译的HEX文件在全片擦除后无法正常运行的问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分