stm8s有自带的eeprom,起始地址是0x4000,终止到哪看手册,因为我用的时候只写一个4字节数据,配置如下:
入参:eeprom偏移地址,写入的数据
void eeprom_write(const unsigned char addr,unsigned long date)
{
asm("sim");
FLASH_CR1_FIX = 1;//编程时间固定为标准编程时间
FLASH_CR2_WPRG = 1;//使能字编程
FLASH_NCR2_NWPRG = 0;/使能字编程
do
{
FLASH_DUKR = 0xAE;
FLASH_DUKR = 0x56;
}
while(!(FLASH_IAPSR_DUL & 1));//等待解锁
unsigned long *p = (unsigned long*)(0x4000 + addr);
*p = date;
//while(!FLASH_IAPSR_EOP & 1);//等待写完成//加上掉电写入不准
FLASH_IAPSR_DUL = 0;//上锁
asm("rim");
}
说明:while(!FLASH_IAPSR_EOP & 1);被我注释掉了,原因如注释所写的那样,我也不知道为什么。然后写完之后记得上锁,要不然会不准。另外就是这里中文手册又出错了,就是do while语句中的那两句给FLASH_DUKR写入密钥,中文手册写反了。
读eeprom就比较简单了,代码如下:
入参:eeprom地址偏移量 出参:相应地址的值*/
unsigned long eeprom_read(const unsigned char addr)
{
return *((unsigned long*)(0x4000 + addr));
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』