欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写

发布时间:2023/12/4 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

原标题:[STM8L]EEPROM操作读与写

带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了。

不同型号的STM8L器件其内部默认划分的EEPROM区域都是从0x1000地址开始,以下为STM8LXX的EEPROM读写例:

#define EEPROM_STARTADDR 0x1000

//EEPROM读数据方法

uint8 EEPROM_Read(uint16 Addr,uint8 *RxBuffer,uint8 Length)

{

uint16 T=0;

uint8 *EEP;

EEP=(uint8 *)(EEPROM_STARTADDR+Addr);

FLASH_DUKR=0xAE;

FLASH_DUKR=0x56;

FLASH_CR2=0x00;

while((!(FLASH_IAPSR&S3))&(T<0xFFFF))T++;

if(T==0xFFFF)return 0;

while(Length--){

*RxBuffer++=*EEP++;

}

return 1;

}

//EEPROM读数据方法

uint8 EEPROM_Write(uint16 Addr,uint8 *RxBuffer,uint8 Lenth)

{

uint16 T=0;

uint8 *EEP;

EEP=(uint8 *)(EEPROM_STARTADDR+Addr);

FLASH_DUKR=0xAE;

FLASH_DUKR=0x56;

FLASH_CR2=0x00;

while((!(FLASH_IAPSR&S3))&(T<0xFFFF))T++;

if(T==0xFFFF)return 0;

while(Lenth--){

*EEP++=*RxBuffer++;

T=0;

while((!(FLASH_IAPSR&S2))&(T<0xFFFF))T++;

if(T==0xFFFF)return 0;

}

FLASH_IAPSR&=~S3;

return 1;

}

STM8LXX核对数据,程序存储器进行统一编址,所以可以直接对EEPROM进行读写,之间需要进行解锁操作,通过FLASH_DUKR完成,写入特定序列的密码即可,由于EEPROM的写入速度较慢,所以需要进行等待,判断其上一步工作是否已完成。实测发现,当CPU主频变化时,其等待时间差别较大,使用时应注意,并且需要加入等待超时处理。

责任编辑:

总结

以上是生活随笔为你收集整理的eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。