华大单片机HC32L136X单片机flash数据读写操作使用

此款单片机是由有64K的字节flash,一共有128页,一页有512字节,以下是容量划分:

 

 这里使用的是字节位宽的数据读写操作进行演示,其他2种方式大同小异,需要用到自己去研究,首先需要添加对应的flash库文件,然后进行flash操作的初始化工作

while(Flash_Init(12,TRUE) != 0);	//Flash初始化
printf("System Init is OK\r\n");
printf("System to Runing\r\n");

 我这边给他做了读写封装函数,方便程序的调用

#include "main.h"

extern void Write_EEPROM_OneBitData(uint32_t Addr,uint8_t Dat);
extern void Write_EEPROM_StrData(uint32_t Addr,uint16_t Len,uint8_t *Dat);
extern uint8_t Read_EEPROM_Data(uint32_t Addr);

EEPROM_t EEPROM =
{
	Write_EEPROM_OneBitData,
	Write_EEPROM_StrData,
	Read_EEPROM_Data
};

static void Write_EEPROM_OneBitData(uint32_t Addr,uint8_t Dat)
{
	while(Flash_SectorErase(Addr) != 0);
	Flash_WriteByte(Addr,Dat);
}

//EEPROM一个扇区(页)写N个字节操作,最多可写一页数据(512字节)
static void Write_EEPROM_StrData(uint32_t Addr,uint16_t Len,uint8_t *Dat)
{
	uint16_t i=0;
	
	while(Flash_SectorErase(Addr) != 0);
	
	for(i=0;i<Len;i++)
	{
		Flash_WriteByte(Addr+i,*Dat++);
	}
}

//EEPROM读一个字节操作
static uint8_t Read_EEPROM_Data(uint32_t Addr)
{
	uint8_t Dat=0;
	
	Dat = *((volatile uint8_t*)Addr);
	
	return Dat;
}

 他的操作和其他单片机的操作都是大同小异,主要就是确定好写入的地址,要先擦除后写入,读取数据什么时候都可以

//flash页,一共有128个页,一个页区是512字节,此为flash区保存数据
//此款型号没有EEPROM功能,只有flash读写操作,从flash的最后一页开始使用往上推,一个页是512字节
typedef enum
{
	EEPROM_ADDR0 = (uint32_t)0xFE00,    //页0,0xFE00-0xFFFF
	EEPROM_ADDR1 = (uint32_t)0xFC00,		//页1,0xFC00-0xFDFF
	EEPROM_ADDR2 = (uint32_t)0xFA00,		//页2,0xFA00-0xFBFF
	EEPROM_ADDR3 = (uint32_t)0xF800			//页3,0xF800-0xF9FF
}EEPROM_ADDR_t;

 从他的做后一页(127页)开始操作flash数据操作,这样可以防止应用程序覆盖保存的数据,还有就是地址一定要对,这样读写操作才正常,以下写入数据操作

EEPROM.Write_EEPROM_StrData(EEPROM_ADDR0,Flash_Data_Len,Flash_Buff);
EEPROM.Write_EEPROM_OneBitData(EEPROM_ADDR1+RX_SaveBaud,0x01);

 读取数据操作

Flag_Num = EEPROM.Read_EEPROM_Data(EEPROM_ADDR0+Flash_ZFlag);
printf("Flag_Num:%d\r\n",Flag_Num);

虽然是简单的读写flash操作,但是还是很多不知道怎么写程序,希望能够帮助到你!!!

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值