历史上的今天
今天是:2024年09月16日(星期一)
2019年09月16日 | STM8S学习05——EEPROM读写操作C语言程序
2019-09-16 来源:eefocus
/*
这两天项目开发中,用到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学习04——网关学习
下一篇:STM8S学习02——ADC
史海拾趣
|
本设计实例介绍如何在短暂电压不足期间使电信设备保持正常工作。首先必须了解电信设备专用电源的几个细节。向电信设备馈电的电源的共模电压为-48V,尽管实际电压范围可能是-42.5V ~ -56V、-40V ~ -60V,甚至超出这些范围。公共电源——“砖块”DC/D ...… 查看全部问答> |
|
大家好,学生以前接触的硬件类比较多,这次需要在2440板子下跑wince,用串口读数据,我找了很多资料,发现都是直接给代码的,学生求助,是在什么环境下编译?PB吗?如果是PB的话,就是改PB里哪里的程序呢???学生很疑惑,学生其实是想用VS2005中 ...… 查看全部问答> |
|
68013A端点EP6OUT的BULK写失败求助,急!! 易用专业的PCI、USB、LED方案正在对68013A采用slavefifo方式进行bulk读写操作 我用EP2做in端点,1024字节,2从缓冲 用EP6做OUT端点,512字节,4从缓冲 我写好了68013A的固件,用CYPRESS的开发工具 ...… 查看全部问答> |
|
用PB编制系统镜像,由于用到SHFileOperation复制文件,但是显示进度框上没有取消按钮 别的版本的机器则可以...不知道这个跟什么组件选择还有关系,还有就是ceshell.dll是怎么生成的 新手请教各位大虾!!… 查看全部问答> |
|
我的新书《ARM Cortex-M0从这里开始》已经出版,即将上市,希望大家多多支持。在这里先谢谢大家了。。。。。。。。。。。。。 前言和目录: 已经上市 北航:http://www.buaapress.com.cn/bookdetai ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:10 编辑 器件型号:RDK_BLDC DRV8312-C2-KIT (电机控制评估套件) &nbs ...… 查看全部问答> |
|
ls -bash: ls: command not found . 原因:在设置环境变量时,编辑profile文件没有写正确,导致在命令行下ls等命令不能够识别。 解决方案: exportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin… 查看全部问答> |




