第一步: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单片机的操作还要简单。