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

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

[复制链接]
dwwzl 提问时间:2013-12-31 08:50 /
比如我在代码里使用了以下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
 
请大家指点!
收藏 评论6 发布时间:2013-12-31 08:50

举报

6个回答
fengye5340 回答时间:2013-12-31 09:24:38

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

1、将你的EEPROM写入数据定义成常量数组。
2、可以实现下载。
   实现有三个方法,一是编写专门的读写EEPROM函数,需要写入解锁命令。二是 利用这三个函数,你既然定义了__eeprom 这个字段,用这三个函数实现下载比较好,可以参考一下相关例程。FLASH_Unlock()FLASH_ProgramByte()FLASH_WaitForLastOperation()
三,实现编程器载入,那样的方式有时会不成功的,所以,用一二方法较好。
勒布朗 回答时间: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
有缘于你 回答时间: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
wkuang 回答时间:2013-12-31 22:50:56

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

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

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

非常的感谢大家的回复啊,大有裨益!
konway 回答时间:2017-4-11 11:56:29
只因为少了FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
这条语句,连续读写出错,搞了几天。
感谢各位前辈

所属标签

相似问题

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