用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); |
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
STM8S标准库TIM1编码器功能不计数,请大师帮我看看
直接使用库都不行
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);
应该是这两句有问题,把写屏蔽掉测试没问题