woldcow 发表于 2009-7-8 12:15:29

关于stm8单片机EEPROM问题

怎么通过C语言读,写STM8单片机的EEPROM内容啊,急!!哪位高人能不能发个例程。要用到哪些寄存器,分别是怎么设置呢?求助,急。。。
woldcow@163.com

xhy_axb 发表于 2009-9-7 08:44:37

RE:关于stm8单片机EEPROM问题

我也遇到你的问题,希望做过的提供代码,方便大家使用

zpwang 发表于 2009-12-17 00:14:30

RE:关于stm8单片机EEPROM问题

从STM8的编程手册来看,里面的EEPROM主要是用于加密之类应用的,貌似FLASH被读写保护后EEPROM同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。

t2230510 发表于 2010-4-3 21:30:42

回复:关于stm8单片机EEPROM问题

回复第 3 楼 zpwang于2009-12-16 16:14:30发表:
从STM8的编程手册来看,里面的EEPROM主要是用于加密之类应用的,貌似FLASH被读写保护后EEPROM同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。 

:lol EEPROM读写前要解锁的。这个很简单,在技术文档里讲得很清楚。我用一个宏定义来代表EEPROM单元。
#define  EEPROM_BASE_ADDR     0x4000
#define  ADDRESS(i)       (*(volatile unsigned char *)(EEPROM_BASE_ADDR + i))
读0x4000单元,用 x =  ADDRESS(0); 读0x4001单元,用 x =  ADDRESS(1);。。。。。。。。。。
写0x4000单元,用 ADDRESS(0)  = x; 写0x4001单元,用 ADDRESS(1)  = x; 。。。。。。。。。。
调试时,用  memory   窗口可以看到数据是否写进去。
 
 

woldcow 发表于 2010-4-8 11:05:09

RE:关于stm8单片机EEPROM问题

#include "public_include.h"

/*=========================================================
* 函 数 名: uchar f_MCU_UnLock_EEROM(void)
* 功能描述: EEROM解锁
=========================================================*/
uchar f_MCU_UnLock_EEROM(void)
{
        uint iCnt;
        FLASH_CR1|=0x01; //设置为标准编程时间
        if(FLASH_IAPSR&0x08)return true; //已经解锁
        else
        {
                FLASH_DUKR=0xAE;                              
                FLASH_DUKR=0x56;
        }
        while(!(FLASH_IAPSR&0x08))
        {
                iCnt++;
                if(iCnt>=65500)
                {
                        return false;
                }
        }
        return true;
}
/*=========================================================
* 函 数 名: void f_MCU_WriteByte(uchar ADD,uchar iData)
* 功能描述: 向EEROM写入一个字节
=========================================================*/
void f_MCU_WriteByte(uchar ADD,uchar iData)
{
        ulong Start_ADD;
        Start_ADD=FLASH_DATA_START_ADD+ADD;
        *((@far uchar*)(Start_ADD))= iData;
}
/*=========================================================
* 函 数 名: uchar f_MCU_ReadByte(uchar ADD)
* 功能描述: 向EEROM读出一个字节
=========================================================*/
uchar f_MCU_ReadByte(uchar ADD)
{
        ulong Start_ADD;
        Start_ADD=FLASH_DATA_START_ADD+ ADD;
        return(*((@far uchar*) Start_ADD));
}
/*=========================================================
* 函 数 名: void f_MCU_Lock_EEROM(void)
* 功能描述: EEROM上锁
=========================================================*/
void f_MCU_Lock_EEROM(void)
{
        FLASH_IAPSR&=0xf7;
}

woldcow 发表于 2010-4-8 11:05:47

RE:关于stm8单片机EEPROM问题

#define FLASH_PROG_START_ADD ((ulong)0x008000) /*!< Program memory: start address */
#define FLASH_PROG_END_ADD   ((ulong)0x027FFF) /*!< Program memory: end address */
#define FLASH_PROG_BLOCKS_NUMBER          ((uint)1024)   /*!< Program memory: total number of blocks */
#define FLASH_DATA_START_ADD((ulong)0x004000) /*!< Data EEPROM memory: start address */
#define FLASH_DATA_END_ADDR   ((ulong)0x0047FF) /*!< Data EEPROM memory: end address */
#define FLASH_DATA_BLOCKS_NUMBER          ((uint)16)       /*!< Data EEPROM memory: total number of blocks */

woldcow 发表于 2010-4-8 11:07:21

RE:关于stm8单片机EEPROM问题

就样就可以了。后面这个定义是个宏,加到头文件中就可以了

yangjiawei1223 发表于 2014-6-21 15:59:14

回复:关于stm8单片机EEPROM问题

回复第 4 楼 于2010-04-03 21:30:42发表:
回复第 3 楼 zpwang于2009-12-16 16:14:30发表:
从STM8的编程手册来看,里面的EEPROM主要是用于加密之类应用的,貌似FLASH被读写保护后EEPROM同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。 

:lol EEPROM读写前要解锁的。这个很简单,在技术文档里讲得很清楚。我用一个宏定义来代表EEPROM单元。
#define  EEPROM_BASE_ADDR     0x4000
#define  ADDRESS(i)       (*(volatile unsigned char *)(EEPROM_BASE_ADDR + i))
读0x4000单元,用 x =  ADDRESS(0); 读0x4001单元,用 x =  ADDRESS(1);。。。。。。。。。。
写0x4000单元,用 ADDRESS(0)  = x; 写0x4001单元,用 ADDRESS(1)  = x; 。。。。。。。。。。
调试时,用  memory   窗口可以看到数据是否写进去。
 
 写得倒是简单,但是初学的不知道这其中的工作过程!
 

petter-345073 发表于 2014-9-19 10:20:52

RE:关于stm8单片机EEPROM问题

:):):)留记号
页: [1]
查看完整版本: 关于stm8单片机EEPROM问题