STM8S读写内部EEPROM

来源:互联网 发布:手机淘宝店铺添加收藏 编辑:程序博客网 时间:2024/04/30 05:38

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);}


原创粉丝点击