STM8S读写内部EEPROM

1初始化函数

void InitEEPROM(void)
{
  
  FLASH_DeInit();
  FLASH_Unlock(FLASH_MEMTYPE_DATA);//EEPROM
  FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_TPROG);
  
}

2.读一个字节的函数实现

/*******************************************************************************
* 名称: INT8U FlashEeprom_ReadByte(INT16U Address)
* 功能: flasheeprom读一个字节函数
* 形参: Address:读取数据的地址
* 返回: 返回想读取的数据的值
* 说明: 在main.c和key.c文件调用 
******************************************************************************/

INT8U FlashEeprom_ReadByte(INT16U Address)
{
        INT8U Data;
        
        Data = FLASH_ReadByte(Address);
        return Data;
}
3.读一个32位数

先定义一个联合体

union INI32
{
  U32 Data;
  U8 buf[4];
};
typedef union INI32 INT_32;

实现读一个32位数
u32 EEPROM_Read(U32 addr)
{
   INT_32 data;
   data.buf[0]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr);
   data.buf[1]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+1);
   data.buf[2]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+2);
   data.buf[3]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+3);
   return data.Data;
}

4下面是实现一个字节的写和32位的写

void FlashEeprom_WriteByte(INT16U Address,INT8U Data)
{
        FLASH_Unlock(FLASH_MEMTYPE_DATA);
        FLASH_ProgramByte(Address,Data);
        FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
        FLASH_Lock(FLASH_MEMTYPE_DATA);
}

void EEPROM_Write(U32 addr,U32 data)
{
    INT_32 Wdata;
	Wdata.Data=data;
	FLASH_ProgramByte(EEPROM_BASE_ADDR + addr,  Wdata.buf[0]);
	FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
	FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+1,Wdata.buf[1]);
	FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
	FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+2,Wdata.buf[2]);
	FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
	FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+3,Wdata.buf[3]);
	FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);

}

测试程序


int main()
{
  u32 a,b,c;
  a=55;b=33;c=66;
  EEPROM_Write(0x04,a);
  EEPROM_Write(0x08,b);
  EEPROM_Write(0x0c,c);
   a=0;b=0;c=0;
  a= EEPROM_Read(0x04);
  b=EEPROM_Read(0x08);
  c=EEPROM_Read(0x0c);
}


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值