原创 使用STM32中的FLASH存储数据

2016-3-7 08:17 3276 21 5 分类: MCU/ 嵌入式

 

 

1、在ST 的网站上下载 AN2594 及例程。

 

2、在例程中src目录中找到eeprom.c 及inc目录中找到eeprom.h拷贝到自己的工程目录中。3.、在工程中添加这个eeprom.c

4、在工程中的外设库里添加 stm32f10x_flash.c

5、在eeprom.c 文件中包含   #include "stm32f10x_flash.h"

6、main.c中包含include "eeprom.h"

 

7、添加数据,在 AN2594中,存入到FLASH的数据是以16位的方式存的。每个数据包含数据本身,还需要存16位的虚拟地址。所以在main.c中需要定义虚地址。:

/* Virtual address defined by the user: 0xFFFF value is prohibited */

uint16_t VirtAddVarTab[NumbOfVar] = {0x5555, 0x6666, 0x7777};

需要多少个16位的数据,将定义在 eeprom.h 中的将NumbOfVar修改成需要的个数。虚地址需要是16位,非0xFFFF,互不重复就可以。

 

定义数据,如果实际的数据不是16位的,可以定义一个联合来解决。

union {

  uint16_t SeatStorage[NumbOfVar+1];

  uint8_t  SeatByte[NumbOfVar * 2+2];

}Seat;

 

8、使用时,先初始化

EE_Init();

 

读出数据

  if((0 == EE_ReadVariable(VirtAddVarTab[0], &Seat.SeatStorage[0])) &&

     (0 == EE_ReadVariable(VirtAddVarTab[1], &Seat.SeatStorage[1])) &&

     (0 == EE_ReadVariable(VirtAddVarTab[2], &Seat.SeatStorage[2])))

// 可以用EE_ReadVariable的返回值是否为0判断FLASH中存储的数据是否有效。

  {

    for(i = 0;i< 6;i++){

       if(!isalnum(Seat.SeatByte))

         break;         

     }

       Seat.SeatStorage[3] = 0;

     if(i != 0)

       DispSeat(Seat.SeatByte,i);

  }

写入数据。

if((strcmp(Seat.SeatByte ,seat)!=0)){

      strcpy(Seat.SeatByte, seat);

      EE_WriteVariable(VirtAddVarTab[0], Seat.SeatStorage[0]);

       EE_WriteVariable(VirtAddVarTab[1], Seat.SeatStorage[2]);

       EE_WriteVariable(VirtAddVarTab[2], Seat.SeatStorage[3]);

      }

 

注:尽量少写入,可以在写入前加入一些判断,看看是否有必要存储。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
21
关闭 站长推荐上一条 /3 下一条