stm8 eeprom

这里写代码片
void EEPROOM_Configuration(void)
{
 FLASH_DeInit();
 /* Define flash programming Time*/
 FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
 /* Unlock Data memory */
 FLASH_Unlock(FLASH_MEMTYPE_DATA); 
}
写一位数据
FLASH_ProgramByte(0x4000,0xaa);//写0xaa数据到0x4000地址
读一位数据
read_data=FLASH_ReadByte(0x4000);//读取0x4000地址上的数据
这里写代码片
#define EEPROM_ADDR               0x4020        //EEPROM编程地址
#define BUF_SIZE                  10             //BUF长度
uint8_t WriteBuf[BUF_SIZE] = {'5', '6', '7', '8', '9','4', '3', '2', '1', '0' };

uint8_t ReadBuf[BUF_SIZE];
void EEPROM_Initializes(void)
{
  //FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
  FLASH->CR1 &= (uint8_t)(~0x01);
  FLASH->CR1 |= (uint8_t)0x00;
}

void EEPROM_WriteNByte(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t nByte)
{
 // FLASH_Unlock(FLASH_MEMTYPE_DATA);//0xF7
  // 对数据EEPROM进行解锁
do

{

FLASH->DUKR = 0xae; // 写入第一个密钥

FLASH->DUKR = 0x56; // 写入第二个密钥

} while((FLASH->IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来

  asm("nop");
  while(FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
  asm("nop");
  while(nByte--)
  {
    FLASH_ProgramByte(WriteAddr, *pBuffer);
    WriteAddr++;
    pBuffer++;
    FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
    asm("nop");
  }
  //FLASH_Lock(FLASH_MEMTYPE_DATA);
   /* Lock memory */
  FLASH->IAPSR &= 0xF7;
}
void EEPROM_ReadNByte(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t nByte)
{
  while(nByte--)
  {
    *pBuffer = FLASH_ReadByte(ReadAddr);
    ReadAddr++;
    pBuffer++;
  }
}

猜你喜欢

转载自blog.csdn.net/xiyancsdn/article/details/82252312
今日推荐