基于stm32f1的内部读写flash

flash是存储芯片的一种,通过特定的程序可以修改里面的数据。FLASH在电子以及半导体领域内往往表示Flash Memory的意思,即平时所说的“闪存”,全名叫Flash EEPROM Memory。

它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。(来源于百度百科)

那么如何在单片机上进行内部flash的读写操作。主要分为以下几个步骤:
1.调用 HAL_FLASH_Unlock 解锁;
2.配置 FLASH_EraseInitTypeDef 擦除 flash 初始化结构体;
3.调用HAL_FLASHEx_Erase(&flash, &PageError)擦除页;
4.调用 HAL_FLASH_Program 函数写入数据;
5.调用 HAL_FLASH_Lock 上锁;

附上代码

#include "flash.h"
 
uint32_t startAddress;
uint32_t endAddress;

uint32_t STMFLASH_ReadWord(uint32_t faddr)
{
	return *(__IO uint32_t*)(faddr); 
}  

//FLASH写入数据
void WriteFlash(uint32_t Address, uint32_t *Data,uint32_t Num)
{
    uint16_t i = 0;
 //   Data = 12354678;
    startAddress = SN;
    endAddress = SN+16;
    HAL_FLASH_Unlock();//1.解锁
    FLASH_EraseInitTypeDef flash;
    flash.TypeErase = FLASH_TYPEERASE_PAGES;
    flash.PageAddress = Address;
    flash.NbPages = 1;
    uint32_t PageError = 0;
    HAL_FLASHEx_Erase(&flash, &PageError);//2.擦除页
    //在startAddress~endAddress写入4组0x12345678
	while(startAddress < endAddress)
	{
		if(HAL_FLASH_Program(TYPEPROGRAM_WORD, startAddress, *Data) == HAL_OK)//3.写数据
		{
			startAddress +=4;
			Data++;
		}
	}
    //4、锁住FLASH
	HAL_FLASH_Lock();
}
 
//FLASH读取数据
uint32_t ReadFlash(uint32_t Address,uint32_t *Data,uint32_t Num)
{
	uint32_t i;
	for(i=0;i<Num;i++)
	{
		Data[i]=STMFLASH_ReadWord(Address);//读取4个字节.
		Address+=4;//偏移4个字节.	
	}
}
#ifndef __FLASH_H
#define __FLASH_H
 
#include "stm32f1xx_hal.h"
 
#define SN 			            0x08010000
#define PN 			            0x08010010
#define SOFTWARE_VERSION 		0x08010020
#define HARDWARE_VERSION		0x08010030
 
 uint32_t STMFLASH_ReadWord(uint32_t faddr);
void WriteFlash(uint32_t Address, uint32_t *Data,uint32_t Num);
uint32_t ReadFlash(uint32_t Address,uint32_t *Data,uint32_t Num);
 
 
#endif 

调试验证的时候,可以定于两个数组,一个存放数据,一个读取数据

	WriteFlash(SN,(uint32_t *)Pwd3,2);
	ReadFlash(SN,(uint32_t *)test,2);	//读取

将读出的数据在串口打印出来
printf(“pwd3=%s/n”,test);请添加图片描述
可见与写入的数据是一样的,内部flash读写成功!

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F1系列微控制器是STMicroelectronics公司推出的一种高性能单片机,它具有内置的Flash存储器,可以用来存储代码和数据。HAL库提供了一系列的函数,可以让开发者轻松地使用内部Flash进行读写操作。 内部Flash是在芯片制造时被集成到芯片中的非易失性存储器器件。它与RAM不同,具有记忆功能,可以保留其内容,即使在断电后也可以保持数据。在STM32F1系列微控制器中,内部Flash被分为两个部分:主存储器和备份存储器。主存储器用于存储应用程序代码,而备份存储器用于存储关键数据,如时钟配置和唯一设备标识符(UID)等。 HAL库提供了一些函数和宏,可以让开发者轻松地读写内部Flash。这些函数和宏包括:FLASH_EraseInitTypeDef、FLASH_WaitForLastOperation、HAL_FLASH_Unlock、HAL_FLASH_Program、FLASH_CR_PG、FLASH_CR_PER等。通过这些函数和宏,开发者可以轻松地实现内部Flash读写操作,以及擦除操作。 要使用内部Flash,开发者需要先解锁内部Flash,然后执行擦除操作。一旦擦除完成,开发者就可以使用HAL_FLASH_Program函数进行编程操作。编程后,开发者可以使用HAL_FLASH_Lock函数重新锁定内部Flash,以保护其内容。 总之,内部FlashSTM32F1系列微控制器的重要组成部分,可以用于存储代码和数据。使用HAL库提供的函数和宏,可以轻松地实现内部Flash读写操作,以及擦除操作,让开发者更加方便地进行程序的开发和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球先生_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值