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

查看: 9337|回复: 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 &quot;stm8s_conf.h&quot;
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&gt;&gt;24));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+1, (unsigned char)(data&gt;&gt;16));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+2,   (unsigned char)(data&gt;&gt;8));
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  
  FLASH_ProgramByte(addr_eep+3, (unsigned char)(data&gt;&gt;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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版