求教STM32模拟EEPROM的问题

[复制链接]
3734|9
 楼主| clz918 发表于 2011-3-30 16:11 | 显示全部楼层 |阅读模式
我用STM32F103RB模拟模拟EEPROM,主函数部分代码如下:
int  main (void)
{
uint8_t i;
uint16_t value=0,index;
u16      data_write=0;
     RCC_Configuration();

  FLASH_Unlock();
  EE_Init();
  for (VarValue = 0; VarValue < 1000; VarValue++)
  {EE_WriteVariable(VirtAddVarTab[0], 6);}

   delay1ms(100);

for(i=0; i<20; i++)
{
    EE_ReadVariable(VirtAddVarTab[0]+i, &testtab1[i]);
}

   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOG, ENABLE);

     NVIC_Configuration();
    Stm32_Gpio_Init();
     UART_Configuration();
   
     for(i=0;i<20;i++)
     {
    usart1_send16bit(testtab1[i]);
    }
while(1)
{
      
}
}

我发现程序在执行EE_WriteVariable或EE_ReadVariable函数时,在两个函数中的
  ValidPage = EE_FindValidPage(WRITE_IN_VALID_PAGE);
  if (ValidPage == NO_VALID_PAGE)
  {
    return  NO_VALID_PAGE;
  }
ValidPage = NO_VALID_PAGE,从而导致函数没有继续执行,也就没有进行读写操作,这是怎么回事啊。
 楼主| clz918 发表于 2011-3-31 10:25 | 显示全部楼层
怎么没人说两句啊,自己顶一下
 楼主| clz918 发表于 2011-4-2 13:34 | 显示全部楼层
已经解决,最后没用库函数
Periodic 发表于 2012-6-8 21:27 | 显示全部楼层
我也碰到 一样的 问题  感觉函数库有问题
Periodic 发表于 2012-6-8 21:36 | 显示全部楼层
  1. static unsigned short EE_FindValidPage(unsigned char Operation)
  2. {
  3.           unsigned short PageStatus0 = 6, PageStatus1 = 6;

  4.          
  5.           PageStatus0 = (*(volatile unsigned short*)PAGE0_BASE_ADDRESS);//获取PAGE0实际状态
  6.           PageStatus1 = (*(volatile unsigned short*)PAGE1_BASE_ADDRESS);//获取PAGE1实际状态

  7.           //读或写操作
  8.           switch (Operation)
  9.           {
  10.             case WRITE_IN_VALID_PAGE:   //写操作
  11.               if (PageStatus1 == VALID_PAGE)//错误在这里//#define VALID_PAGE              ((unsigned short)0x0000)     /* PAGE containing valid data */
  12.               {
  13.                 /* 第0页接收数据 */
  14.                 if (PageStatus0 == RECEIVE_DATA)
  15.                 {
  16.                           return PAGE0;         //PAGE0有效
  17.                 }
  18.                 else
  19.                 {
  20.                           return PAGE1;         //PAGE1有效
  21.                 }
  22.               }
  23.               else if (PageStatus0 == VALID_PAGE)
  24.               {
  25.                 /* 第1页接收数据 */
  26.                 if (PageStatus1 == RECEIVE_DATA)
  27.                 {
  28.                           return PAGE1;         //PAGE1有效
  29.                 }
  30.                 else
  31.                 {
  32.                           return PAGE0;         //PAGE0有效
  33.                 }
  34.               }
  35.               else
  36.               {
  37.                 return NO_VALID_PAGE;   //没有有效的页
  38.               }
  39. //-----------------------------------------------------------------------------------------
  40.                 case READ_FROM_VALID_PAGE:  //读操作
  41.               if (PageStatus0 == VALID_PAGE)
  42.               {
  43.                 return PAGE0;           //PAGE0有效
  44.               }
  45.               else if (PageStatus1 == VALID_PAGE)
  46.               {
  47.                 return PAGE1;           //PAGE1有效
  48.               }
  49.               else
  50.               {
  51.                 return NO_VALID_PAGE ;  //没有有效的页
  52.               }
  53. //-----------------------------------------------------------------------------------------
  54.             default:
  55.               return PAGE0;             //PAGE0有效
  56.         }
  57. }
Periodic 发表于 2012-6-8 21:36 | 显示全部楼层
  1. static unsigned short EE_FindValidPage(unsigned char Operation)
  2. {
  3.           unsigned short PageStatus0 = 6, PageStatus1 = 6;

  4.          
  5.           PageStatus0 = (*(volatile unsigned short*)PAGE0_BASE_ADDRESS);//获取PAGE0实际状态
  6.           PageStatus1 = (*(volatile unsigned short*)PAGE1_BASE_ADDRESS);//获取PAGE1实际状态

  7.           //读或写操作
  8.           switch (Operation)
  9.           {
  10.             case WRITE_IN_VALID_PAGE:   //写操作
  11.               if (PageStatus1 == VALID_PAGE)//错误在这里//#define VALID_PAGE              ((unsigned short)0x0000)     /* PAGE containing valid data */
  12.               {
  13.                 /* 第0页接收数据 */
  14.                 if (PageStatus0 == RECEIVE_DATA)
  15.                 {
  16.                           return PAGE0;         //PAGE0有效
  17.                 }
  18.                 else
  19.                 {
  20.                           return PAGE1;         //PAGE1有效
  21.                 }
  22.               }
  23.               else if (PageStatus0 == VALID_PAGE)
  24.               {
  25.                 /* 第1页接收数据 */
  26.                 if (PageStatus1 == RECEIVE_DATA)
  27.                 {
  28.                           return PAGE1;         //PAGE1有效
  29.                 }
  30.                 else
  31.                 {
  32.                           return PAGE0;         //PAGE0有效
  33.                 }
  34.               }
  35.               else
  36.               {
  37.                 return NO_VALID_PAGE;   //没有有效的页
  38.               }
  39. //-----------------------------------------------------------------------------------------
  40.                 case READ_FROM_VALID_PAGE:  //读操作
  41.               if (PageStatus0 == VALID_PAGE)
  42.               {
  43.                 return PAGE0;           //PAGE0有效
  44.               }
  45.               else if (PageStatus1 == VALID_PAGE)
  46.               {
  47.                 return PAGE1;           //PAGE1有效
  48.               }
  49.               else
  50.               {
  51.                 return NO_VALID_PAGE ;  //没有有效的页
  52.               }
  53. //-----------------------------------------------------------------------------------------
  54.             default:
  55.               return PAGE0;             //PAGE0有效
  56.         }
  57. }
Periodic 发表于 2012-6-8 21:38 | 显示全部楼层
本帖最后由 Periodic 于 2012-6-8 21:40 编辑

#define ERASED                  ((unsigned short)0xFFFF)     /* PAGE is empty */
#define RECEIVE_DATA            ((unsigned short)0xEEEE)     /* PAGE is marked to receive data */
#define VALID_PAGE              ((unsigned short)0x0000)     /* PAGE containing valid data */

            case WRITE_IN_VALID_PAGE:   //写操作
              if (PageStatus1 == VALID_PAGE)//错误
              {
                /* 第0页接收数据 */
                if (PageStatus0 == RECEIVE_DATA)
                {
                          return PAGE0;         //PAGE0有效
                }
                else
                {
                          return PAGE1;         //PAGE1有效
                }
              }
              else if (PageStatus0 == VALID_PAGE)//错误
              {
                /* 第1页接收数据 */
                if (PageStatus1 == RECEIVE_DATA)
                {
                          return PAGE1;         //PAGE1有效
                }
                else
                {
                          return PAGE0;         //PAGE0有效
                }
              }
              else
              {
                return NO_VALID_PAGE;   //没有有效的页
              }
Periodic 发表于 2012-6-8 21:42 | 显示全部楼层
应该 改成
if (PageStatus1 == ERASED)//正确

这个 库出了那么久 官方没有发现么?:L
Periodic 发表于 2012-6-8 21:49 | 显示全部楼层
#define ERASED                  ((unsigned short)0xFFFF)     /* PAGE is empty */

FLASH  默认应该是0XFFFF
#define RECEIVE_DATA            ((unsigned short)0xEEEE)  /* PAGE is marked to receive data */
#define VALID_PAGE              ((unsigned short)0x0000)     /* PAGE containing valid data */
Periodic 发表于 2012-6-8 21:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

336

帖子

3

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