查看: 1132|回复: 0

存储数据——轻松利用STM32中的FLASH

[复制链接]

该用户从未签到

发表于 2016-7-6 08:50:37 | 显示全部楼层 |阅读模式
分享到:
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]);
            }
        注:尽量少写入,可以在写入前加入一些判断,看看是否有必要存储。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-11-19 10:32 , Processed in 0.115100 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.