STM8S学习05——EEPROM读写操作C语言程序

发布者:tnzph488最新更新时间:2018-07-17 来源: eefocus关键字:STM8S  EEPROM  读写操作 手机看文章 扫描二维码
随时随地手机看文章

/*
这两天项目开发中,用到STM8的EEPROM功能,几个数据要掉电保存,在网上也查了一下EEPROM操作,发现网上出现的问题主要有两点:
1、EEPROM读写不成功;
2、EEPROM读写的时间太长;


看了一下ST的库函数,自己测试了一下,没有发现什么问题,比较正常;在读写EEPROM期间,也有动态扫描LED数码管,没有发现数码管有闪烁。


操作过程中:
1、开发平台:STM8S105K4T6 IAR6.3 ST库版本 V2.1.0
2、操作EEPROM,使用到的库函数:
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
  FLASH_ProgramByte(FLASH_DATA_START_PHYSICAL_ADDRESS + dLocal_Addr,dLocal_Data);
  FLASH_Lock(FLASH_MEMTYPE_DATA);
  FLASH_ReadByte(FLASH_DATA_START_PHYSICAL_ADDRESS + dLocal_Addr)
3、自己封装了3个函数:测试通过
       void MEEPROM_Init(void);//用于第一次上电及上电初始化
       void MEEPROM_WriteByte(u16 dLocal_Addr,BYTE dLocal_Data);//写一个数据到EEPROM中
       BYTE MEEPROM_ReadByte(u16 dLocal_Addr);//从EEPROM中,读取一个字节的数据
    4、整个函数包:一个头文件,一个.C函数体文件
*/


/********************** 系统变量及头文件 *********************************/
#ifndef __A20_EEPROM_CON_H
#define __A20_EEPROM_CON_H


//--EEPROM中存储数据地址的分配----------------------------------------
#define MACOR_EEADDR_SYSINT     0
#define MACOR_EEADDR_DIPMODE    1


void MEEPROM_Init(void);
void MEEPROM_WriteByte(u16 dLocal_Addr,BYTE dLocal_Data);
BYTE MEEPROM_ReadByte(u16 dLocal_Addr);


#endif




/**********************
STM8内部EEPROM读写程序
***********************/
#include "stm8s.h"
#include "A00_main.h"


/********************************************************************
****1.EEPROM数据初始化
*********************************************************************/
void MEEPROM_Init(void)
{
  BYTE dLocal_1;
  FLASH_DeInit();
  dLocal_1 = MEEPROM_ReadByte(MACOR_EEADDR_SYSINT);
  if(dLocal_1 == 0xAA) //EEPROM区有初始化
  {
//时钟显示模式相关初始化
dSYS_DipMode = MEEPROM_ReadByte(MACOR_EEADDR_DIPMODE);
if(dSYS_DipMode == 1) //进入动态显示
{
 dClock_RollNUM = 0;
 dClock_RollTmr = 0;
 str_SysClock.dClock_SetBit = 0;
 MClock_Sec_Dot_OnOff(DISABLE);
    }
else //进入时分显示
{
 MClock_Sec_Dot_OnOff(ENABLE);
 str_SysClock.dClock_SetBit = 3;
    }
  }
  else //初次上电,EEPROM区需要初始化
  {
    //时钟显示模式相关初始化
dSYS_DipMode = 0;
    MClock_Sec_Dot_OnOff(ENABLE);
    str_SysClock.dClock_SetBit = 3;


    MEEPROM_WriteByte(MACOR_EEADDR_SYSINT,0xAA);
    MEEPROM_WriteByte(MACOR_EEADDR_DIPMODE,dSYS_DipMode);
  }
  return;
}


/*******************************************************************************
****2.EEPROM中写入一个字节
****  dLocal_Addr:EEPROM中的地址,从0开始,在函数写时,加入了初始地址 FLASH_DATA_START_PHYSICAL_ADDRESS
****              当前EEPROM空间为:0x4000--0x43FF;该参量的取值范围:0 - 0x3FF
****  dLocal_Data:要写入EEPOM中的数据
*******************************************************************************/
void MEEPROM_WriteByte(u16 dLocal_Addr,BYTE dLocal_Data)
{
  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
  FLASH_ProgramByte(FLASH_DATA_START_PHYSICAL_ADDRESS + dLocal_Addr,dLocal_Data);
  FLASH_Lock(FLASH_MEMTYPE_DATA);
  return;
}
/*******************************************************************************
****3.从EEPROM中读取一个字节
****  dLocal_Addr:EEPROM中的地址,从0开始,在函数写时,加入了初始地址 FLASH_DATA_START_PHYSICAL_ADDRESS
****              当前EEPROM空间为:0x4000--0x43FF;该参量的取值范围:0 - 0x3FF
*******************************************************************************/
BYTE MEEPROM_ReadByte(u16 dLocal_Addr){
    BYTE dLocal_1;
    dLocal_1 = FLASH_ReadByte(FLASH_DATA_START_PHYSICAL_ADDRESS + dLocal_Addr);
    return dLocal_1;
}

关键字:STM8S  EEPROM  读写操作 引用地址:STM8S学习05——EEPROM读写操作C语言程序

上一篇:EEPROM读写操作常见的陷阱
下一篇:STC单片机片内EEPROM的读写

推荐阅读最新更新时间:2024-03-16 16:09

[51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC _ :i2c.c 1 /*----------------------------------------------- 2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器 4 周期,即晶振频率要小于12MHZ) 5 ------------------------------------------------*/ 6 #include i2c.h 7 #define _Nop() _nop_() //定
[单片机]
stm8s开发(七) SPI的使用:SPI主机通信!
  科普SPI:是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别是:SCK(时钟)、MOSI(主机发送数据)、MISO(主机接收数据)、NSS(片选),其中NSS的片选信号,大部分情况下我们使用的是软件NSS,即为使用一个GPIO进行软件控制片选。值得注意的是,其中SPI有4中模式:分别是空闲时SCLK的电平高低、MISO采样时第12个变化沿。   stm8s的SPI结构如下图,      如果用形象的比喻的话:SCK像一个发条齿轮,只有当发条齿轮转动的时候(SCK输出8个时钟),MOSI才能将1Byte的数据发送出去,同时,MISO将1Byte的数据接收回来。   使用SPI无非就一个初
[单片机]
<font color='red'>stm8s</font>开发(七) SPI的使用:SPI主机通信!
stm8s开发(五) TIMER的使用:定时!
STM8S提供三种类型的TIM 定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄存器映射,相同的基本功能)。 使用定时可以确定一个时间片,方便控制发送速率,采样速率,等等一些对时间要求比较高的任务,而这些操作可以放入定时器中断里面执行。这次的例子,定时1s,让LED灯翻转一次,达到2s闪烁一次的效果。由于定时操作简单,我们使用基本定时器:TIMER4 void Init_Timer4(void) { //128分频 256计数,在16MHz下是2
[单片机]
<font color='red'>stm8s</font>开发(五) TIMER的使用:定时!
STM8s 定时器2使用
简介:最近开始使用stm8s103k单片机,今天记录一下它的定时器2的使用。首先需要说明一下,stm8s的中午手册里面写着TIM2 16位向上计数,这个是错误的。 stm8s定时易于使用,首先设定定时器的时钟频率,知道了定时器的时钟周期T,那么定时时间Tn就确定了,即 Tn = T * ARR(自动装载数据)。 程序如下: 1、单片机时钟设定: //fmaster=fcpu=2MHz CLK_ECKR=0x00; CLK_ICKR=0x01; CLK_CMSR=0xe1; CLK_SWR=0xe1; CLK_CKDIVR=0x18; 2、定时器TIM2初始化 //定时器2初始化fmast
[单片机]
STM8S单片机入门2(关机模式开关机按钮)
开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。 这部分内容就讲述如何在STM8S上实现一键式的开关机功能。开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模
[单片机]
<font color='red'>STM8S</font>单片机入门2(关机模式开关机按钮)
如何利用STM8S单片机实现一键式的开关机功能
开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。 这部分内容就讲述如何在上实现一键式的开关机功能。开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的
[单片机]
如何利用<font color='red'>STM8S</font>单片机实现一键式的开关机功能
STM8S GPIO模拟I2C的底层代码
底层代码 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 GPIO初始化设置 这颗STM8S上,具有真·开漏功能的引脚是PB4和PB5,这两个引脚也正是片上I2C外设的默认引脚。端口设置如下: PB4 :I2C的SCL时钟线,开漏输出模式 PB5 :I2C的SDA数据线,开漏输出模式 SCL和SDA初始化时,推荐选用高阻态输出 /** * @brief I2C端口初始化 * @param None * @retval None */ void I2C_GPIO_Init(void) {
[单片机]
MCU为工业和汽车设计师扩展8位空间
2008 年 4 月 28 日 ,随着企业的功率预算不断紧缩,而嵌入式内容需求却在日益增加,企业对高度集成、高性能微控制器( MCU )的需求成为必然。为了满足工业和汽车市场的这一需求,飞思卡尔近日为其 S08D 系列增加了强大的新成员,该新成员具有卓越的 8 位性能和片上功能。 飞思卡尔高度集成的 9S08DZ128 MCU 内置控制器区域网络( CAN )接口、电子可擦除可编程只读存储器( EEPROM )和片上仿真 / 调试工具。嵌入式 CAN 接口为众多汽车和工业控制应用提供了理想连通性解决方案。而嵌入式 EEPROM 则通过实现轻松地数据写入和擦除,提高了系统设计灵活性,消除了外部串行 EEPROM 。具有
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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