资源简介
STM32 内部FLASH 有一定的使用寿命大概是一万,如果我们用自身的FLASH来保存一些数据(机器参数)等,可以节省开发成本,但是FLASH的使用是有限的,我们可以通过软件方式延长它的使用寿命,该组件就是实现延长FLASH寿命,同时模块化独立,模拟EEROM的形式,模拟了一个256byte EEROM,可使用次数为30万次。参考文件系统。 文档详细介绍该实验方式以及函数接口的使用
代码片段和文件信息
//=========================================================================
//= 文件名称: stencil.c
//= 文件说明: 此文件包含所有模版功能相关函数
//= 作 者: 邓星颖
//= 公 司: Hazens Automotive Electronics(SZ)Co.Ltd.
//= 创建日期: 2017-09-19
//= 修改历史:
//= 版 本: V1.0
//=========================================================================
/**************************************************************************
* Compiler option used to distinguish inclusion done by the owner
**************************************************************************/
#define _EEROM_LIB_C_
/**************************************************************************
* Inclusions of modules headers
**************************************************************************/
#include “EEromConfig.h“
#include “EEromLib.h“
#include “string.h“
#include “stdio.h“
/*读取设备ID信息*/
/*
硬件版本信息
*/
#pragma pack(1)
typedef struct
{
u8 EE_Buff[PART_SIZE]; /*用来存放数据*/
u16 CheckSum;
}_EEData_;
typedef struct
{
u8 ValidFlag;
u8 CheckSum;
}_ValidBytes_;
typedef struct
{
_ValidBytes_ ValidBytes[PART_NUM-1];
}_EEValid_;
//12 *
typedef struct
{
u8 ModuleValid;
u8 CheckSum; /*用来校验该模块正确否*/
u8 DataLen; /*申请的字节数据不能超过255 否则会溢出*/
char name[NAME_LEN];
u16 DataAddr; /*总共占14个字节*/
}_ModuleInfor_;
/*CheckSum = ModuleValid + CheckSum +DataLen + name + DataAddr*/
typedef struct
{
_ModuleInfor_ ReqModule[REQ_NUM];
}_Table_;
typedef struct
{
u8 UpdataFlag;
u8 FlashSts;
u8 ReadPart;
u8 WritePart;
u8 ModuleNum; /*已申请模块数量*/
u16 UseBytes; /*实际占领的字节数*/
u32 TableStartAddr;
u32 ValidStartAddr;
u32 DataStartAddr;
u32 DataWriteAddr;
u32 DataReadAddr;
}_EEInfor_;
_Table_ EETable;
_EEValid_ EEValid;
_EEData_ EEData;
//目前表头是占122个字节
#pragma pack()
void PrintfEEData(void);
static u16 FlashSize; /*Flash容量大小*/
static u16 PageSize; /*页大小*/
//static u8 FlashType;
static _EEInfor_ EEInfor;
static _EEDev_ EEDev;
static void PrintfFlashEEData(u32 Addr);
static u8 GetReqModuleCheckSum(_ModuleInfor_ *pModuleInfor);
static u8 GetEEDataCheckSum(void);
static void GetProductInfor(void)
{
vu32 *pIDcode;
u16 RevID ;
u16 DevID;
FlashSize = *((vu16*)0x1ffff7E0);
if(FlashSize <= 0x80)
{
PageSize = 1024; //页大小1K
}
else
{
PageSize = 2048; //页大小为2K
}
pIDcode = ((vu32*)0xE0042000);
RevID = (u16)(((*pIDcode) & (0xFFFF <<16))>>16);
DevID = (u16)((*pIDcode) & (0x7FF));
EEROM_DBG(“\r\n*****************************\r\n“);
EEROM_DBG(“Product Information:\r\n“);
switch(DevID)
{
case 0x412: /*小容量产品*/
EEROM_DBG(“Stm32F10xxx_Low_density_devices\r\n“);
break;
case 0x410: /*中容量产品*/
EEROM_DBG(“Stm32F10xxx_Medium_density_devices\r\n“);
break;
case 0x414: /*大容量产品*/
EEROM_DBG(“Stm32F10xxx_High
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-12-04 15:56 EEromLib\
文件 5343 2017-12-04 15:56 EEromLib\EEromConfig.h
文件 21755 2017-12-04 15:24 EEromLib\EEromLib.c
文件 4147 2017-12-01 16:25 EEromLib\EEromLib.h
文件 1086 2017-12-04 15:59 EEromLib\使用例子.txt
相关资源
- stm32f103c8t6开发板原理图+pcb
- stm32的半导体除湿机程序
- stm32实现高精度频率测定
- stm32库函数代码自动生成器V1.2
- stm32 DMA例程
- stm32蓝牙小车
- 显示屏操作(stm32f103c8t6(SAN))
- 基于STM32f103 PWM波呼吸灯
- STM32红外检测有人开始录音,并播放录
- Proteus 8.6仿真STM32F103C6
- stm32 +w5500 裸机 远程升级 自动dns pi
- stm32双机spi通信
- STM32 PCB封装库 全系列 全网不好找
- 基于STM32F407的W5500 tcpserver(官网例程
- 串口调试助手(测试STM32串口)
- 基于STM32F407ZG的监控摄像头及FATFS文件
- tm1650+stm32f103源码(board_tm1650.c)
- stm32定时器中断
- 基于STM32的音频信号采样与FFT分析
- STM32肺活量测试仪
- 基于STM32F103C8T6主控板使用BH1750检测光
- cubeMX设计实现stm32f407上的CAN及485的通
- stm32 BootLoader程序(main.c)
- STM32修炼的最好书
- STM32 BLDC 无刷电机
- stm32 实现Fatfs对U盘文件操作(main.c)
- stm32f103 USB键盘
- OBD_CAN读取代码(stm32f103)
-
STM32-ba
se64加密源代码 - stm32 MQTT
评论
共有 条评论