STM32F4 备份SRAM使用 您所在的位置:网站首页 sram数据的备份过程 STM32F4 备份SRAM使用

STM32F4 备份SRAM使用

2023-09-01 15:31| 来源: 网络整理| 查看: 265

STM32F4提供4KB的备份SRAM,在开发程序时可以用于存储掉电不丢失的数据(需要RTC纽扣电池支持),特别是一些实时修改的,掉电不能丢失的数据,比如我用于存储雨量累计流量等实时变化的数据,定时存储到flash,实时存储到备份区(不能频繁的写flash),当备份区数据丢失了再从flash加载,否则每次都从备份区加载。

/************************************************************************************************************* * 文件名 : BackupSRAM.c * 功能 : STM32F4 备份域SRAM驱动 * 作者 : [email protected] * 创建时间 : 2018-03-09 * 最后修改时间 : 2018-03-09 * 详细: *************************************************************************************************************/ #include "BackupSRAM.h" #include "system.h" #include "string.h" #define BACKUP_SRAM_SIZE (4*1024) //备份SRAM大小 /************************************************************************************************************************* * 函数 : bool BackupSRAM_Init(void) * 功能 : 备份域SRAM初始化 * 参数 : 无 * 返回 : TRUE:成功,FALSE:失败 * 依赖 : 底层宏定义 * 作者 : [email protected] * 时间 : 2018-03-09 * 最后修改时间 : 2018-03-09 * 说明 : *************************************************************************************************************************/ bool BackupSRAM_Init(void) { RCC->APB1ENR|=1= BACKUP_SRAM_SIZE) return 0; //起始地址有误 len = AddrOffset + DataLen; if(len > BACKUP_SRAM_SIZE) len = BACKUP_SRAM_SIZE; //限制范围,只有4KB len -= AddrOffset; //计算要写入的数据长度 memcpy((u8 *)BKPSRAM_BASE+AddrOffset, pData, DataLen); return len; } /************************************************************************************************************************* * 函数 : u16 BackupSRAM_ReadData(u16 AddrOffset, u8 *pData, u16 DataLen) * 功能 : 从备份SRAM中读取数据 * 参数 : AddrOffset:地址偏移,0-4KB范围;pData:要读取的数据缓冲区;DataLen:要读取的数据长度 * 返回 : 读取的数据长度 * 依赖 : 底层宏定义 * 作者 : [email protected] * 时间 : 2018-03-09 * 最后修改时间 : 2018-03-09 * 说明 : 注意:地址偏移+写入的数据长度不能超过4KB *************************************************************************************************************************/ u16 BackupSRAM_ReadData(u16 AddrOffset, u8 *pData, u16 DataLen) { u32 len; if(pData==NULL) return 0; //无效的地址 if(DataLen==0) return 0; //无效的数量 if(AddrOffset >= BACKUP_SRAM_SIZE) return 0; //起始地址有误 len = AddrOffset + DataLen; if(len > BACKUP_SRAM_SIZE) len = BACKUP_SRAM_SIZE; //限制范围,只有4KB len -= AddrOffset; //计算要写入的数据长度 memcpy(pData, (u8 *)BKPSRAM_BASE+AddrOffset, DataLen); return len; } /************************************************************************************************************* * 文件名 : BackupSRAM.h * 功能 : STM32F4 备份域SRAM驱动 * 作者 : [email protected] * 创建时间 : 2018-03-09 * 最后修改时间 : 2018-03-09 * 详细: *************************************************************************************************************/ #ifndef __BACKUP_SRAM_H_ #define __BACKUP_SRAM_H_ #include "system.h" bool BackupSRAM_Init(void); //备份域SRAM初始化 u16 BackupSRAM_WriteData(u16 AddrOffset, u8 *pData, u16 DataLen); //写入数据到备份SRAM中 u16 BackupSRAM_ReadData(u16 AddrOffset, u8 *pData, u16 DataLen); //从备份SRAM中读取数据 #endif //__BACKUP_SRAM_H_


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有