用STM8L052做个项目,这几天发现写EEPROM偶尔会死机,产品频繁测试的时候,按键按下后会写一次EEPROM,按键一直按测试,发现不定时会出现一次死机,找不到什么问题,大家帮忙看看。 写EEPROM的字函数 uint8_t EEPROM_Buff_Write (uint16_t addr, uint8_t *buff, uint16_t len) { uint16_t i, count = 0; //WDT_Feed (); //喂狗 //这样字节写的话会成功,但是快写的话失败。而且要全速运行才能写正确 disableInterrupts(); //关全局中断 FLASH_DUKR = 0xAE; //写入第一个密钥 FLASH_DUKR = 0x56; //写入第二个密钥 FLASH_CR2 = 0x00; //标准块编程,会先擦除的 while (((FLASH_IAPSR & 0x08) == 0) && (count < 0xFFFF)) { count ++; //等待解锁完成 } if (count == 0xFFFF)return 0; //WDT_Feed (); //喂狗 for(i = 0; i < len; i++) { *((uint8_t *)(USERPAGE + addr + i)) = buff[i]; while(FLASH_IAPSR_EOP == 0); } FLASH_IAPSR_DUL = 0; //操作完要加锁 enableInterrupts(); //开全局中断 return 1; } 调用时的操作 buff_Count = 0; buff[buff_Count ++] = Manu_Temp / 100; buff[buff_Count ++] = Manu_Temp % 100; EEPROM_Buff_Write (0x0D0, buff, buff_Count); |
STM8S003F3U6 请求各位大佬支援,但是遇到如下问题。。。这样就一定是这颗芯片的问题吗?
STVD如何生成库文件
STM8 flash 库函数 startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_S
stm 8 flash 在RAM运行代码的问题,是不是库函数有问题 Library call (?sll32_l0_l0_a) from within a
STM 有能替代MCHC912B32CFUE8 / NXP的型号吗?
STM8S的CAN总线使用
STM8L151在使用DAC功能后严重发热
STM8 IIC SLAVE 400K
STM8S 定时器1互补输出pwm
STM8S003F3 NRST电压低,无法开机
直接使用库都不行
FLASH_Unlock(FLASH_MemType_Data);
for(i = 0; i < len; i++)
{
FLASH_ProgramByte(USERPAGE + addr + i, *(buff + i));//从0X1000开始寻址
}
FLASH_Lock(FLASH_MemType_Data);
while(FLASH_IAPSR_EOP == 0);
while中设置个超时退出变量,在外面判断是否是超时了,如果超时的话,再研究看什么造成的超时。
评分
查看全部评分
放到while里试试看
另外用内部EEPROM时,还需要加延时不?
这个片片,在全局中断关的时候,对看门狗有没有影响?
评分
查看全部评分
放在里面也不行,我已经把看门狗功能去掉了,延时也试过,问题还是解决不了,一直测试的话,偶尔出先要不死机,要不复位
评分
查看全部评分
评分
查看全部评分
地址肯定没超出去,我才写到地址250不到点,假如超出的话,每次都应该有问题的
评分
查看全部评分
我也没有解锁很多次啊
要不监测一下电源电压是不是稳定?
解锁一次就够了。
都没用自己做的电源控制板,用的开关电源,电源应该没问题
*((uint8_t *)(USERPAGE + addr + i)) = buff;
while(FLASH_IAPSR_EOP == 0);
应该是这两句有问题,把写屏蔽掉测试没问题