这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM8S使用寄存器操作内部EEPROM

共7条 1/1 1 跳转至

STM8S使用寄存器操作内部EEPROM

专家
2016-05-08 23:15:44     打赏

下面是使用寄存器操作内部EEPROM的函数,操作FLASH的可自行对照库函数修改即可。



 void Flash_Init(void)
{ 
    FLASH->CR1 = FLASH_CR1_RESET_VALUE;
    FLASH->CR2 = FLASH_CR2_RESET_VALUE;
    FLASH->NCR2 = FLASH_NCR2_RESET_VALUE;
    FLASH->IAPSR &= (u8)(~FLASH_IAPSR_DUL);
    FLASH->IAPSR &= (u8)(~FLASH_IAPSR_PUL);
    (void) FLASH->IAPSR; /* Reading of this register causes the clearing of status flags */
 	  
}

void Flash_Unlock(void)
{
 
    FLASH->DUKR = 0xAE; /* Warning: keys are reversed on data memory !!! */
    FLASH->DUKR = 0x56;
}

void FLASH_ProgramByte(u32 Address,u8 data)
{
    *(char __far *)Address = data;
}

void Flash_Lock(void)
{
    /* Lock memory */
  FLASH->IAPSR &= (u8)0xF7;
}

u8 FLASH_ReadByte(u32 Address)
{
  return (  *(char  __far *)Address);
	 
}
/*
 * Write one byte to the data EEPROM memory.
 */
void eeprom_program_byte(unsigned char __near * dst, unsigned char v)
{
  FLASH_ProgramByte((u32)dst, (u8)v);
}

/*
 * Write one 4-byte long word to the data EEPROM memory.  The address
 * must be 4-byte aligned.
 
void eeprom_program_long(unsigned char __near * dst, unsigned long v)
{
  FLASH_ProgramWord((u32)dst, (u32)v);
}
*/
void eeprom_init(void)
{
  
  
}

/**************************************************************************
 * 函数名:eeprom_BufferWrite
 * 描述  :使用页写命令写多个页的数据到内部eeprom 
 * 输入  :- pBuffer:指向要写入内部eeprom中的数据的指针
 *         - WriteAddr:将写入的eeprom的地址
 *         - NumByteToWrite:要写入eeprom的字节数
 * 调用  :外部调用 
 *************************************************************************/
void eeprom_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)
{

  while (NumByteToWrite--) /* 计数 */
  {   
    FLASH_ProgramByte((u32)WriteAddr,(u8)*pBuffer);  
    pBuffer++;
    WriteAddr++;

  }
  

}
/*******************************************************************************
* 函数名  : eeprom_BufferRead
* 描述    : 从FLASH读取NumByteToRead字节的数据.
* 输入          : - pBuffer : 存放从FLASH读取的数据的缓冲区的指针
*                  - ReadAddr : 从FLASH的该地址处读数据
*                  - NumByteToRead : 要读取的字节数
*******************************************************************************/
void eeprom_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)
{
  while (NumByteToRead--) /* 计数 */
  {
    /* 读一个字节的数据 */
    *pBuffer = FLASH_ReadByte(ReadAddr);
    pBuffer++;
    ReadAddr++;
  }
}


我为什么不直接用库函数操作?!!!

——回复可见内容——




专家
2016-05-08 23:48:57     打赏
2楼
不错的例子。

高工
2016-05-10 00:05:12     打赏
3楼
讨厌你们这种回复可见的人

高工
2016-05-10 00:05:49     打赏
4楼
  吊胃口的

助工
2016-05-10 09:30:30     打赏
5楼

菜鸟
2019-05-03 12:16:51     打赏
6楼

eeprom_init这个初始化没有写呀???


菜鸟
2019-05-07 17:03:30     打赏
7楼

学习 学习 学习


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]