你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 10795|回复: 8

关于stm8单片机EEPROM问题

[复制链接]

3

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-7-8 12:15:29 | 显示全部楼层 |阅读模式
怎么通过C语言读,写STM8单片机的EEPROM内容啊,急!!哪位高人能不能发个例程。要用到哪些寄存器,分别是怎么设置呢?求助,急。。。
woldcow@163.com
回复

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-9-7 08:44:37 | 显示全部楼层

RE:关于stm8单片机EEPROM问题

我也遇到你的问题,希望做过的提供代码,方便大家使用
回复 支持 反对

使用道具 举报

1

主题

36

回帖

0

蝴蝶豆

初级会员

最后登录
2020-5-25
发表于 2009-12-17 00:14:30 | 显示全部楼层

RE:关于stm8单片机EEPROM问题

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

使用道具 举报

1

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-4-3 21:30:42 | 显示全部楼层

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

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

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   窗口可以看到数据是否写进去。
 
 
回复 支持 反对

使用道具 举报

3

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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;
}
回复 支持 反对

使用道具 举报

3

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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 */
回复 支持 反对

使用道具 举报

3

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2010-4-8 11:07:21 | 显示全部楼层

RE:关于stm8单片机EEPROM问题

就样就可以了。后面这个定义是个宏,加到头文件中就可以了
回复 支持 反对

使用道具 举报

0

主题

11

回帖

0

蝴蝶豆

初级会员

最后登录
2019-12-27
发表于 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同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。 

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   窗口可以看到数据是否写进去。
 
 写得倒是简单,但是初学的不知道这其中的工作过程!
 
回复 支持 反对

使用道具 举报

0

主题

8

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-15
发表于 2014-9-19 10:20:52 | 显示全部楼层

RE:关于stm8单片机EEPROM问题

留记号
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版