EEPROM(Electrically Erasable Programmable Read-Only Memory),电擦除可编程只读存储器。
它是一种可在线电擦除和电写入、掉电后数据不丢失的存储器,在嵌入式系统中应用特别广泛。
它在应用中一般存储用户数据,在系统运行过程中可以随时修改,系统复位之后从里面读取的是修改之后的新数据。

FLASH 存储器又称为闪存(FLASH Memory)。
它结合了 ROM 和 RAM 的优点,既具备EEPROM 可电擦除、掉电不丢失数据的特点,
又因为可以块读写而具备读写速度快的特点。
FLASH相对 EEPROM 来言,成本低廉,我们经常使用的 U 盘就是采用 FLASH 作为存储介质。FLASH在嵌入式系统中应用非常广泛,一般作为程序存储器使用,在系统运行过程中不修改存储在里面的数据, 系统复位之后里面存储的还是最初的数据。 FLASH 实质上也是 EEPROM 的一种。 STM8S 单片机片内集成 FLASH 程序存储器和数据 EEPROM,它们由一组通用寄存器来控制,用户可以通过编程来实现对它们的写入、擦除,还可以通过它们来设置写保护、配置低功耗模式。选项字节 OPTION BYTES 也是它们的一部分。

STM8系列的单片机存储器有3种规格 这里使用的207系列是2048Byte的数据存储空间(EEPROM)

测试程序

#include "stm8s.h"
#include "stm8s_clk.h"
#include "led.h"
#include "server.h"
#include "tim1.h"
#include "stm8s_clk.h"
#include "stm8s_flash.h"void testFlashRW();int main(void){ testFlashRW();while(1);
}void testFlashRW(){u32 add = 0;uint8_t Tx_Buffer[1] = {0};CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);InitUart1((u32)115200, FALSE);FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);FLASH_Unlock(FLASH_MEMTYPE_DATA);add = 0x4000;uint32_t j;uint32_t max_size = 2048;//2056;/*for(j=0; j<max_size; j++){FLASH_ProgramByte(add, j);add++;}*/add = 0x4000;for(j=0; j<max_size; j++){Tx_Buffer[0] = FLASH_ReadByte(add);Uart1SendData( Tx_Buffer, 1);add++;}
}

这里有反复测试过具体的数据存储空间 测试过一个临界值是2056个字节 但是使用2056发现数据末尾添加的8位出现数据不正确的情况 所以可以得出确切存储空间是2048个字节。
读写结果使用了串口输出的形式进行查看数据存储是否正确 可以查看 串口输出的数据testFlashRW.txt

至于存储在FLASH空间中的程序具体是占用多少空间可以通过查看 user\Debug\List\QF-stm8-master.map 看到
程序需要的FLASH空间是 1,969 = 1,482 + 158 + 329, 不到2K的FLASH占用

调用 IS_FLASH_ADDRESS_OK(Address) 接口进行检查地址是否越界也可以看到对应型号的单片机所对应的数据存储器大小

// stm8s_flash.h#define FLASH_PROG_START_PHYSICAL_ADDRESS ((uint32_t)0x008000)#if defined (STM8S208) || defined (STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
#define FLASH_PROG_END_PHYSICAL_ADDRESS   ((uint32_t)0x027FFF)
#define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000)
#define FLASH_DATA_END_PHYSICAL_ADDRESS   ((uint32_t)0x0047FF)
#endif#define IS_FLASH_ADDRESS_OK(ADDRESS)
((((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS)) || \
(((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS)))

可以看出从 FLASH_DATA_START_PHYSICAL_ADDRESS 到 FLASH_DATA_END_PHYSICAL_ADDRESS
就是从 0x004000 到 0x0047FF 刚好是 2048 字节

尝试使用flash空间进行数据存储 但是当程序运行到flash空间并且没有被应用程序使用到的地址时
仍然出现保存数据错误的情况
所以使用flash空间保存数据暂时找不到确切的解决方案

查看源码时替换掉 main.c 文件中的代码运行测试即可 点击查看完成的工程源码

stm8单片机内部存储EEPROM字节读写实例解析相关推荐

  1. pic单片机内部时钟校准c语言,实例讲解PIC单片机的时钟设置

    什么时钟? 首先我们先讲讲什么是时钟.时钟就是单片机的心脏.每跳动一下.整个单片机的各个电路就同步的动作一下.就好像我们做广播体操的时候 广播上喊的节拍1234 2234 3234....然后我们全部 ...

  2. 手把手教你STM8单片机标准库移植

    本节主要内容:完成Lora模块单片机STM8L101F3标准库的移植 STM8l101F3单片机属于是8位单片机,但和传统的51有很大的区别: 1.STM8的内核不一样:  51单片机的内核是传统的8 ...

  3. Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装

    文件存储 前言 文件存储 内存 内部存储 外部存储 内部存储操作 API 读写操作 外部存储操作 公共目录 私有目录 私有文件 私有缓存 文件各种操作封装 前言 众所周知,数据存储在每个应用中都会用到 ...

  4. STM8单片机 PWM无波形输出解决方法

      调试STM8单片机PWM功能的时候,经常会遇到一种情况,就是PWM初始化设置完成之后,程序下载到单片机中,确没有任何波形的输出.有时候代码是下载别的调试好的,但是在自己芯片上就是没有波形输出.这时 ...

  5. pic单片机c语言读eeprom,PIC16F877单片机内部EEPROM读写实例

    ;PIC16F877单片机内部EEPROM读写实例*************************************************************************** ...

  6. pic单片机c语言读eeprom,PIC单片机的EEPROM读写实例及说明

    PIC单片机的EEPROM读写实例及说明 来源:luchaohai 作者:华仔 浏览:1397 时间:2016-08-10 14:18 标签: 摘要: ; PIC单片机的EEPROM读写实例及说明;* ...

  7. pic单片机c语言读eeprom,PIC单片机的EEPROM读写实例

    PIC单片机的EEPROM读写实例及说明 ;**************************************************************************** ; ...

  8. 单片机编程php,STC单片机内部FLASH读写程序(最新整理)

    <STC单片机内部FLASH读写程序(最新整理)>由会员分享,可在线阅读,更多相关<STC单片机内部FLASH读写程序(最新整理)(6页珍藏版)>请在人人文库网上搜索. 1.S ...

  9. STC89C52单片机内部EEPROM驱动

    STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节.读写数据只能按字节操作,擦除数据只能按扇区操作. 由于它掉电不易失的特性,可 ...

  10. android实例教程_Android内部存储示例教程

    android实例教程 Today we will look into android internal storage. Android offers a few structured ways t ...

最新文章

  1. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
  2. linuex查看繁忙_如何用九条命令在一分钟内检查Linux服务器性能?
  3. (原創) 如何讓Linux開機時,不要在圖形介面顯示開機訊息? (OS) (Linux) (CentOS)
  4. 进程知识点,只需这一篇
  5. C# 使用 ValueTasks
  6. SVN 定时 更新代码 Demo
  7. Aurora-------在 MSOffice 内输入 LaTeX 公式的很好用插件
  8. 19-3-1Python的PyCharm编辑器,以及格式化输出、while循环、运算符、编码初识
  9. sap系统搭建教程_SAP基础教程
  10. 超实用的工具、素材、学习网站分享
  11. 最大子段和三种算法实现
  12. 创业型公司遇管理之殇:IPO泡汤高管作鸟兽散
  13. 怎么远程控制linux,Linux远程控制
  14. 目标检测框架网络模型分析(二 双塔奇兵)
  15. 强制性依赖关系和选择性依赖关系
  16. FUNCTION xx.count does not exist. Check the ‘Function Name Parsing and Resolution‘ section in the Re
  17. 我对服务器端技术开发的一点了解
  18. 基于php的学生考勤管理系统
  19. 登录成功后如何在首页获取登录名
  20. 塔望3W消费战略全案|苏蟹阁:重新定义好蟹,大闸蟹的品牌创新

热门文章

  1. 友盟+短视频行业研究
  2. 9点EXCEL计算公式
  3. Tcp滑动窗口协议简介
  4. 网页制作之各种框架简介
  5. js获取屏幕宽度方法大全
  6. ryzen linux 搭配显卡,R7 1700配什么显卡?AMD Ryzen7 1700搭配显卡推荐 (全文)
  7. 苹果手机怎么投屏到电脑上?屏幕镜像即可投屏
  8. 飞鸟尽,良弓藏;狡兔死,走狗烹。
  9. EPLAN电气设计入门学习笔记
  10. 一篇文章教会你用Python抓取抖音App热点数据