jully 发表于 5 天前

求助!急 数据丢失!STC8H8K64U同型号两个封装不一样

STC8H8K64U的LQFP64封装程序正常,

换到TSSOP20封装上,EEPROM两个数据,有一个丢失。变成0x01或者其他数,非0xff也非0x00

同一个程序。
求类似情况谁有碰到?或者排查办法?我已经头疼了几天了

狂热主宰 发表于 5 天前

规格可能有差异
得看MCU具体的型号
有可能差别在外围和内存上

AI-32位8051 发表于 5 天前

EEPROM的使用 请 配合比较器做掉电检测 | 唯一正解,电力系统标准应用
https://www.stcaimcu.com/thread-1280-1-1.html
(出处: 国芯人工智能技术交流网站)

myliuyu 发表于 5 天前

封装不同了,肯定还是有点却别的,再仔细检查下吧

lcwswust 发表于 5 天前

没有看到代码,所以我瞎说几句:
或许你的代码本就有BUG,有问题的才是正常的,没问题的是巧合、没有暴露出来而已。
调试方法:去掉不相关的代码,只保留相关代码,专门测试EEPROM。
如果很容易复现这个问题,那不如把工程传上来,让大家都试试。

jully 发表于 5 天前

lcwswust 发表于 2026-3-30 15:55
没有看到代码,所以我瞎说几句:
或许你的代码本就有BUG,有问题的才是正常的,没问题的是巧合、没有暴露出 ...

工程代码模块有点多,这里不能打包上传吧?
我删除些无关的,精简了再复制黏贴上来

jully 发表于 5 天前

不是每次拔插电源都会变,一般第二次拔插才变数据。然后再次拔插基本不变,

_奶咖君_ 发表于 5 天前

jully 发表于 2026-3-30 16:14
不是每次拔插电源都会变,一般第二次拔插才变数据。然后再次拔插基本不变, ...

是不是配置了 EEPROM区的大小?

天宁宁 发表于 5 天前

估计程序覆盖了

jully 发表于 3 天前

删除大部分模块后,EEPROM正常了,再把ADC模块加回工程,又出现多次断电后,保存的数据中,有一个丢失了;
ADC只是加入工程并初始化。怀疑可能ADC中断,干扰到EEPROM读写时序。

ADC初始化代码如下:
void ADC_Init()
{
        ADCTIM = 0x34;                                                //ADCTIM = CSSETUP |CSHOLD1:0 | SMPDUTY4:0;0x3f;

        ADCCFG = 0x02;                                                //ADCspeed;Fsys/2/ADCCFG
        ADCEXCFG = 0x04;                                        //0x04:ADC采样2次取平均值.0x05:ADC采样4次取平均值.0x06:ADC采样8次取平均值..0x07:ADC采样16次取平均值,
        ADC_CONTR = ADC_POWER| ADC_START ;
        Delay(1);
}

EEPROM读写程序如下:
//========================================================================
// 函数: void IapRead()
// 描述: EEPROM读取单字节
// 参数: addr: 读取地址
// 返回值:读取内容
unsigned char IapRead(int addr)
{
    unsigned char dat;

    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数12MHz
    IAP_CMD = 1;                              //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
    dat = IAP_DATA;                           //读IAP数据
    IapIdle();                                  //关闭IAP功能

    return dat;
}
//========================================================================
// 函数: void IapProgram()
// 描述: EEPROM写入单字节
// 参数: addr: 写入地址
// 参数: dat: 写入内容
void IapProgram(int addr, unsigned char dat)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数12MHz
    IAP_CMD = 2;                              //设置IAP写命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_DATA = dat;                           //写IAP数据
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
    IapIdle();                                  //关闭IAP功能
}
页: [1] 2
查看完整版本: 求助!急 数据丢失!STC8H8K64U同型号两个封装不一样