EEPROM调试OK:
#define EEP_BASE 0x4000 //STM8S大容量Data EEPROM起始地址
#define EEPROM_Lock() FLASH_IAPSR&=(~0x08)
#define EEPROM_Wait_Read_Over() while(!(FLASH_IAPSR&0x04))
#define EEPROM_Wrover_Clear() FLASH_IAPSR&=(~0x04)
/********** EEPROM操作 **********/
/***********************************************************
函数名:EEPROM_Unclock()
功 能:EEPROM解锁
参 数:无
返回值:无
/**********************************************************/
void EEPROM_Unclock(void)
{
FLASH_CR1 |= 0x00;
FLASH_DUKR = 0xAE;
FLASH_DUKR = 0x56; // 解锁写保护
while(!(FLASH_IAPSR&0x08)); // 等待解锁
}
/***********************************************************
函数名:EEPROM_Write_Char
功 能:向EEPROM写一字节数据操作
参 数:addr --- 地址;
data --- 数据;
返回值:无
/**********************************************************/
void EEPROM_Write_Char(uchar addr,uchar data)
{
*((uchar*)(addr + EEP_BASE)) = data;
}
/***********************************************************
函数名:EEPROM_Write
功 能:EEPROM写操作(一字节完整操作)
参 数:addr --- 地址;
data --- 数据;
返回值:无
/**********************************************************/
void EEPROM_Write(uchar addr,uchar data)
{
EEPROM_Unclock(); //解锁EEPROM
EEPROM_Write_Char(addr,data);//EEPROM写入一字节
EEPROM_Wait_Read_Over(); //等待写完成
EEPROM_Wrover_Clear(); //清除标志
EEPROM_Lock(); //锁住EEPROM
}
EEPROM_Write(0x08,brightness_set);//EEPROM保存背光亮度值
Clk_Init(); //系统时钟初始化
brightness_set = EEPROM_Read(0x08);//读取液晶显示器背光亮度值
Brightness_Set(); //执行背光亮度值调节 |