×
嵌入式 > 技术百科 > 详情

stm8 eeprom

发布时间:2020-06-17 发布时间:
|

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++;

  }

}

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?