野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16001|回复: 1

[分享]分享一个好用的STM8S内部EEPROM读写程序(支持连续读写)

[复制链接]
发表于 2020-8-22 11:21:41 | 显示全部楼层 |阅读模式
如题,来分享一个好用的STM8S内部EEPROM读写程序,以字节方式进行读写操作,像真正的EEPROM一样,用起来简单方便。
实验平台:STM8S105K4T6 + IAR For STM8 v1.31,使用库V2.1.0,另外STM8S105是支持RWW的
EEPROM读写操作使用库函数写的,可能有的人要说了还是用寄存器效率高。其实EEPROM操作使用库效率低不了多少,
并且EEPROM又不是经常去读写,故对整体程序效率影响不会太大。(如果实在计较效率,也可以很方便的改成寄存器方式)
不废话,上代码:
  1. #include "stm8s_eeprom.h"

  2. void EEPROM_Init(void)
  3. {
  4.     FLASH_DeInit();
  5.     FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
  6.     //FLASH_Unlock(FLASH_MEMTYPE_DATA);                     // 解锁EEPROM(由写操作自己完成!!!)
  7. }

  8. uint8_t EEPROM_Write(uint16_t addr, uint8_t *buff, uint16_t len)
  9. {
  10.     uint16_t eeprom_addr;
  11.     uint16_t i;
  12.    
  13.     eeprom_addr = EEPROM_ADDR_BASE + addr;                  // EEPROM地址
  14.     if ((eeprom_addr + len) > (EEPROM_ADDR_BASE + EEPROM_BYTES_SIZE)) return 0; // 地址范围错误
  15.    
  16.     do {
  17.         FLASH_Unlock(FLASH_MEMTYPE_DATA);                   // 解锁EEPROM
  18.     } while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET); // 等待EEPROM解锁成功
  19.    
  20.     for (i=0; i<len; i++) {
  21.         FLASH_ProgramByte(eeprom_addr, buff[i]);            // 写入一字节数据
  22.         eeprom_addr++;
  23.         FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);     // 等待操作完成
  24.     }
  25.    
  26.     FLASH_Lock(FLASH_MEMTYPE_DATA);                         //加锁EEPROM
  27.    
  28.     return 1;
  29. }

  30. uint8_t EEPROM_Read(uint16_t addr, uint8_t *buff, uint16_t len)
  31. {
  32.     uint16_t eeprom_addr;
  33.     uint16_t i;
  34.    
  35.     eeprom_addr = EEPROM_ADDR_BASE + addr;                  // EEPROM地址
  36.     if ((eeprom_addr + len) > (EEPROM_ADDR_BASE + EEPROM_BYTES_SIZE)) return 0; // 地址范围错误
  37.    
  38.     for (i=0; i<len; i++) {
  39.         buff[i] = FLASH_ReadByte(eeprom_addr);              // 读取一字节数据
  40.         eeprom_addr++;
  41.         FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);     // 等待操作完成
  42.     }
  43.    
  44.     return 1;
  45. }
复制代码

实际测试 STM8S105K4T6:

测试对比图.png

测试对比图.png


工程代码包: STM8_EEPROM_V2.rar (270.19 KB, 下载次数: 49)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 18:09 , Processed in 0.030193 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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