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

查看: 6244|回复: 3

【ST公益分享】 STM8 -EEPROM应用

[复制链接]

10

主题

10

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-1
发表于 2011-3-23 23:59:51 | 显示全部楼层 |阅读模式
 
EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。在以前的单片机系统中,通常都是在单片机外面再 扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。现在,很多单片机的公司都推出了集成有小容量EEPROM的单片机,这样就方便了使 用,降低了成本,提高了可靠性。
STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。
下面的实验程序,就是先给EEPROM中的第一个单元004000H写入55H,然后再读到全局变量ch中。
同样还是利用ST的开发工具,生成一个C语言程序的框架,然后修改其中的main.c,修改后的代码如下。
 
//  程序描述:对芯片内部的EEPROM存储单元进行实验
 
#include "STM8S207C_S.h"
 
unsigned char ch;
 
main()
{
  unsigned char *p;
 
  p = (unsigned char *)0x4000;          // 指针p指向芯片内部的EEPROM第一个单元
 
  // 对数据EEPROM进行解锁
  do
  {
    FLASH_DUKR = 0xae;                    // 写入第一个密钥
    FLASH_DUKR = 0x56;                    // 写入第二个密钥
  } while((FLASH_IAPSR & 0x08) == 0);      // 若解锁未成功,则重新再来
   
  *p = 0xaa;                               // 写入第一个字节
  while((FLASH_IAPSR & 0x04) == 0);        // 等待写操作成功
 
  ch = *p;                                 // 将写入的内容读到变量ch中
 
  while(1)
  {
     ;
  } 
}
  这里要注意的是,2个密钥的顺序,与STM8的用户手册上是相反的,如果按照手册上的顺序,就会停留在do…while循环中。具体原因,也不是很清楚,也可能是我拿到的手册(中文和英文的都一样)太旧了,或者是理解有误。
  另外,上面的实验程序中,ch不能为局部变量,否则的话,在调试环境中跟踪ch变量时,显示的结果就不对,通过反汇编,我觉得是编译有问题,当定义成局部变量时,ch = *p的汇编代码如下:
 
main.c:23         ch = *p;                                 // 将写入的内容读到变量ch中
0x80f0    0x7B01          LD    A,(0x01,SP)         LD    A,(0x01,SP)
0x80f2    0x97            LD    XL,A                LD    XL,A
0x80f3    0x1E02          LDW   X,(0x02,SP)         LDW   X,(0x02,SP)
0x80f5    0xF6            LD    A,(X)               LD    A,(X)
0x80f6    0x97            LD    XL,A                LD    XL,A
 
如果将ch定义成全局变量,则汇编代码为:
main.c:22         ch = *p;                                 // 将写入的内容读到变量ch中
0x80ef    0x1E01          LDW   X,(0x01,SP)         LDW   X,(0x01,SP)
0x80f1    0xF6            LD    A,(X)               LD    A,(X)
0x80f2    0xB700          LD    0x00,A              LD    0x00,A
  这一段代码的分析仅供参考,本人使用的开发环境为STVD4.1.0,编译器版本号为:COSMIC的CxSTM84.2.4。
 
 
回复

使用道具 举报

1

主题

73

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-4-9 10:17:45 | 显示全部楼层

RE:【ST公益分享】 STM8 -EEPROM应用

支持,学习了。。。。
回复 支持 反对

使用道具 举报

0

主题

15

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-5-29 12:16:38 | 显示全部楼层

RE:【ST公益分享】 STM8 -EEPROM应用

还不错,STM8就是没有这么的详细讲解
回复 支持 反对

使用道具 举报

0

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
2018-1-2
发表于 2011-6-11 15:39:52 | 显示全部楼层

RE:【ST公益分享】 STM8 -EEPROM应用


好的资料啊,谢谢!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版