本帖最后由 南宫云明 于 2013-4-11 15:37 编辑
/******************************************************
EEPROM_Init()函数,EEPROM
EEPROM初始化
*******************************************************/
void EEPROM_Init()
{
FLASH_CR1 = 0x00;//Interrupt disabled
FLASH_CR1|=0x01; //设置为标准编程时间
FLASH_CR2 = 0x00;
// FLASH_IAPSR = 0x00;//Data EEPROM area write protection enabled
}
/******************************************************
EEPROM_read()函数
EEPROM读函数
*******************************************************/
unsigned char EEPROM_read(unsigned int addr)
{
return (unsigned char )*((unsigned int *)addr);
}
/******************************************************
EEPROM_write()函数
EEPROM写函数
*******************************************************/
unsigned char EEPROM_write(unsigned char data,unsigned int addr)
{
do
{
FLASH_DUKR = 0xAE;
FLASH_DUKR = 0x56;
}
while((FLASH_IAPSR & 0x08) == 0);//等待解锁成功
*((unsigned int *)addr) = data;//这里如果也是一直等待到写完成(EOP为1)也没用
FLASH_IAPSR &= 0xf7;//关闭写
if((FLASH_IAPSR|0xfb) == 0xff)
{
FLASH_IAPSR &= 0xfb;
return TRUE;
}
else
return FALSE;
}
/******************************************************
main()函数,主函数
主函数
*******************************************************/
void main()
{
unsigned char i;
unsigned char j;
CLK_Init();//配置时钟
EEPROM_Init();//EEPROM初始化
i = EEPROM_read(0x9bff);
i = i + 1;
j = EEPROM_write(i,0x9bff);
Uart_SendByte(j);//串口发送调试数据
i = EEPROM_read(0x9bff);
Uart_SendByte(i);
while(1)
{
}
}
上述代码每次仿真的时候都能够从EEPROM中读出数据,并加1后写入EEPROM,但是断电,重启,能从EEPROM中读出数据,但是不能写数据到EEPROM中。以下第一个数据是仿真的数据,第二三个数据是断电的数据。请大神帮忙看看。。。STM8的库看起来太繁琐了。。。。原先EEPROM中存的数据位0xBD
[14:45:35 ---] 01 BE
[14:45:44 ---] 00 BE
[14:45:47 ---] 00 BE
D:\Documents\Desktop\a.bmp |