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

查看: 9321|回复: 6

stm8s eeprom如何在代码中预置数据?

[复制链接]

30

主题

218

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-3-1
发表于 2013-12-31 08:50:06 | 显示全部楼层 |阅读模式
比如我在代码里使用了以下eeprom空间
 // eeprom 存储项定义
__no_init __eeprom unsigned char ee_damp_c;
__no_init __eeprom unsigned char ee_dot_c;
__no_init __eeprom unsigned char ee_default_c;
__no_init __eeprom unsigned char ee_polling_addr;
 
 
在代码中如何初始化预置数据,想在下载代码的时候一同写入eeprom区,可以做到吗?我用的下载器是ST-link v2
仿真平台IAR FOR STM8
 
请大家指点!
回复

使用道具 举报

22

主题

456

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-20
发表于 2013-12-31 09:24:38 | 显示全部楼层

RE:stm8s eeprom如何在代码中预置数据?

1、将你的EEPROM写入数据定义成常量数组。
2、可以实现下载。
   实现有三个方法,一是编写专门的读写EEPROM函数,需要写入解锁命令。二是 利用这三个函数,你既然定义了__eeprom 这个字段,用这三个函数实现下载比较好,可以参考一下相关例程。FLASH_Unlock()FLASH_ProgramByte()FLASH_WaitForLastOperation()
三,实现编程器载入,那样的方式有时会不成功的,所以,用一二方法较好。
回复 支持 反对

使用道具 举报

13

主题

63

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-12-31 19:46:35 | 显示全部楼层

RE:stm8s eeprom如何在代码中预置数据?

void __eeprom_write_many(unsigned short addr_eep,unsigned short size,unsigned short dummy,unsigned short addr_ram)
{
   
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);   
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
   
  for(unsigned short i=0;i
回复 支持 反对

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2013-12-31 20:19:55 | 显示全部楼层

RE:stm8s eeprom如何在代码中预置数据?

#include "stm8s_conf.h"
void __eeprom_write_8(unsigned short addr_eep,unsigned char data)
{
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep, data);
  
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  FLASH_Lock(FLASH_MEMTYPE_DATA);  
}
void __eeprom_write_16(unsigned short addr_eep,unsigned short data)
{
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep,   data/256);
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+1, data%256);
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_Lock(FLASH_MEMTYPE_DATA);  
}
void __eeprom_write_32(unsigned short addr_eep,unsigned long data)
{
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep,   (unsigned char)(data>>24));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+1, (unsigned char)(data>>16));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+2,   (unsigned char)(data>>8));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+3, (unsigned char)(data>>0));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_Lock(FLASH_MEMTYPE_DATA);  
}

void __eeprom_write_many(unsigned short addr_eep,unsigned short size,unsigned short dummy,unsigned short addr_ram)
{
  
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  
  for(unsigned short i=0;i
回复 支持 反对

使用道具 举报

4

主题

224

回帖

0

蝴蝶豆

初级会员

最后登录
2020-7-4
发表于 2013-12-31 22:50:56 | 显示全部楼层

RE:stm8s eeprom如何在代码中预置数据?

手动做一套预置数据的方案。 不要依靠编译器等等。
如果要预置数据,建议在EEPROM中的固定地址存放一个标志,表示EEPROM是否被初始化过,再用一个标志表示EEPROM是否写入了预置数据。
1、如果EEPROM未被初始化,则初始化EEPROM(第一次刷固件时用)
2、如果EEPROM初始化过了,则检测与之数据是否存在,不存在则写入,存在则后续可使用;
3、软件刷新,更新标志。  
可靠性的方案,尽量不依赖编译器,用自己的代码实现方案
回复 支持 反对

使用道具 举报

30

主题

218

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-3-1
 楼主| 发表于 2014-1-7 07:48:43 | 显示全部楼层

RE:stm8s eeprom如何在代码中预置数据?

非常的感谢大家的回复啊,大有裨益!
回复 支持 反对

使用道具 举报

5

主题

28

回帖

0

蝴蝶豆

中级会员

最后登录
2017-5-15
发表于 2017-4-11 11:56:29 | 显示全部楼层
只因为少了FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
这条语句,连续读写出错,搞了几天。
感谢各位前辈
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版