我在用STM8S207CB设计一个无线模块,模块的参数都是保存在EEPROM中的。测试中发现在带电拔插模块时,参数有时会改变,经过多次测试,发现规律如下:如果修改了参数后没有按过复位键(直接接到复位引脚),带电拔插时,参数一定会变;如果按过复位键,或是没有修改过参数,则拔插不会修改参数。
参数修改代码如下:
#define DataLock() FLASH_Lock(FLASH_MEMTYPE_DATA) //Lock the eeprom
#define DataUnLock() FLASH_Unlock(FLASH_MEMTYPE_DATA) //Unlock the eeprom
DataUnLock();
myShortAddress_eep.Val = myShortAddress.Val;
currentChannel_eep = currentChannel;
DataLock();
我初期怀疑是EEProm加锁不成功的原因。后来在加锁之后尝试修改eeprom的参数,发现修改不了,说明加锁发生了作用。
尝试使用软件复位代替复位键,发现带电拔插仍然会改变参数。
尝试直接给模块断电,再通电,而不是带电拔插,则参数不会改变。
我现在怀疑EEPROM被写入后,虽然是被加锁,但抗噪性能明显下降,只有硬件复位才能恢复其高抗噪性能。
请高手给分析一下,是什么原因造成EEPRom这么容易受干扰? |