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 *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主频变化时,其等待时间差别较大,使用时应注意,并且需要加入等待超时处理。
上一篇:[STM8L]TAB段式LCD液晶驱动程序
下一篇: 意法半导体(ST)与ClevX扩大合作,推出高安全性加密技术平台
推荐阅读最新更新时间:2024-03-16 15:34
设计资源 培训 开发板 精华推荐
- 趣味电子技术史话之通信技术史——科技与人文的结合,传奇故事在这里!
- 看MPLAB® Harmony集成软件框架之学习篇 你来评论我送礼!
- 安森美有奖直播|适用于光储充的SiC及IGBT隔离栅极驱动器方案
- 点评《与Atmel SAM D21/R21的相遇、相识、相知(上)》,赢温暖新春礼
- 下载有好礼!超多精美礼品等您拿!
- 免费申请|兆易创新GD32L233尝鲜体验,开启节能“芯”时代!
- 6月4日上午10:00直播:英飞凌栅极驱动芯片的应用以及安富利对应的解决方案
- 万人学习51单片机
- PSoC4 Cortex-M0开发板免费申请,分享心得赢惊喜大礼!
- 有奖直播报名:TI DLP®技术在汽车行业的创新应用——增强型抬头显示