本帖最后由 南宫云明 于 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
|