当前位置:首页 > 单片机 > 单片机
[导读] 前言做项目时有时候需要对一些数据进行掉电可存储,一般来说可以把这些数据存储到到EEPROM或FLASH,这次项目中我使用到的芯片是STM32F051C8T6,只有64KB的FLASH,没有EEPROM。这个时候就需要考虑FLASH的

前言

做项目时有时候需要对一些数据进行掉电可存储,一般来说可以把这些数据存储到到EEPROM或FLASH,这次项目中我使用到的芯片是STM32F051C8T6,只有64KB的FLASH,没有EEPROM。这个时候就需要考虑FLASH的读写操作。

STM32CubeMX

什么是STM32CubeMX?

STM32CubeMX是以HAL库为基础,进行上层的硬件和软件框架设计的图形化软件配置工具,使用图形化向导生成C初始化代码,可以根据设计生成硬件管脚定义及软件BSP工程包,支持IAR-ARM、MDK-ARM、Ac6等IDE开发环境。

下载地址点击这里。

这次项目使用的是STM32F051+STM32CubeMX+keil 5开发。

FLASH读写流程

首先简要写一下FLASH的读写流程

  • 对FLASH写入数据

    1. 解锁FLASH

    2. 擦除FLASH

    3. 写入数据到FLASH

    4. 锁住FLASH

  • FLASH读取数据
    直接读取相应的FLASH地址即可

这是我使用STM32CubeMX的HAL FLASH库的流程,其他STM32库可能有所差异,但是肯定有解锁、擦除、写入、上锁这几个步骤的。

FLASH读写代码示例

下面放上代码清单和测试流程

uint32_t writeFlashData = 0x55555555;

uint32_t addr = 0x08007000;


//FLASH写入数据测试

void writeFlashTest(void)

{

//1、解锁FLASH

HAL_FLASH_Unlock();


//2、擦除FLASH

//初始化FLASH_EraseInitTypeDef

FLASH_EraseInitTypeDef f;

f.TypeErase = FLASH_TYPEERASE_PAGES;

f.PageAddress = addr;

f.NbPages = 1;

//设置PageError

uint32_t PageError = 0;

//调用擦除函数

HAL_FLASHEx_Erase(&f, &PageError);


//3、对FLASH烧写

HAL_FLASH_Program(TYPEPROGRAM_WORD, addr, writeFlashData);


//4、锁住FLASH

HAL_FLASH_Lock();

}


//FLASH读取数据测试

void printFlashTest(void)

{

uint32_t temp = *(__IO uint32_t*)(addr);


printf("addr:0x%x, data:0x%xrn", addr, temp);

}


之后在主函数里添加下面测试流程:

void main(void)

{

//flash TEST

writeFlashData = 0x55555555;

writeFlashTest();

printFlashTest();

writeFlashData = 0xaaaaaaaa;

writeFlashTest();

printFlashTest();

while(1);

}


设置好串口,打印

addr:0x8007000, data:0x55555555

addr:0x8007000, data:0xaaaaaaaa

成功!

其中比较特殊的是擦除步骤,需要定义个FLASH_EraseInitTypeDef的数据,FLASH_EraseInitTypeDef有三个成员:TypeErase、PageAddress和NbPages。

其中,TypeErase有两个选项,页擦除和块擦除:

#define FLASH_TYPEERASE_PAGES ((uint32_t)0x00) /*!

#define FLASH_TYPEERASE_MASSERASE ((uint32_t)0x01) /*!

PageAddress是设置FLASH地址,这里为0x8007000;

NbPages为擦除页数(块数),这里为1;

另外还需要定义一个uint32_t变量——PageError,如果出现错误这个变量会被设置为出错的FLASH地址。

关于0x8007000

0x8007000是STM32的一个内存映射地址,其指向FLASH memory,如图:

这个地址也要考虑芯片的FLASH大小,比如我这次用的芯片FLASH大小是64KB,0x0801 0000-0x0800 0000=0x10000,正好等于64KB。

在《STM32F05x参考手册》中,我选的0x8007000是这么一个位置,是FLASH地址的最后一块扇区的起始位置。

如果使用上面的示例代码读写FLASH不成功,也请考虑一下FLASH的大小和地址设置。

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

西班牙塞维利亚,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 闪存

在数字化时代,数据的数量和价值飞速增长,如何安全、有效地存储和管理这些数据成为了一个重要的问题。刻录机,作为一种同时具有数据存储和备份功能的设备,在这方面发挥着越来越重要的作用。本文将向大家介绍刻录机的定义、工作原理以及...

关键字: 刻录机 数据

在数字时代,数据已经成为企业的重要资产。随着云计算技术的快速发展,云服务器已成为企业和个人存储数据的重要平台。然而,数据的存储和处理也面临着多种安全威胁。本文将探讨如何使用云服务器确保存储数据的安全性。

关键字: 数据 云服务

北京——2023年9月21日,近期,亚马逊云科技作为参展商参与了久负盛名的IBC 2023 (欧洲广播电视展)并宣布推出一系列聚焦营收增长的媒体与娱乐(Amazon Web Services for M&E)行业解决方案...

关键字: 亚马逊 数据

STIF2023第四届国际科创节暨DSC2023国际数字服务大会(数服会)定于12月15日在北京举行,主题为:数实融合 推动高质量发展。日前,活动筹备工作正式启动。

关键字: 国际科创节暨 数据

随着信息技术的快速发展,存储器的需求日益增长。Flash存储器作为一种非易失性存储器,具有重要的应用价值和广泛的应用领域。本文将详细介绍Flash存储器的基本原理、工作方式和作用,帮助读者更好地了解这一重要的存储器技术。

关键字: Flash 汽车 电子设备

随着信息时代的到来,数据存储成为了一项基本需求。Flash存储器成为了一种常见的存储设备,用于存储各种类型的数据,如文档、图片、视频等。本文将详细介绍如何使用Flash存储器以及如何写入数据,帮助读者了解Flash存储器...

关键字: Flash 存储器 数据
关闭
关闭