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位数
[html] view plain copy
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);
}
上一篇:STM8单片机的中断优先级
下一篇:stm8 软件模拟IIC驱动PCF8563T,NOKIA5110液晶显示
推荐阅读最新更新时间:2024-03-16 16:03