[STM32F0] STM32F030模拟EEpROM存储问题

[复制链接]
4145|6
 楼主| Othink 发表于 2015-11-16 16:45 | 显示全部楼层 |阅读模式
本帖最后由 Othink 于 2015-11-16 16:47 编辑

我利用官方的EEPROM的例程,存储11个数据,发现再次上电时出现读取不正确,在别的项目中我存三个数据好像没出现这样的问题,请问有人遇到过么??
单片机是STM32F030 64脚的那款
 楼主| Othink 发表于 2015-11-16 16:51 | 显示全部楼层

用的是ST官方的AN2594这个例程
lanlan 发表于 2015-11-18 15:47 | 显示全部楼层
能多给一些信息吗?比如EEPROM的Flash 开始位置定义,写的是什么数,什么格式,有没有对函数的返回值进行分析,断电前是否对写入的数据读出来验证过,当时是否是对的。重新上电后读到的是什么数呢?
diweo 发表于 2015-11-18 16:35 | 显示全部楼层
用编程器直接读取,看看确实是写错了,还是你的读程序的问题。
lu50211 发表于 2015-11-19 13:28 | 显示全部楼层
  1. uint32_t EEP_Read_Byte(uint32_t Address)
  2. {
  3.     uint32_t Temp = *(__IO uint32_t *)Address;
  4.     return Temp;
  5. }

  6. void EEPROM_Init(void)
  7. {
  8.     uint8_t  i,Flag;
  9.     uint32_t Address;
  10.     uint32_t Temp[4];
  11.     Address = EEP_Start_Address;
  12.     Temp[0] = *(__IO uint32_t *)Address;
  13.     Flag = (Temp[0] & 0xff000000) >> 24;
  14.     if(Flag != 0x55)
  15.     {
  16.         FLASH_Unlock();
  17.         FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPERR);
  18.         FLASH_ErasePage(EEP_Start_Address);
  19.         Address = EEP_Start_Address;
  20.         FLASH_ProgramWord(Address,0x55050505);
  21.         for(i = 0;i < 3;i++)
  22.         {
  23.             Address += 4;
  24.             FLASH_ProgramWord(Address,((170 << 16) + 170));   
  25.         }
  26.         FLASH_Lock();
  27.     }

  28.     Address = EEP_Start_Address;
  29.     for(i = 0;i < 4;i++)
  30.     {
  31.         Temp[i] = *(__IO uint32_t *)Address;
  32.         Address += 4;
  33.     }
  34.     Set_Time_Heat[0] = (Temp[0] & 0x000000ff);
  35.     Set_Time_Heat[1] = (Temp[0] & 0x0000ff00) >> 8;
  36.     Set_Time_Heat[2] = (Temp[0] & 0x00ff0000) >> 16;
  37.     Set_Temp[0] = Temp[1] >> 16;
  38.     Set_Temp[1] = Temp[1] & 0xffff;
  39.     Set_Temp[2] = Temp[2] >> 16;
  40.     Set_Temp[3] = Temp[2] & 0xffff;
  41.     Set_Temp[4] = Temp[3] >> 16;
  42.     Set_Temp[5] = Temp[3] & 0xffff;
  43. }
  44. //====================================================================
  45. void EEPROM_Write_Byte(void)
  46. {
  47.     uint8_t  i;
  48.     uint32_t Address,Temp;
  49.     FLASH_Unlock();
  50.     FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPERR);
  51.     FLASH_ErasePage(EEP_Start_Address);
  52.     Address = EEP_Start_Address;
  53.     Temp = ((0x55             << 24) + \
  54.             (Set_Time_Heat[2] << 16) + \
  55.             (Set_Time_Heat[1] << 8 ) + \
  56.              Set_Time_Heat[0]);
  57.     FLASH_ProgramWord(Address,Temp);
  58.     for(i = 0;i < 3;i++)
  59.     {
  60.         Address += 4;
  61.         FLASH_ProgramWord(Address,((Set_Temp[i * 2] << 16) + Set_Temp[(i * 2) + 1]));         
  62.     }
  63.     FLASH_Lock();
  64. }
ereck 发表于 2016-1-18 10:04 | 显示全部楼层
5楼的程序,验证过吗
天灵灵地灵灵 发表于 2016-1-18 13:34 | 显示全部楼层
扩展-IAP主要用于产品出厂后应用程序的更新作用。。估计就是这个功能。在软件里可以操作Flash
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

39

帖子

0

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