IAR下STM8的EEPORM操作

[复制链接]
 楼主| 南宫云明 发表于 2013-4-11 15:01 | 显示全部楼层 |阅读模式
本帖最后由 南宫云明 于 2013-4-11 15:37 编辑
  1. /******************************************************
  2.   EEPROM_Init()函数,EEPROM
  3.   EEPROM初始化
  4. *******************************************************/
  5. void EEPROM_Init()
  6. {
  7.   FLASH_CR1 = 0x00;//Interrupt disabled
  8.   FLASH_CR1|=0x01; //设置为标准编程时间

  9.   FLASH_CR2 = 0x00;
  10. //  FLASH_IAPSR = 0x00;//Data EEPROM area write protection enabled
  11. }

  12. /******************************************************
  13.   EEPROM_read()函数
  14.   EEPROM读函数
  15. *******************************************************/
  16. unsigned char EEPROM_read(unsigned int addr)
  17. {  
  18.   return (unsigned char )*((unsigned int *)addr);
  19. }

  20. /******************************************************
  21.   EEPROM_write()函数
  22.   EEPROM写函数
  23. *******************************************************/
  24. unsigned char EEPROM_write(unsigned char data,unsigned int addr)
  25. {
  26.   do
  27.   {
  28.       FLASH_DUKR = 0xAE;
  29.       FLASH_DUKR = 0x56;
  30.   }
  31.   while((FLASH_IAPSR & 0x08) == 0);//等待解锁成功
  32.   
  33.   
  34.   *((unsigned int *)addr) = data;//这里如果也是一直等待到写完成(EOP为1)也没用
  35.    
  36.   FLASH_IAPSR &= 0xf7;//关闭写
  37.   
  38.   if((FLASH_IAPSR|0xfb) == 0xff)
  39.   {
  40.     FLASH_IAPSR &= 0xfb;
  41.     return TRUE;
  42.   }
  43.   else
  44.     return FALSE;
  45. }

  46. /******************************************************
  47.   main()函数,主函数
  48.   主函数
  49. *******************************************************/
  50. void main()
  51. {
  52.   unsigned char i;
  53.   unsigned char j;
  54.   CLK_Init();//配置时钟
  55.   EEPROM_Init();//EEPROM初始化
  56.   i = EEPROM_read(0x9bff);
  57.   i = i + 1;
  58.   j = EEPROM_write(i,0x9bff);
  59.   Uart_SendByte(j);//串口发送调试数据
  60.   i = EEPROM_read(0x9bff);
  61.   Uart_SendByte(i);
  62.   while(1)
  63.   {
  64.   }
  65. }
上述代码每次仿真的时候都能够从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
 楼主| 南宫云明 发表于 2013-4-11 15:09 | 显示全部楼层
哪位大神如果你也有用IRA直接用寄存器来操作EEPROM的代码,能分享一下嘛?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

272

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部