[STM8L]EEPROM操作读与写
发布时间:2020-12-15 06:37:17 所属栏目:百科 来源:网络整理
导读:??? STM8L带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了。 ??? 不同型号的STM8L器件其内部默认划分的EEPROM区域都是从0x1000地址开始,以下为STM8LXX的EEPROM读写例: #define EEPROM_STARTADDR 0x
??? STM8L带有片上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 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主频变化时,其等待时间差别较大,使用时应注意,并且需要加入等待超时处理。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |