当前位置:首页 > 单片机 > 单片机
[导读] 在实际的项目中,我们可能需要保存一些数据,希望下次启动的时候数据还可以使用。在这里介绍使用STM32内部flash来保存数据的方法。在这里我使用STM32F103C8T6这款芯片做介绍。flash大小64K。本例子0x08

在实际的项目中,我们可能需要保存一些数据,希望下次启动的时候数据还可以使用。在这里介绍使用STM32内部flash来保存数据的方法。

在这里我使用STM32F103C8T6这款芯片做介绍。flash大小64K。本例子0x0800 0000~0x800 3000作为bootloader使用,0x0800 3000~0x0800 C000作为程序存放地址,0x0800 C000~0x0800 FFFF作为本例子的数据存放区域。





程序:

#include "stm32f10x_flash.h"
#define PageSize 1024
u32 data[10] = {1,2,3,4,5,6,7,8,9,10};
u32 data_temp[10] = {0};
u8 flash_write(u32 StartAddr,u32 *p_data,u32 size);
int flash_read(u32 StartAddr,u32 *p_data,u32 size);



/******************************************************************************
* flash的写函数:输入:
u32 StartAddr flash起始地址
u32 *p_data 待写入数据指针u32 size写入数据的数量
输出:0:正确执行
非0:出错
注意:输入数据一定是u32 的指针,即数据一定是按照4字节对齐写入的。
所以:size也是u32的个数(字节数的4分之一)
*******************************************************************************/
u8 flash_write(u32 StartAddr,u32 *p_data,u32 size)
{
volatile FLASH_Status FLASHStatus;
u32 EndAddr=StartAddr+size*4;
vu32 NbrOfPage = 0;
u32 EraseCounter = 0x0, Address = 0x0;
int i;
int MemoryProgramStatus=1;
//为一是通过
FLASH_Unlock(); //解锁函数
NbrOfPage=((EndAddr-StartAddr)>>10)+1;//有多少个页被擦除//清除所有已有标志
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
//擦页
FLASHStatus=FLASH_COMPLETE;
for(EraseCounter=0;(EraseCounter{
FLASHStatus=FLASH_ErasePage(StartAddr+(PageSize*EraseCounter));
}
//开始写数据
Address = StartAddr;
i=0;
while((Address{ FLASHStatus=FLASH_ProgramWord(Address,p_data[i++]);
Address=Address+4;
}
//检验数据是否出错
Address = StartAddr;
i=0;
while((Address < EndAddr) && (MemoryProgramStatus != 0))
{
if((*(vu32*) Address) != p_data[i++])
{ MemoryProgramStatus = 0;
return 1;
}
Address += 4;
}
return 0;
}




int flash_read(u32 StartAddr,u32 *p_data,u32 size)
{
u32 EndAddr=StartAddr+size*4;
int MemoryProgramStatus=1;
u32 Address = 0x0;
int i=0;
Address = StartAddr;
while((Address < EndAddr) && (MemoryProgramStatus != 0))
{
p_data[i++]=(*(vu32*) Address);
Address += 4;
}
return 0;
}


调用例子:

flash_write(0x0800C000,&data[0],10);
flash_read(0x0800C000,&data_temp[0],10);


注意:#define PageSize 1024 根据不同型号有1K与2K的不同


STM32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。

小容量产品主存储块1-32KB,每页1KB。系统存储器2KB。

中容量产品主存储块64-128KB,每页1KB。系统存储器2KB。

大容量产品主存储块256KB以上,每页2KB。系统存储器2KB。

互联型产品主存储块256KB以上,每页2KB。系统存储器18KB。


还有Flash当EEPROM用还是很蛋疼很不好用的,尤其是数据较多的时候,因为Flash是要先整页擦除,再写入数据的,改变页中的一个数据就要备份该页的全部数据,然后再整页重新写一遍!



页面大小

按1.2的方法下得该MCU的参考手册,STM32F103RBT6对应的参考手册为RM0008 Reference manual,定位到Embedded Flash memory章节(也可以通过搜索0x0800 0000来定位)。STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page)、medium-density devices(128KB,1KB/page)、high-density devices(512KB,2KB/page)、connectivity line devices(256KB,2KB/page)、XL-density(devices(1M,2KB/page)。从上面分析可知,STM32F103RBT6的Flash是128KB,可见是medium-density devices,如下图所示:

图4 Flash module organization (medium-density devices)


注意数据写入的地址必须是偶数,否则flash读到的数据全为0,最好为1K的整数倍,否则 写入数据时会擦除相邻的扇区的数据


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京——2024年4月30日 亚马逊云科技持续引领云上数据服务创新,助力企业构建全面的数据基座以充分发挥数据潜力,加速生成式AI技术落地。在生成式AI时代,数据是企业脱颖而出的关键——基础模型依赖于大规模高质量数据集,生...

关键字: 生成式AI 数据 模型

全新的专有模型导入功能让客户更轻松地将其专属模型导入到Amazon Bedrock中,从而充分利用Amazon Bedrock的强大功能。全新的模型评估功能使客户能够广泛且便捷地选择完全托管模型,包括RAG优化的新版Am...

关键字: 生成式AI 基础模型 数据

2024年4月17日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)将在2024年4月25日欧洲证券交易所开盘前公布202...

关键字: 半导体 数据

数据占满我们的电子设备已成常态,为了满足广大用户的需求,NAS应运而生。然而,对于许多普通用户来说,NAS设备的设置和使用却常常令人望而却步。不过,铁威马TOS 6的出现,不仅功能强大,而且操作简便,即使是初次接触NAS...

关键字: 数据 电子设备 NAS

机器学习作为人工智能领域的重要组成部分,其过程涉及到多个核心环节。本文将详细阐述机器学习的四个主要步骤:数据准备、模型选择、模型训练与评估,以及模型部署与应用,以揭示机器学习从数据到应用的完整流程。

关键字: 数据 人工智能 机器学习

机器学习算法是人工智能领域中的核心技术之一,它通过对大量数据进行学习,自动发现数据中的规律和模式,从而实现对新数据的预测、分类、聚类等任务。本文将深入探讨机器学习算法的基本过程,包括数据准备、模型选择、训练与评估等关键步...

关键字: 数据 人工智能 机器学习

西班牙塞维利亚,2024年3月12日 — Teledyne Technologies旗下公司、全球成像解决方案创新者Teledyne e2v宣布扩展其Flash™ CMOS图像传感器系列,推出Flash 2K LSA,该...

关键字: 图像传感器 Flash 摄像机

随着人工智能(AI)技术的迅速发展,人们对于通用人工智能(AGI,即Artificial General Intelligence)的期待也日益高涨。通用人工智能指的是具备像人类一样全面智能的计算机系统,能够执行各种复杂...

关键字: 人工智能 计算机 数据

在这篇文章中,小编将为大家带来JTAG接口与Flash的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: JTAG Flash

近日,第11届EEVIA年度中国硬科技媒体论坛暨产业链研创趋势展望研讨会在深圳召开,兆易创新Flash事业部产品市场经理张静在会上发布了主题为“持续开拓,兆易新一代存储产品助力行业创新”的演讲。

关键字: 兆易创新 Flash 闪存
关闭
关闭