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

查看: 10799|回复: 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 &quot;public_include.h&quot;

/*=========================================================
* 函 数 名: uchar f_MCU_UnLock_EEROM(void)
* 功能描述: EEROM解锁
=========================================================*/
uchar f_MCU_UnLock_EEROM(void)
{
        uint iCnt;
        FLASH_CR1|=0x01; //设置为标准编程时间
        if(FLASH_IAPSR&amp;0x08)return true; //已经解锁
        else
        {
                FLASH_DUKR=0xAE;                              
                FLASH_DUKR=0x56;
        }
        while(!(FLASH_IAPSR&amp;0x08))
        {
                iCnt++;
                if(iCnt&gt;=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&amp;=0xf7;
}
回复 支持 反对

使用道具 举报

3

主题

11

回帖

0

蝴蝶豆

新手上路

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

RE:关于stm8单片机EEPROM问题

#define FLASH_PROG_START_ADD ((ulong)0x008000) /*!&lt; Program memory: start address */
#define FLASH_PROG_END_ADD   ((ulong)0x027FFF) /*!&lt; Program memory: end address */
#define FLASH_PROG_BLOCKS_NUMBER          ((uint)1024)     /*!&lt; Program memory: total number of blocks */
#define FLASH_DATA_START_ADD  ((ulong)0x004000) /*!&lt; Data EEPROM memory: start address */
#define FLASH_DATA_END_ADDR   ((ulong)0x0047FF) /*!&lt; Data EEPROM memory: end address */
#define FLASH_DATA_BLOCKS_NUMBER          ((uint)16)       /*!&lt; 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版