STM8S103F3--EEPROM

发布者:Serene123最新更新时间:2020-09-23 来源: eefocus关键字:STM8S103F3  EEPROM  存储结构 手机看文章 扫描二维码
随时随地手机看文章

  本文介绍stm8s103f3这款单片机的eeprom的用法。


      EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。在以前的单片机系统中,通常都是在单片机外面再扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。现在,很多单片机的公司都推出了集成有小容量EEPROM的单片机,这样就方便了使用,降低了成本,提高了可靠性。


        1.介绍STM8S103F3的首地址及容量。

        STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。


        stm8s103f3的EEPROM存储结构如下:

clipboard

        由上图可知,EEPROM的大小为0x00427f-0x004000+1=0x280=640bytes。


        2.介绍EEPROM的解保护寄存器

clipboard[1]

        向该寄存器先写入0XAE,然后写入0X56就可以解除解保护。想该寄存器读操作时,会返回0;


        3.FLASH状态寄存器

clipboard[2]

clipboard[3]

    需要注意的是bit3,bit3为EEPROM区域解锁标记,0表示保护使能,1表示保护失效。向FLASH_DUKR中写入解锁数据后通过查看FLASH_IAPSR寄存器的bit3来确定EEPROM区域已经解锁。


        bit2表示编程结束标志。对EEPROM区域进行写操作后需要判断该位来确定已经写操作成功。


        下面设计两个程序程序,第一个程序给EEPROM中的004000H位置写入一个值01H,少写入Flash中。第二个程序先读出004000H位置的值,然后给该值加1,再写入到004000H位置,也即是说每次上电时,004000H位置的值会加1。同时为了观察现象,在第二个程序中设置了一个LED灯,通过灯的亮灭次数来表示当前004000H位置的值。


第一个程序:

 1         #include "iostm8s103f3.h"

 2 

 3 void main()

 4 

 5 {

 6 

 7   unsigned char *p;

 8 

 9   unsigned int i;

10 

11   p = (unsigned char *)0x4000; // 指针p指向芯片内部的EEPROM第一个单元

12 

13   // 对数据EEPROM进行解锁

14 

15   do

16 

17   {

18 

19     FLASH_DUKR = 0xae; // 写入第一个密钥

20 

21     FLASH_DUKR = 0x56; // 写入第二个密钥

22 

23   } while((FLASH_IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来

24 

25   *p=1; // 写入第一个字节

26 

27   while((FLASH_IAPSR & 0x04) == 0); // 等待写操作成功

28 

29 }


第二个程序:


 1  #include "iostm8s103f3.h"

 2  unsigned char ch;

 3  void delay (unsigned int times)

 4  {

 5    unsigned int i,j;

 6    for(j=0;j 7    for(i=0;i<65535;i++);

 8  }

 9  void main()

10  {

11    unsigned char *p;

12    unsigned int i;

13    p = (unsigned char *)0x4000; // 指针p指向芯片内部的EEPROM第一个单元

14    // 对数据EEPROM进行解锁

15     ch=0;

16     PD_DDR = 0x10;

17     PD_CR1 = 0x10;

18     PD_CR2 = 0x00;

19    do

20    {

21      FLASH_DUKR = 0xae; // 写入第一个密钥

22      FLASH_DUKR = 0x56; // 写入第二个密钥

23    } while((FLASH_IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来

24    *p = *p+1; // 写入第一个字节

25    while((FLASH_IAPSR & 0x04) == 0); // 等待写操作成功

26    ch=*p; // 将写入的内容读到变量ch中

27    for(i=0;i28      PD_ODR = 0x00;

29      delay(4);

30      PD_ODR=0X10;

31      delay(4);

32    }

33  }


第二个程序下载完成之后,对开发版进行断电和上电操作,上电后PD4所对应的LED灯就会闪烁,闪烁次数代表*p位置的值的大小。


关键字:STM8S103F3  EEPROM  存储结构 引用地址:STM8S103F3--EEPROM

上一篇:STM8s在利用库配置端口的小问题
下一篇:IAR配置ICF到项目的实现方法

推荐阅读最新更新时间:2024-11-20 01:19

PIC18Fxx单片机内部EEPROM存取程序
#include p18cxxx.h #include p18f6680.h #include usart.h #pragma config OSC=HS #pragma config WDT = OFF void eebf_d( void); void eebf( void); unsigned char out_bz ; unsigned char *buf_d ,*buf ; int j=0 ; //创建接受数组 #pragma idata bigsata unsigned char out ; #pragma idata void eebf( void) //将数据存EEPR
[单片机]
AVR单片机EEPROM的操作
本程序简单的示范了如何使用ATMEGA16的EERPOM EEPROM的简介 EEPROM的写操作 EEPROM的读操作 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器 在打开调试文件到JTAG后, 打开Debug - JTAG ICE Options菜单, 然后在JTAG ICE Properties中点击Dbug页面,将preserve eeprom选项选中。 在每次仿真调试时候,就保护EEPROM内容了。 否则,会按照默认设置擦除EEPROM的内容。 由于定义了EEPROM变量,JTAG调试时会询问是否初始化EEPROM,请选择 EEPROM的数据也可
[单片机]
STM8内部EEPROM的使用详解
1 内存映射 STM8S105集成了多达1K的EEPROM(掉电数据不会丢失)最高可以支持30万次的擦写次数,用户可以将一些数据保存在EEPROM中,具体的memory map如下图所示; 在这里内存一页的大小为64 bytes(1 block), DATA EEPROM的内存地址映射如下图所示; 可以看到,EEPROM的起始地址为0x004000,结束地址为0x00427F,这个在下面编程时会用到,当然具体的大小会因为型号不同而有所差异; 2 程序实现 下面程序基于stm8的标准库,进行实现,相应标准库可以在st官网上下载得到; eeprom_inner.ch #ifndef EEPROM_INNER_H #
[单片机]
STM8内部<font color='red'>EEPROM</font>的使用详解
STM32的I2C-EEPROM已调试成功
万利的I2C-EEPROM例程有些问题,经本人两个昼夜的反复试验,已修改完善。 修改了两个地方,在void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite)写操作函数和void I2C_EE_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)读操作函数体内的开头先要执行一句I2C_EE_WaitEepromStandbyState(); 这样在以后调用写操作函数和读操作函数时就不用执行I2C_EE_WaitEepromStandbyState()了。但上电复位后先要执
[单片机]
基于STM8S微处理器内部EEPROM的数据存储方法
  EEPROM(Electrically Erasable Programmable Read-Only Memory)指的是电子擦除式只读存储器,它是一种非易失的存储器,供电消失后,存储的数据依然保留,要擦除或改写其中的内容只要以电子信号的方式直接操作即可。EEPROM广泛应用于单片机数据存储领域,主要形式是串行I2C总线控制独立EEPROM元器件。随着单片机的集成度越来越高,许多芯片厂家在单片机的内部集成有一定数量的EEPROM存储空间,如Microchip、ST等等。本文首先介绍了比较典型的串行EEPROM和集成EEPROM的单片机并比较了各自的优点与缺点,并在分析单片机数据存储特点的基础上引用实例说明如何采用STM8S内
[单片机]
基于STM8S微处理器内部<font color='red'>EEPROM</font>的数据<font color='red'>存储</font>方法
STM8S EEPROM 操作
STM8S 内置EEPROM,对于很大需要带记忆的产品来说,是个很好的资源,以下是我个人摸索出来的,并且验证OK,大家如需要可放心使用。 #define EEPROMADDR0X000 ((u32)(FLASH_DATA_START_PHYSICAL_ADDRESS)) #define EEPROMADDR0X001 ((u32)(FLASH_DATA_START_PHYSICAL_ADDRESS+1)) #define EEPROMADDR0X002 ((u32)(FLASH_DATA_START_PHYSICAL_ADDRESS+2)) #define EEPROMADDR0X003 ((u32)(FLASH_DAT
[单片机]
单片机模拟I2C总线控制EEPROM读写程序
之前写的EEPROM程序虽然能够软仿成功,但烧到单片机里的时候却不能用,无疑是时序的问题,今天修正了时序,总算硬仿成功了。对照上次的程序可以发现就是添加了头函数: intrins.h ,这样就可以通过 _nop_() 指令较为准确的控制时序。 上次那个问题依然没有解决:就是接收缓冲区的数据是从readbuf 开始的,以这个程序为例: readbuf 中存放0x96 readbuf 中存放0x84 readbuf 中存放0xd5 readbuf 中存放0x63 readbuf 中存放0x7c readbuf 中存放0x8c 其实我是想把收到的数据存放在readbuf ~ 中的,我也不知道为什么结果会这样,有知道的麻烦指教
[单片机]
S3C2440 测试程序(七) IIC实验2--读写EEPROM(软件模拟IIC)
使用S3C2440的GPE14--SCL和GPE15--SDA来软件模拟IIC: 由于不清楚如何像51那样位定义,就特意进行了如下定义: #define IIC_SDA_L (rGPEDAT = rGPEDAT & ~(1 15)) #define IIC_SDA_H (rGPEDAT = rGPEDAT | (1 15)) #define IIC_SCL_L (rGPEDAT = rGPEDAT & ~(1 14)) #define IIC_SCL_H (rGPEDAT = rGPEDAT | (1 14)) 初始化: void IIC_Init() { //GPE15--SDA GPE14--SCL rG
[单片机]
S3C2440 测试程序(七) IIC实验2--读写<font color='red'>EEPROM</font>(软件模拟IIC)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved