首页 > 其他分享 >STM32读写FLASH

STM32读写FLASH

时间:2024-07-23 15:18:47浏览次数:9  
标签:HAL addr Inside 读写 FLASH STM32 擦除 uint32

要点:

读写前要解锁并擦除整页才可以重新写入

 

测试代码

#include "my_flash.H"

/**
  * @brief 往内部FLASH写入数据
  * @param addr 写入地址
  * @param pdata 存储待写数据
  * @retval None
  */
void FLASH_Inside_Wr(uint32_t addr,uint32_t Pdata)
{
    //定义局部变量
    uint32_t PageError = 0;
    HAL_StatusTypeDef HAL_Status;
    //擦除配置信息结构体,包括擦除地址、方式、页数等
    FLASH_EraseInitTypeDef pEraseInit;
    pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;//按页擦除
    pEraseInit.PageAddress = addr;//擦除地址
    pEraseInit.NbPages = 1;//擦除页数量
    //step1 解锁内部FLASH,允许读写功能
    HAL_FLASH_Unlock();
    //step2 开始擦除addr对应页
    HAL_Status = HAL_FLASHEx_Erase(&pEraseInit,&PageError);//擦除
    if(HAL_Status != HAL_OK) printf("内部FlASH擦除失败!rn");
    //step3 写入数据
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr,Pdata);
    //step4 锁定FLASH
    HAL_FLASH_Lock();
}


/**
  * @brief 读取内部FLASH数据
  * @param addr 读取地址
  * @retval 读出的数据
  */
uint32_t FLASH_Inside_Rd(uint32_t addr)
{
    //定义局部变量
    uint32_t RdData = 0;
    //step1 解锁内部FLASH,允许读写功能
    HAL_FLASH_Unlock();
    RdData = *(__IO uint32_t *)addr;
    //step2 锁定FLASH
    HAL_FLASH_Lock();

    return RdData;
}

/**
  * @brief 内部FLASH读写测试
  */
void FLASH_Inside_Test(void)
{
    printf("\r\n------------------内部FLASH读写测试------------------\r\n");
    uint32_t addr = 0x0800FC00;//确保该地址内部FLASH是空余的!
    uint32_t WrData = 0x01234567;//待写入数据
    uint32_t RdData = 0;//存储读取数据

    printf("地址0x%x写入数据:0x%x\r\n",addr,WrData);
    FLASH_Inside_Wr(addr,WrData);//写入数据
    RdData = FLASH_Inside_Rd(addr);//读取数据
    printf("地址0x%x读出数据:0x%x\r\n",addr,RdData);
}
#ifndef __my_flash_H
#define __my_flash_H
#include "stm32f1xx_hal.h"
#include "bsp_debug_usart.h"

void FLASH_Inside_Wr(uint32_t addr,uint32_t Pdata);
uint32_t FLASH_Inside_Rd(uint32_t addr);
void FLASH_Inside_Test(void);





#endif
FLASH_Inside_Test();
			while(1)
			{;}

读写片上flash

keil调试查看内存

 

标签:HAL,addr,Inside,读写,FLASH,STM32,擦除,uint32
From: https://www.cnblogs.com/aker-whale/p/18318497

相关文章

  • STM32F429IGT6 STMCubeMX PWM 控制 180 舵机
    设置PWM对应引脚PA2![[QQ_1721613625998.png]]定时器2受APB1控制![[QQ_1721613709674.png]]配置时钟为72MHZ![[QQ_1721613757231.png]]HAL库定义PWM/*TIM2initfunction*/voidMX_TIM2_Init(void){/*USERCODEBEGINTIM2_Init0*//*USERCODEENDTI......
  • MDK Keil5创建stm32工程出现 …\OBJ\Template.axf: Error: L6200E: Symbol HAL_MspD
    MDKKeil5创建stm32工程出现…\OBJ\Template.axf:Error:L6200E:SymbolHAL_MspDeInitmultiplydefined(bystm32f7xx_hal_msp_template.oandstm32f7xx_hal_msp.o).错误的解决方法错误提示如图: 解决方法如下:1.找到左边目录,右键选择manageprojectitems,找到对应文件,删除......
  • 简单讲解一下STM32的启动过程
    启动模式首先我们先看一下启动模式第一个为内部FLASH启动方式   当芯片上电后采样到BOOT0引脚为低电平时,0x00000000和0x00000004地址被映射到内部FLASH的首地址0x08000000和0x08000004。因此,内核离开复位状态后,读取内部FLASH117的......
  • python里读写excel等数据文件的几种常用方式
    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv、txt等)、excel文件、数据库文件、api等。下面整理下python有哪些方式可以读取数据文件。1.python内置方法(read、readline、readlines)read():一次性读取整个文件内容。推荐使用read(size)方法,size越大......
  • STM32&定时器(超明白超细致超核心)
    可以说,STM32的定时器是32这块芯片中功能最多,结构最复杂,内容涉及最多的外设之一了。从学习形式来看,可以归纳为两个层面:原理层和软件层。那么由于内容太多,我也按照这个架构来逐一进行讲解。目录一:定时器架构与原理1.时基2.计数方式3.定时器的架构二.定时器功能1.基础溢出......
  • VScode利用EIDE和cortex-debug进行stm32开发(也适用51)
    文章目录前言必要准备第一步:安装vscode插件——EIDEEIDE是什么EIDE的下载**EIDE的配置(重点)**EIDE功能的简单介绍1.项目的建立:新建项目或者导入项目2.为项目选择[芯片支持包](https://em-ide.com/zh-cn/docs/modules/chip_pkg)(不是必须)3.构建配置4.[烧录配置](https://e......
  • 零基础学STM32(二)-新建工程(点亮一个LED灯)
    本项目讲解所用工程均使用stm32f103C8T6芯片HAL库版本。STM32f103参考文档:https://pan.baidu.com/s/1JEtJMZmqU5gk4Nbupe1Apg?pwd=8888CubeMX简介CubeMX是STMicroelectronics(意法半导体)提供的一款免费的配置和初始化工具,用于其STM32微控制器系列。这个工具可以帮助开发者轻......
  • 零基础学STM32(一)-开发软件安装
    本项目讲解所用工程均使用stm32f103C8T6芯片HAL库版本。重点!!!!安装到文件夹路径不能有中文路径软件资源keil5安装包地址:https://pan.baidu.com/s/1IUf6DU20vJC0rrIv3_DBCQ?pwd=8888 cubemx安装包地址:https://pan.baidu.com/s/1beA_TQ8qS593POVwsv-onw?pwd=8888 (各取所需......
  • 文件的读写与方法
    """文件模式:r:读模式,只可读w:写模式,只可写,并且写之前会清空文件中的内容a:追加模式,在文件末尾写内容,不会清空文件原内容r+:可读可写模式,写的时候不会清空文件内容而是在文件末尾添加内容,光标模式在开始w+:可写可读模式,会先清空文件......
  • VScode利用EIDE和cortex-debug进行stm32开发(包括配置以及使用)
    目录前言必要准备第一步:安装vscode插件——EIDEEIDE是什么EIDE的下载EIDE的配置(重点)EIDE功能的简单介绍1.项目的建立:新建项目或者导入项目2.为项目选择芯片支持包(不是必须)3.构建配置4.烧录配置5.项目属性和项目设置6.安装实用工具和打开插件设置第二步:安装vscode插件——cortex-......