第一步:EEPROM介绍
数据EEPROM(DATA)区域可用于存储用户具体项目所需的数据。默认情况下, DATA区域是写保护的,这样可以在主程序工作在IAP模式时防止DATA区域被无意地修改。只有使用特定的MASS密钥才能对DATA区域的写保护解锁(请参考对DATA区域的写操作)。请参考4.4存储器组织结构来了解不同的STM8S MCU的DATA区域大小。
第二步:寄存器说明
第三步:具体实现
/*EEPROM初始化*/
void Eeprom_Init(void)
{
FLASH_CR1 |= 0x01; //编程时间固定位标准编程时间tprog
FLASH_CR2 |= 0x40; //字编程操作被使能
FLASH_NCR2 = 0xBF; //字编程操作被使能
do
{
FLASH_DUKR = 0xAE; // 写入第一个密钥
FLASH_DUKR = 0x56; // 写入第二个密钥 <span style="font-size:18px;color:#ff0000;"><strong>这里和手册是反的</strong></span>
} while((FLASH_IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来
}
/*向EEPROM某一地址写一个8位数据*/
void Eeprom_Write(u16 addr,u8 dat) //EEPROM地址范围0~1023
{
u8 *p;
p = (u8*)(0x4000+addr); // 指针p指向芯片内部的EEPROM第一个单元
*p = dat; // 写入第一个字节
}
/*从EEPROM某一地址读数据,返回一个8位数据*/
u8 Eeprom_Read(u16 addr)
{
u8 *p;
p = (u8 *)(0x4000+addr);
return *p;
}
int main( void )
{
u8 temp;
System_Init(); //系统时钟初始化
Gpio_Init(); //LED指示灯初始化
Eeprom_Init(); //EEPROM初始化
while (1)
{
Eeprom_Write(0,5);
delay_ms(1);
temp = Eeprom_Read(0);
if(temp == 5) //如果读取到的数据时5 则PE5口的LED取反
{
temp = 0; //temp清零
PE_ODR ^= 0x20; //PE5口的LED取反
}
delay_ms(400); //延时400ms
}
}
至此,stm8的EEPROM介绍完毕。是不是操作很简单,在某种程度上比STC单片机的操作还要简单。