历史上的今天
今天是:2024年09月08日(星期日)
2018年09月08日 | STM8L EEPROM操作读与写
2018-09-08 来源:eefocus
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主频变化时,其等待时间差别较大,使用时应注意,并且需要加入等待超时处理。
史海拾趣
|
RS232串口(COM口)控制(10位)A/D模数转换控制板 本串口控制A/D模数转换控制板具有6路10位(精度±1LSB)高速A/D转换通道,可同时对外部输入的6路模拟量(直流0-5V)进行模数转换,转换后的结果(每通道转换后的结果为2字节数据)通过串口快速输出(默认波特率9600,可定做其它波特率),供电脑上位机 ...… 查看全部问答> |
|
机遇与挑战: “低碳经济”越来越受到众人的认同要实现节能减排,仪器仪表尤其是电能计量仪表和用电自动化管理系统产品具备高智能、网络化、可靠性强的特点 “低碳经济”越来越受到众人的认同,若要实现节能减排的目标,就必须对能源进行精确采集 ...… 查看全部问答> |
|
opengl es eglswapbuffers函数运行报错 [code]while (1) { // If there is a message waiting, handle it if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) &n ...… 查看全部问答> |
|
这个是我的毕业设计题目,我没做过嵌入式程序,甚至对其一点都不了解。题目要求是再Linux平台做一个手机驱动程序,让手机能够通过笔记本电脑用的无限基站上网而不用GPRS。导师只是简单介绍了一下流程:在手机上开发一个程序,通过UART或者RS232连接 ...… 查看全部问答> |
|
最近做数字湿度计时,发现大家对焊接SHT21感到困惑,数据手册上说用回流焊焊接。但是我们是DIY,不可能有回流焊,而且也不方便啊。那么应该怎么焊接呢?大家谈谈。。。统计下SHT21焊接情况?https://bbs.eeworld.com.cn/thread-153603-1-1.html… 查看全部问答> |




