【STM8S】 FLASH与EEPROM读写操作

以下为FLASH操作:

#include "flash.h"
#include "stm8s_flash.h"


void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length)
{
  uint16_t Count=0;	
  for( Count=0 ; Count<length ; Count++ )
  {
    FLASH_ProgramByte_User(Address+Count,DataBuff[Count]);	
  }
}



void FLASH_ProgramByte_User(uint32_t Address, uint8_t Data)		
//将库函数中u16改为u32,否则当地址超过10000H时出错
{
    /* Check parameters */
    assert_param(IS_FLASH_ADDRESS_OK(Address));
    *(PointerAttr uint8_t*) (uint32_t)Address = Data;
}

注:写FLASH前需要解锁   

FLASH_Unlock(FLASH_MEMTYPE_PROG);  //FLASH解锁


以下为EEPROM操作:

#include "EEPROM.h"
#include "stm8s_flash.h"


/*******************************************************************************
* ==EEPROM初始化函数==
* FLASH_DeInit(); --> 复位EEPROM的寄存器值
* FLASH_Unlock(FLASH_MEMTYPE_DATA); --> 解锁 对 Data EEPROM memory 进行操作
* FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); --> 标准编程时间
*******************************************************************************/
void EEPROM_INIT(void)
{
	FLASH_DeInit();
	FLASH_Unlock(FLASH_MEMTYPE_DATA);
	FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
}

/****************************************************************************************
*  Function: Derive_EPWrite                                                                        
*  Object: 写EEPROM
*  输入: 头地址(0~2048)  数据指针  数据长
*  输出: 无                                         
*  备注:  2K EEPROM  不能超过
****************************************************************************************/
void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len)
{
	u8 *p;
	//p指针指向EEPROM 对应的单元
	p = (u8*)0x4000 + Adr;   
	//解锁
	FLASH_Unlock(FLASH_MEMTYPE_DATA);
	//写数据
	for( ; Len > 0; Len--)
	{
			Refresh_WWDG_Window();	//喂狗
			*p++ = *pData++;
			//等待写完成
			while(!(FLASH_GetFlagStatus(FLASH_FLAG_EOP))); 
	} 
	//加锁
	FLASH_Lock(FLASH_MEMTYPE_DATA);
}

/****************************************************************************************
*  Function: Derive_EPRead                                                                         
*  Object: 读EEPROM
*  输入: 头地址(0~2048) 数据存放指针 数据长
*  输出: 无                                         
*  备注:  2K EEPROM
****************************************************************************************/
void Derive_EPRead(u16 Adr, u8 *pData, u16 Len)
{
	u8 *p;
	//p指针指向EEPROM 对应的单元
	p = (u8*)0x4000 + Adr; 
	//解锁
	FLASH_Unlock(FLASH_MEMTYPE_DATA);
	//读数据
	for( ; Len > 0; Len--)
	{
		*pData++ = *p++;
		Refresh_WWDG_Window();	//喂狗
	}
	//加锁EEPROM
	FLASH_Lock(FLASH_MEMTYPE_DATA);
}

 

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yiquhui666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值