使用STM32cubeMX的库读写FLASH数据

发布者:Enchanted2023最新更新时间:2018-05-01 来源: eefocus关键字:STM32cubeMX  库读写  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%x\r\n", 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,如图:

STM32内存映射-CODE

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

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

Flash 模块结构

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

关键字:STM32cubeMX  库读写  FLASH数据 引用地址:使用STM32cubeMX的库读写FLASH数据

上一篇:STM32 读写内部Flash
下一篇:STM32:Flash擦除与读写操作

推荐阅读最新更新时间:2024-03-16 16:01

STM32CubeMX软件工程描述_USART配置过程
Ⅰ、写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍、下载与安装 STM32CubeMX使用方法及功能介绍 STM32CubeMX新建工程+基本IO配置过程 本文接着前面 STM32CubeMX 文章结合USART实例,讲述关于STM32CubeMX新建USART工程,以及新建好完成的软件工程。最终通过STM32CubeMX工具配置完成实现USART串口通信的软件工程。 本文使用 Keil(MDK-ARM) V5 软件为编译环境,如果你没有安装最新版本的软件,请安装Keil(MDK-ARM) V5版本的软件,具体过程可以参考我的一篇文章: MDK-ARM下载与安装 关于本文的更多详情
[单片机]
<font color='red'>STM32CubeMX</font>软件工程描述_USART配置过程
STM32CubeMX:基本定时器
芯片:STM32F103C8T6 应用管脚: 输出:PA0、PA1 TIM3 实现1ms定时功能,系统TIMx_CNT=8MHZ=8000 000HZ,设置TIMx_PSC=800-1,那么TIMx_ARR=(TIMx_CNT/TIMx_PSC)*定时器时间=(8000000/800)*0.001=10,TIMx_ARR=10-1。 配置界面 TIM3配置 开启NVIC中断配置 程序中增加回调函数 /* USER CODE BEGIN 4 */ /** * @brief Period elapsed callback in non blocking mode * @par
[单片机]
<font color='red'>STM32CubeMX</font>:基本定时器
MSP430读写片内FLASH保存数据
FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除! 接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据: #include msp430xG43x.h void WriteSegment_256 (char index,char
[单片机]
MSP430<font color='red'>读写</font>片内<font color='red'>FLASH</font>保存<font color='red'>数据</font>
STM32CubeMX系列 | TFTLCD显示
1. 简介 1.1 TFTLCD简介 TFT-LCD(thin film transistor-liquid crystal display)即薄膜晶体管液晶显示器。液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以TFT液晶的色彩更真,因此TFT-LCD也被叫做真彩液晶显示器 常用的TFT液晶屏接口有8位、9位、16位、18位,这里的位数表示的是彩屏数据线的数量。常用的通信模式有6800模式和8080模式,本例程使用8080并口模式(简称80并口),8080接口有5条基本的控制线和多条数据线
[单片机]
SPI串行Flash数据存储系统中的应用
    摘要: ATMEL公司生产的串行Flash AT45系列存储器的容量已达到了16Mb,常用于数据存储系统。文中以AT45D041为例,详细介绍了该系列Flash存储器的命令集以及串行SPI接口的应用方法,并给出了相应的模式时序。     关键词: SPI Flash Buffer 中断 AT45D041 1 概述 在目前所有的非易失性存储器(PROM、EPROM、EEPROM和Flash)中,唯有Flash存储器几乎拥有现今讲究个性化的用户所需的所有特点,它具有掉电数据不丢失、快速数据存取速度、电可擦除、容量大、在线可编程、价格低廉以及足够多的擦除、容量大、在线可编程、价格低廉以及足够多
[应用]
单片机flash通用读写:TZFlash
说明 本文发布单片机flash通用读写库TZFlash,有两个优点: TZFlash将flash的读写抽象成文件读写,更易于使用。 flash写入需要4字节对齐,TZFlash增加cache机制,可以将任意长度的写入flash。 源码 tzflash.h // Copyright 2019-2019 The TZIOT Authors. All rights reserved. // flash管理模块头文件 #ifndef TZFLASH_H #define TZFLASH_H #include tzbasedef.h // TZFlashEraseFunc 函数类型:擦除flash // addr:起始地址
[单片机]
STM32CubeMX系列教程3:基本定时器
这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击 打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟。 定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。 从上图我们可以看到,基本定时器主要由下面三个寄存器组成。 计数器寄存器 (TIMx_CNT) 预分频器寄存器 (TIMx_PSC) 自动重载寄存器 (TIMx_ARR) 计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二
[单片机]
<font color='red'>STM32CubeMX</font>系列教程3:基本定时器
STM32CubeMx之SD卡驱动
1. SD 卡简介 SD存储卡(Secure Digital Mem or y Card)是一种基于 半导体 快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡(MultiMedia Card)格式上发展而来,在兼容SD存储卡基础上发展了 SDI O(SD Input/ Output)卡,此兼容性包括 机械 , 电子 ,电力, 信号 和软件,通常将SD、SDIO卡俗称SD存储卡。 SD卡具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,它被广泛地应用于便携式装置上,例如 数码 相机、平板 电脑 和多媒体播放器等。 SD卡支持两种总线方式:SD方式与SPI方式。其中 SD 方式采用 6 线制,使用 CLK、
[单片机]
<font color='red'>STM32CubeMx</font>之SD卡驱动
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved