关于stm32烧写失败Contents mismatch at: 08000000H (Flash=FFH Required=00H)问题的一种解决

问题:

用stlink烧录程序的时候,出现如图所示问题。

STlink烧录时报错

过程:

在出现这个问题后,我也参考了网上的各种贴
1.复位电路问题,测了半天排除
2.取消校验,这个就纯属掩耳盗铃了,排除
在这里插入图片描述
3.单片机型号选错,排除。
4.类型选择全擦,这个不太懂原理,大家可以试试,我的不行,排除
在这里插入图片描述
5.还有各种奇奇怪怪的办法,我就不列出来了,大家可以试试。

分析:

这个错误的信息大概可以理解为,在0x08010000地址上读取到flash存储为FF,但实际上应该写入03H,即校验时读取到数据与实际写入的不符。说明程序并没有烧进去,奇了怪了,我之前都可以。我找来了上一个版本程序烧录,没问题,可以烧进去。那问题就很明显了,flash可能超了。

在这里插入图片描述

可以看到,我的flash需求约为79k,即flsh=Code+RO+RW。而我用的单片机为stm32f103c8t6,flash仅仅为64k,已经远远超出了。

**

解决:

**
①第一想法肯定是更换单片机了,跟换同系列单片机,cBT6有128k就可解决。但在我查阅资料后发现,c8t6与cbt6为同一圆晶上制造的,c8t6其实是有128k的,但是经过我百般折腾后发现,还是不行,怎么都用不到后面的64k,估计有写保护或者后64k本身就有问题才封装成c8t6的,希望以后有大佬可以出个教程。
②折腾半天后,我又找到了一条新路子,编译器优化,我之前开的是Level0,基本没优化,之后我更改为level1,79k瞬间降到了60k左右,有不有,当时高兴坏了,问题解决,程序下进去了。但是高兴太早,我程序的部分功能不好使了,这,优化有风险啊。
在这里插入图片描述
在这里插入图片描述

③不好用的模块估计就是时序问题了,这一个个排除也太麻烦了,搜了半天,又找到一个方法,可以部分优化,什么意思呐,就是刚才的设置是全部文件优化,但是我们也可以选择部分文件优化,即容易出问题的模块就别优化了,自己比较自信的文件优化。在文件旁边右键魔术棒就可以进入该文件优化,如下图。至此问题就解决了,我主要是DS1302出问题,将它的优化等级设置为原来的level0,其他文件编译为level1.
④最最最后再说一句话,如果让我再选一次,我会直接换芯片,毫不犹豫。

在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
#ifndef TOMCRYPT_H_ #define TOMCRYPT_H_ #include <assert.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #include <limits.h> /* use configuration data */ #include <tomcrypt_custom.h> #ifdef __cplusplus extern "C" { #endif /* version */ #define CRYPT 0x0116 #define SCRYPT "1.16" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 /* descriptor table size */ /* Dropbear change - this should be smaller, saves some size */ #define TAB_SIZE 4 /* error codes [will be expanded in future releases] */ enum { CRYPT_OK=0, /* Result OK */ CRYPT_ERROR, /* Generic Error */ CRYPT_NOP, /* Not a failure but no operation was performed */ CRYPT_INVALID_KEYSIZE, /* Invalid key size given */ CRYPT_INVALID_ROUNDS, /* Invalid number of rounds */ CRYPT_FAIL_TESTVECTOR, /* Algorithm failed test vectors */ CRYPT_BUFFER_OVERFLOW, /* Not enough space for output */ CRYPT_INVALID_PACKET, /* Invalid input packet given */ CRYPT_INVALID_PRNGSIZE, /* Invalid number of bits for a PRNG */ CRYPT_ERROR_READPRNG, /* Could not read enough from PRNG */ CRYPT_INVALID_CIPHER, /* Invalid cipher specified */ CRYPT_INVALID_HASH, /* Invalid hash specified */ CRYPT_INVALID_PRNG, /* Invalid PRNG specified */ CRYPT_MEM, /* Out of memory */ CRYPT_PK_TYPE_MISMATCH, /* Not equivalent types of PK keys */ CRYPT_PK_NOT_PRIVATE, /* Requires a private PK key */ CRYPT_INVALID_ARG, /* Generic invalid argument */ CRYPT_FILE_NOTFOUND, /* File Not Found */ CRYPT_PK_INVALID_TYPE, /* Invalid type of PK key */ CRYPT_PK_INVALID_SYSTEM,/* Invalid PK system specified */ CRYPT_PK_DUP, /* Duplicate key already in key ring */ CRYPT_PK_NOT_FOUND, /* Key not found in keyring */ CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */ CRYPT_INVALID_PRIME_SIZE,/* Invalid size of prime requested */ CRYPT_PK_INVALID_PADDING /* Invalid padding on input */ }; #include <tomcrypt_cfg.h> #include <tomcrypt_macros.h> #include <tomcrypt_cipher.h> #include <tomcrypt_hash.h> #include <tomcrypt_mac.h> #include <tomcrypt_prng.h> #include <tomcrypt_pk.h> #include <tomcrypt_math.h> #include <tomcrypt_misc.h> #include <tomcrypt_argchk.h> #include <tomcrypt_pkcs.h> #ifdef __cplusplus } #endif #endif /* TOMCRYPT_H_ */ /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt.h,v $ */ /* $Revision: 1.20 $ */ /* $Date: 2006/11/26 01:45:14 $ */
### 回答1: 这个错误通常意味着在将程序下载到芯片时,程序的起始地址没有正确设置。程序的起始地址通常是0x08000000,但有些芯片可能略有不同。检查一下你的程序的起始地址是否正确,如果不正确,需要将其设置为正确的地址,然后重新下载程序。此外,也有可能是你的程序大小超过了芯片所能容纳的范围,需要检查一下程序大小是否符合芯片的规格。 ### 回答2: 这个错误提示"Contents mismatch at: 08000000H (Flash=FFH Required=80H)!"表示在地址08000000H处的内容不匹配,其中Flash内存中的内容为FFH,但需要的内容是80H。 这个错误一般出现在嵌入式系统开发中,特别是在使用非易失性存储器(如闪存)存储程序代码时。它可能发生在以下情况下: 1. 编译错误:在编译代码时,生成的可执行文件中某些片段不正确。这可能是由于编译器优化、宏定义或代码错误引起的。在将可执行文件烧录到闪存时,与编译时的期望值不匹配,因此提示内容不匹配错误。 2. 烧录错误:在将可执行文件烧录到闪存时,出现了烧录错误。可能是由于烧录工具配置错误、烧录数据传输中的干扰或设备损坏等原因导致。这导致闪存中的数据与期望的数据不匹配。 解决这个问题的方法可能是: 1. 重新编译代码:尝试重新编译代码,并确保优化和宏定义正确,以生成正确的可执行文件。此外,确保代码本身没有错误。 2. 检查烧录工具和配置:确保烧录工具的配置正确,并检查传输过程中是否有任何干扰。可以尝试使用其他烧录工具或方法进行烧录,以排除设备本身的问题。 3. 检查设备和闪存:检查设备是否正常工作,可能需要更换设备。同时,检查闪存是否完好,可以尝试擦除闪存并重新烧录可执行文件。 总之,"Contents mismatch at: 08000000H (Flash=FFH Required=80H)!"错误提示表明闪存中的内容与期望的内容不匹配,可能是由于编译或烧录过程中的错误引起的。通过仔细检查代码、烧录工具和设备,并采取适当的措施进行修复,可以解决这个问题。 ### 回答3: 这条错误信息是指在地址08000000H处的内容不匹配,Flash的内容为FFH,而所需的内容为80H。这个错误通常出现在嵌入式系统的Flash储存器的编程过程中。 Flash一种非易失性存储器,用于储存程序代码和数据,并且可以被反复编程擦除。在编程Flash时,需要将特定的内容写入特定的地址。然而,当出现"Contents mismatch"错误时,说明该地址的内容与所需的内容不匹配。 这种错误可能有各种原因。其中一种可能是使用了错误的编程算法或编程器。编程算法是指用于编程Flash的软件程序,而编程器是指用于连接设备和计算机,并进行编程的硬件设备。 另一种可能的原因是编译器生成的代码有误,或者在将程序代码和数据写入Flash时发生了故障。此外,硬件故障或储存器损坏也可能导致此错误。 为了解决这个问题,我们可以尝试以下步骤: 1. 检查编程算法和编程器设置是否正确。确保使用正确的算法和编程器配置来编程Flash。 2. 检查编译器生成的代码是否正确。可以通过更改编译器选项或查看生成的汇编代码来诊断代码错误。 3. 检查硬件连接和储存器是否正常。尽可能检查硬件连接和储存器的状态,并确保没有物理损坏或故障。 4. 如果问题仍然存在,可能需要联系硬件厂商或开发工具提供商寻求进一步的帮助。他们可能能够提供更具体的诊断和解决方案。 总之,"Contents mismatch"错误表示在Flash编程过程中发现了地址内容不匹配的情况。通过仔细检查编程算法、编程器设置、生成的代码和硬件连接,可以解决这个问题,并成功编程Flash

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值