STM8内部EEPROM的使用

EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。在以前的单片机系统中,通常都是在单片机外面再扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。现在,很多单片机的公司都推出了集成有小容量EEPROM的单片机,这样就方便了使用,降低了成本,提高了可靠性。STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。

示例程序

/* MAIN.C file
 * 
 * Copyright (c) 2002-2005 STMicroelectronics
 */
#include "stm8s207R8.h"
#include "prohead.h"
/***************************************************************
*********************************/
/********************************************************************************************************
*  Function: Derive_FlashUNLock                                                                        
*  Object: 解锁ROM
*  输入: 无
*  输出: 无                                         
*  备注:  无
********************************************************************************************************/
void Derive_FlashUNLock(void)
{
        do
        {
                FLASH_DUKR = 0xae;                    // 写入第一个密钥
                FLASH_DUKR = 0x56;                    // 写入第二个密钥
        } 
        while(!(FLASH_IAPSR&CHSBIT3));                      // 等待解锁
}

/********************************************************************************************************
*  Function: Derive_EPWrite                                                                        
*  Object: 写EEPROM
*  输入: 头地址(0~1535)  数据指针  数据长
*  输出: 无                                         
*  备注: 1.5K EEPROM  不能超过
********************************************************************************************************/
void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len)
{
        u8 *p;
        //p指针指向EEPROM 对应的单元
        p = (u8*)0x4000 + Adr;   
        //解锁
        Derive_FlashUNLock();
        //写数据
        for( ; Len > ZERO; Len--)
        {
                *p++ = *pData++;
                //等待写完成
                while(!(FLASH_IAPSR&CHSBIT2)); 
        } 
        //加锁
        FLASH_IAPSR &= CLRBIT1;
}

/********************************************************************************************************
*  Function: Derive_EPRead                                                                         
*  Object: 读EEPROM
*  输入: 头地址(0~1535) 数据存放指针 数据长
*  输出: 无                                         
*  备注: 1.5K EEPROM
********************************************************************************************************/
void Derive_EPRead(u16 Adr, u8 *pData, u16 Len)
{
        u8 *p;
        //p指针指向EEPROM 对应的单元
        p = (u8*)0x4000 + Adr; 
        //解锁
        Derive_FlashUNLock();
        //读数据
        for( ; Len > ZERO; Len--)
            *pData++ = *p++;
        //加锁EEPROM
        FLASH_IAPSR &= CLRBIT1;
}
main()
{
        //STM8S 207R8 共有1.5K字节EEPROM
        u8 num[]={0,1,2,3,4,5,6,7,8,9};
        //从EERPOM首地址开始 写入0~9
        Derive_EPWrite(0, num, sizeof(num));
        //从EERPOM首地址开始 读入10个数进num数组
        Derive_EPRead(0, num, sizeof(num));
        //OK
        while (1);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值