搜索
bottom↓
回复: 83

发现STM8的eeprom非常之好用,贴出程序供参考!

  [复制链接]

出0入0汤圆

发表于 2013-11-14 21:28:35 | 显示全部楼层 |阅读模式
之前看某教程说,写入的时候只能按块写,但是实际使用当中发现并非如此,可以任意读写某一地址内的数据,非常简单的几句话就可以实现eeprom的读写操作,而且容量还比较大
分享一下代码:
eeprom使用前一定先初始化,两行代码搞定。此程序实现的是往特定地址内写入字节,并从特定地址读出字节,显示在LCD上
void Flash_eeprom_Init() //初始化
{
    FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
    FLASH_Unlock(FLASH_MEMTYPE_DATA);//解锁
}

void Flash_Test()
{
    uchar k=0;
    uchar buffer[15];
    uchar value[15]="hello world";
   
    for(k=0;k<15;k++)
    {
        FLASH_ProgramByte(FLASH_DATA_START_PHYSICAL_ADDRESS+k,value[k]);
        FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);//一定要执行
    }
    for(k=0;k<15;k++)
    {
        buffer[k]=FLASH_ReadByte(FLASH_DATA_START_PHYSICAL_ADDRESS+k);
        FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);//一定要执行
    }
   
   LCD_PutString(100,200,buffer,CCOLOR,BCOLOR);
   
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-11-14 21:42:19 | 显示全部楼层
Mark

出0入4汤圆

发表于 2013-11-14 22:27:28 | 显示全部楼层
写入之前要不要擦除?

出0入0汤圆

发表于 2013-11-14 22:29:27 | 显示全部楼层
tarzar 发表于 2013-11-14 22:27
写入之前要不要擦除?

STM8 是真正的EEPROM ,和24CXXX 一样,是字节操作的,字节直接写就OK,使用非常方便。

出0入0汤圆

发表于 2013-11-14 22:43:40 | 显示全部楼层
感谢LZ分享

出0入0汤圆

发表于 2013-11-14 23:07:08 | 显示全部楼层
STM8的EEPROM一直如此方便。

出0入663汤圆

发表于 2013-11-14 23:34:42 | 显示全部楼层
STM8不像是真正的EEPROM,虽然可以按字节写入,但依然要擦除,而且最小擦除单位是4字节,只不过硬件把复杂的操作时序屏蔽掉了而已。
按照手册的描述,DATA区单字节写入会先判断整个字(4字节)是否全空,如果空就直接写入,非空则会自动保存字的内容,再擦除整个字,最后回写修改后的字。
也就是说,如果一个一个字节地写DATA区,实际消耗掉的写入寿命要乘以4。

出0入0汤圆

发表于 2013-11-15 00:09:26 | 显示全部楼层
不愧为妇科圣手

出0入0汤圆

发表于 2013-11-15 02:21:03 来自手机 | 显示全部楼层
不愧为妇科圣手+1

出0入0汤圆

发表于 2013-11-15 02:51:35 | 显示全部楼层
解决块操作速度将会更加方便,楼主的操作只是玩玩。

出0入0汤圆

发表于 2013-11-15 03:08:28 | 显示全部楼层
还有一个很重要的问题需要注意

STM8在写入EEPROM的时候,会停掉内核,所以有些中断处理不好的话,会出错

比如UART

出0入663汤圆

发表于 2013-11-15 03:43:21 | 显示全部楼层
STM32_Study 发表于 2013-11-15 03:08
还有一个很重要的问题需要注意

STM8在写入EEPROM的时候,会停掉内核,所以有些中断处理不好的话,会出错

只是低端的003/103之类吧,高端的有RWW,不会停。

出0入0汤圆

发表于 2013-11-15 03:52:53 | 显示全部楼层
gzhuli 发表于 2013-11-15 03:43
只是低端的003/103之类吧,高端的有RWW,不会停。

哦,具体型号还有分别啊?这个没注意

我用的是STM8S105K4T6C,会有这个现象

出0入0汤圆

 楼主| 发表于 2013-11-15 08:26:30 | 显示全部楼层
tarzar 发表于 2013-11-14 22:27
写入之前要不要擦除?

我开始的时候是全写了0进去,没有擦除

出0入0汤圆

 楼主| 发表于 2013-11-15 08:27:59 | 显示全部楼层
gzhuli 发表于 2013-11-14 23:34
STM8不像是真正的EEPROM,虽然可以按字节写入,但依然要擦除,而且最小擦除单位是4字节,只不过硬件把复杂 ...

解释的很详细,学习了

出0入0汤圆

 楼主| 发表于 2013-11-15 08:30:25 | 显示全部楼层
zyw19987 发表于 2013-11-15 02:51
解决块操作速度将会更加方便,楼主的操作只是玩玩。

进行块操作的时候速度会加快很多吗?

出0入0汤圆

发表于 2013-11-15 08:32:03 | 显示全部楼层
mark一下,刚好在学STM8

出0入0汤圆

发表于 2013-11-15 08:32:10 | 显示全部楼层
只能写几百次  几百次

出0入0汤圆

发表于 2013-11-15 08:32:21 | 显示全部楼层
mark一下,刚好在学STM8,谢谢楼主啦

出0入0汤圆

发表于 2013-11-15 08:33:18 | 显示全部楼层
MARK,学习一下!!

出0入0汤圆

发表于 2013-11-15 08:33:25 | 显示全部楼层
这个必须标记,最近正在玩STM8

出0入0汤圆

发表于 2013-11-15 08:40:19 | 显示全部楼层
现在在51上写程序,实在是太怀念当初用STM8L的感觉了,4K的RAM用起来多自在。

出0入0汤圆

发表于 2013-11-15 08:47:45 | 显示全部楼层
涨知识了~~

出0入0汤圆

 楼主| 发表于 2013-11-15 09:14:33 | 显示全部楼层
jcrorxp 发表于 2013-11-15 08:32
只能写几百次  几百次

几百次?不是吧。。。我看文档里写的是300K啊

出0入0汤圆

发表于 2013-11-15 09:22:05 | 显示全部楼层
确实长知识了

出0入4汤圆

发表于 2013-11-15 09:25:24 | 显示全部楼层
7楼的解释得非常好,学习了

出0入0汤圆

发表于 2013-11-15 09:43:23 | 显示全部楼层
很方便,我是直接当内存来使用的

出0入0汤圆

发表于 2013-11-15 11:44:51 | 显示全部楼层
当内存来用还是夸张了点,地址分配上有点麻烦,我用的是一个大的结构体,然后用offsetof(s,m)宏来查找偏移量
不过结构体的大小貌似只能达到无符号整形所能容纳的数量,51的话是65536 stm8应该也是这个,不过对EEP来说也够了

出0入0汤圆

发表于 2013-11-15 11:53:32 | 显示全部楼层
都流行   flash  当 块eeprom

出0入8汤圆

发表于 2013-11-15 13:18:49 来自手机 | 显示全部楼层
用STVD直接定义数据在EEPROM,根本就不需要自己学函数,直接定义就行了,是可以单个字节写的,这个写EEPRR0M时,内核会停2MS左右,反正我用STVD是这样,跟单片机高端低端没关系!

出0入0汤圆

发表于 2013-11-15 13:44:43 | 显示全部楼层
我的STM8..出厂时只是烧录加密的ID号.
一直用,.没问题.
比AVR强多了

出0入0汤圆

发表于 2013-11-15 14:01:38 | 显示全部楼层
不考虑寿命的情况下,这个不错哦.

出0入12汤圆

发表于 2013-11-15 14:14:27 | 显示全部楼层
和AT24还是有差距啊

出0入0汤圆

发表于 2013-11-15 14:36:23 | 显示全部楼层
学习了。
            
        

出0入0汤圆

发表于 2013-11-15 14:37:02 | 显示全部楼层
mark , thanks a lot

出0入0汤圆

发表于 2013-11-15 18:27:24 来自手机 | 显示全部楼层
全0才可以,看7楼

出0入0汤圆

发表于 2013-11-15 18:59:35 | 显示全部楼层
MARK!!!!!!!

出0入0汤圆

发表于 2014-1-17 14:50:04 | 显示全部楼层
gzhuli 发表于 2013-11-14 23:34
STM8不像是真正的EEPROM,虽然可以按字节写入,但依然要擦除,而且最小擦除单位是4字节,只不过硬件把复杂 ...

mark                  

出0入0汤圆

发表于 2014-1-17 17:19:54 | 显示全部楼层
好东西!

出0入0汤圆

发表于 2014-1-17 19:06:25 | 显示全部楼层
mark                          

出0入0汤圆

发表于 2014-1-25 17:43:09 | 显示全部楼层
长见识了。

出0入0汤圆

发表于 2014-1-28 22:52:29 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-1-29 17:05:03 | 显示全部楼层
mark,日后必然会用的到的~感谢分享~~学习了

出0入0汤圆

发表于 2014-1-30 02:44:36 | 显示全部楼层
标记下,用得着。

出0入0汤圆

发表于 2014-2-2 11:05:50 | 显示全部楼层
学习了,刚刚开始使用STM8

出0入0汤圆

发表于 2014-2-3 19:59:18 来自手机 | 显示全部楼层
mtswz.213 发表于 2013-11-15 13:18
用STVD直接定义数据在EEPROM,根本就不需要自己学函数,直接定义就行了,是可以单个字节写的,这个写EEPRR0 ...

求例子。是否用eeprom关键字定义变量然后像普通变量那样使用就可以了?

eeprom  unsigned  char  data;
void test()
{
data=0x8F;
}
可以直接这样用?是的话就方便多了啊。

出0入0汤圆

发表于 2014-2-3 21:58:46 | 显示全部楼层
非常实用,谢谢分享

出0入0汤圆

发表于 2014-3-26 23:48:10 | 显示全部楼层
MARK!!!!!!

出0入0汤圆

发表于 2014-4-9 14:54:15 | 显示全部楼层
第一次听说会停掉内核,2ms,以后我要注意了。

出0入0汤圆

发表于 2014-4-11 10:28:20 | 显示全部楼层
请教如何往EEPROM中写入指定的数据,谢谢

出0入0汤圆

发表于 2014-4-11 10:31:14 | 显示全部楼层
好东西,Mark

出0入0汤圆

发表于 2014-8-21 00:47:53 | 显示全部楼层
好东西,Mark

出0入0汤圆

发表于 2014-8-21 08:18:22 | 显示全部楼层
stm8居然还有这个好处。不错。

出0入0汤圆

发表于 2014-8-21 08:57:01 | 显示全部楼层
需要注意一点,有些EEprom没有写同时读功能,这意味着,写eeprom时程序是停止的。。。。。

出0入0汤圆

发表于 2014-8-21 09:08:32 | 显示全部楼层

mark,日后必然会用的到的~感谢分享~~学习了

出0入0汤圆

发表于 2014-8-21 11:39:00 | 显示全部楼层

请问下大家,STM8写FALHS的时间好长啊,我用的是STMS003,居然长达5.2ms,不知是我的错误还是它本来就那么慢,请问大

家有没有什么好的意见?

出0入0汤圆

发表于 2014-8-22 08:56:09 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-8-22 11:48:16 | 显示全部楼层
好 帖子, 回帖,赞一个

出0入0汤圆

发表于 2014-8-22 11:49:58 | 显示全部楼层
最近也在用,操作起来是很方便。但产品中会偶尔出现EPROM数据突然丢失的情况。

出0入8汤圆

发表于 2014-8-22 15:40:48 | 显示全部楼层
MARK~

出0入0汤圆

发表于 2014-10-19 23:20:29 | 显示全部楼层

出0入0汤圆

发表于 2014-10-19 23:25:10 | 显示全部楼层
mark!!!

出0入85汤圆

发表于 2014-10-19 23:37:35 | 显示全部楼层
gzhuli 发表于 2013-11-14 23:34
STM8不像是真正的EEPROM,虽然可以按字节写入,但依然要擦除,而且最小擦除单位是4字节,只不过硬件把复杂 ...

正解!!

出160入67汤圆

发表于 2014-10-20 08:37:35 | 显示全部楼层
STM8的eeprom非常之好用,备用

出0入0汤圆

发表于 2014-10-20 08:55:00 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2014-10-20 09:04:32 | 显示全部楼层
mark,等我学习stm8时再看!

出0入0汤圆

发表于 2014-10-20 09:09:02 | 显示全部楼层
收藏备用,感谢分享,手里有片stm8,试试看

出0入0汤圆

发表于 2015-3-5 10:53:09 | 显示全部楼层
用003芯片,读取时持行FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);无法退出

出0入0汤圆

发表于 2015-4-2 13:59:36 | 显示全部楼层
如何去测量它会停掉内核呢?

出0入0汤圆

发表于 2015-4-2 14:01:59 | 显示全部楼层
收藏了,正好需要用到

出0入0汤圆

发表于 2016-10-19 13:13:27 | 显示全部楼层
Sniperrabbit 发表于 2014-2-3 19:59
求例子。是否用eeprom关键字定义变量然后像普通变量那样使用就可以了?

eeprom  unsigned  char  data;

求解 这样是否可行?我看官方例程给的这个写法,再看看大家说的,我有点糊了~~

volatile __eeprom __no_init char  eep_u8;
volatile __eeprom __no_init short eep_u16;
volatile __eeprom __no_init long  eep_u32;

volatile  __no_init char  ram_u8;
volatile  __no_init short  ram_u16;
volatile  __no_init long  ram_u32;

void main( void )
{
  eep_u8=123;
  eep_u16=12345;
  eep_u32=123456789;
  
  ram_u8=eep_u8;
  ram_u16=eep_u16;
  ram_u32=eep_u32;
   
  while(1);

}

出0入17汤圆

发表于 2016-10-19 13:30:27 | 显示全部楼层
kation122 发表于 2013-11-14 22:29
STM8 是真正的EEPROM ,和24CXXX 一样,是字节操作的,字节直接写就OK,使用非常方便。 ...

应该不是真正的eeprom,操作内部eeprom的时候单片机就停止了,连中断也是。

出0入0汤圆

发表于 2016-10-19 21:53:12 | 显示全部楼层
很喜欢STM8的单片机,价廉物美

出0入0汤圆

发表于 2016-10-26 10:36:09 | 显示全部楼层
谢谢分享,很实用

出0入0汤圆

发表于 2016-10-26 12:27:27 | 显示全部楼层
不好的地方就是在写的时候,中断不能进去。基本满足要求。

出0入0汤圆

发表于 2017-9-16 09:32:34 | 显示全部楼层
改天测试一下72楼的例子,正要用呢

出0入0汤圆

发表于 2019-4-28 10:21:49 | 显示全部楼层
学习学习,感谢。

出0入0汤圆

发表于 2019-4-29 09:00:51 | 显示全部楼层
>很喜欢STM8的单片机,价廉物美
It sounds great.

出0入0汤圆

发表于 2019-4-29 10:45:06 来自手机 | 显示全部楼层
内部统一总线,写入时如果其他外围正占用总线,比如DMA,要死机的

出0入0汤圆

发表于 2019-4-29 17:28:55 | 显示全部楼层
谢谢 收下了

出0入0汤圆

发表于 2019-4-29 21:26:23 | 显示全部楼层
Thank you !!!

出0入0汤圆

发表于 2019-4-30 07:45:17 | 显示全部楼层
stm8 eeprom mark

出0入0汤圆

发表于 2019-5-9 01:22:09 | 显示全部楼层
It looks more like Flash memory.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-26 21:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表