×
嵌入式 > 技术百科 > 详情

[STM8L]EEPROM操作读与写

发布时间:2025-01-23 发布时间:
|

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

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


  1. #define EEPROM_STARTADDR 0x1000  

     //EEPROM读数据方法


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

  2. {  

  3.     uint16 T=0;  

  4.     uint8 *EEP;  

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

  6.     FLASH_DUKR=0xAE;  

  7.     FLASH_DUKR=0x56;  

  8.     FLASH_CR2=0x00;  

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

  10.     if(T==0xFFFF)return 0;  

  11.     while(Length--){  

  12.         *RxBuffer++=*EEP++;  

  13.     }  

  14.     return 1;  

  15. }  

    //EEPROM读数据方法


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

  2. {  

  3.     uint16 T=0;  

  4.     uint8 *EEP;  

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

  6.     FLASH_DUKR=0xAE;  

  7.     FLASH_DUKR=0x56;  

  8.     FLASH_CR2=0x00;  

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

  10.     if(T==0xFFFF)return 0;  

  11.     while(Lenth--){  

  12.         *EEP++=*RxBuffer++;  

  13.         T=0;  

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

  15.         if(T==0xFFFF)return 0;  

  16.     }  

  17.     FLASH_IAPSR&=~S3;  

  18.     return 1;  

  19. }  

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


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
24GHz雷达检测斜后方接近车辆的车道变更辅助系统