中山无雪 发表于 2017-2-14 14:06:33

先找出死在哪句上了

cldym 发表于 2017-2-14 14:19:44


解锁一次就够了。

wudianjun2001 发表于 2017-2-14 14:37:01

toofree 发表于 2017-2-14 13:13
要不监测一下电源电压是不是稳定?

都没用自己做的电源控制板,用的开关电源,电源应该没问题

wudianjun2001 发表于 2017-2-14 14:38:19

中山无雪 发表于 2017-2-14 14:06
先找出死在哪句上了

*((uint8_t *)(USERPAGE + addr + i)) = buff;
                while(FLASH_IAPSR_EOP == 0);
应该是这两句有问题,把写屏蔽掉测试没问题

toofree 发表于 2017-2-14 18:51:23

wudianjun2001 发表于 2017-2-14 14:38
*((uint8_t *)(USERPAGE + addr + i)) = buff;
                while(FLASH_IAPSR_EOP == 0);
应该是这 ...

while(FLASH_IAPSR_EOP == 0);

while中设置个超时退出变量,在外面判断是否是超时了,如果超时的话,再研究看什么造成的超时。

toofree 发表于 2017-2-14 18:54:51

((uint8_t *)(USERPAGE + addr + i))

有没有可能超出EEPROM的地址范围?如果有可能超出的话,那么会有问题。

中山无雪 发表于 2017-2-15 00:23:12

toofree 发表于 2017-2-14 18:54
((uint8_t *)(USERPAGE + addr + i))

有没有可能超出EEPROM的地址范围?如果有可能超出的话,那么会有问题 ...

这句出问题的可能性较大

wudianjun2001 发表于 2017-2-15 08:16:50

toofree 发表于 2017-2-14 18:54
((uint8_t *)(USERPAGE + addr + i))

有没有可能超出EEPROM的地址范围?如果有可能超出的话,那么会有问题 ...

这个绝对没有超出,EEPROM是00-FF,我程序里最大是用到F7,而且这个测试死机的地方写的是D0,D1位置

gam169 发表于 2018-2-27 09:14:31

楼主问题解决了吗?怎么没看到说明,哪一楼是正确答案呵?库函数里的写eeprom时用转换地址是 *(FAR uint8_t*) (uint16_t)Address,而这地址从0x1000开始,是否与这个有关呢?
页: 1 [2]
查看完整版本: STM8L052写EEPROM偶尔会死机