STM8S FLASH与EEPROM读写操作

2019-11-07来源: eefocus关键字:STM8S  FLASH  EEPROM  读写操作

以下为FLASH操作:


#include "flash.h"

#include "stm8s_flash.h"

 

 

void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length)

{

  uint16_t Count=0;

  for( Count=0 ; Count

  {

    FLASH_ProgramByte_User(Address+Count,DataBuff[Count]);

  }

}

 

 

 

void FLASH_ProgramByte_User(uint32_t Address, uint8_t Data)

//将库函数中u16改为u32,否则当地址超过10000H时出错

{

    /* Check parameters */

    assert_param(IS_FLASH_ADDRESS_OK(Address));

    *(PointerAttr uint8_t*) (uint32_t)Address = Data;

}

注:写FLASH前需要解锁   


FLASH_Unlock(FLASH_MEMTYPE_PROG);  //FLASH解锁


以下为EEPROM操作:


#include "EEPROM.h"

#include "stm8s_flash.h"

 

 

/*******************************************************************************

* ==EEPROM初始化函数==

* FLASH_DeInit(); --> 复位EEPROM的寄存器值

* FLASH_Unlock(FLASH_MEMTYPE_DATA); --> 解锁 对 Data EEPROM memory 进行操作

* FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); --> 标准编程时间

*******************************************************************************/

void EEPROM_INIT(void)

{

FLASH_DeInit();

FLASH_Unlock(FLASH_MEMTYPE_DATA);

FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

}

 

/****************************************************************************************

*  Function: Derive_EPWrite                                                                        

*  Object: 写EEPROM

*  输入: 头地址(0~2048)  数据指针  数据长

*  输出: 无                                         

*  备注:  2K EEPROM  不能超过

****************************************************************************************/

void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len)

{

u8 *p;

//p指针指向EEPROM 对应的单元

p = (u8*)0x4000 + Adr;   

//解锁

FLASH_Unlock(FLASH_MEMTYPE_DATA);

//写数据

for( ; Len > 0; Len--)

{

Refresh_WWDG_Window(); //喂狗

*p++ = *pData++;

//等待写完成

while(!(FLASH_GetFlagStatus(FLASH_FLAG_EOP))); 

//加锁

FLASH_Lock(FLASH_MEMTYPE_DATA);

}

 

/****************************************************************************************

*  Function: Derive_EPRead                                                                         

*  Object: 读EEPROM

*  输入: 头地址(0~2048) 数据存放指针 数据长

*  输出: 无                                         

*  备注:  2K EEPROM

****************************************************************************************/

void Derive_EPRead(u16 Adr, u8 *pData, u16 Len)

{

u8 *p;

//p指针指向EEPROM 对应的单元

p = (u8*)0x4000 + Adr; 

//解锁

FLASH_Unlock(FLASH_MEMTYPE_DATA);

//读数据

for( ; Len > 0; Len--)

{

*pData++ = *p++;

Refresh_WWDG_Window(); //喂狗

}

//加锁EEPROM

FLASH_Lock(FLASH_MEMTYPE_DATA);

}


关键字:STM8S  FLASH  EEPROM  读写操作 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479276.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8S——watchdog(IWDG)
下一篇:STM8S AWU低功耗模式

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S003的GPIO模拟I2C切换输入输出的解决办法
刚开始学STM8,很多东西刚了解,正在做一个温湿度显示小板,就是使用I2C驱动SHT20传感器,并显示到数码管,数码管用的四位一体共阴数码管,STM8管脚有限,添加了一片TM1650做驱动,不过SHT20和TM1650都是用的I2C接口,由于对STM8硬件I2C还不了解,先打算用软件模拟,这就涉及到需要对GPIO做输入输出切换处理来检测ACK响应,刚开始,直接操作DDR寄存器,但是出现从输出切换到输入就会出现单片机死机,不解,查资料,得到一个解决办法,在输出状态时,可以不用切换到输入,我使用管脚D4,D5这两个管脚,这两个管脚比较特殊,就是真正开漏,在管脚描述为T,其它描述为HS(高吸收电流)。解决办法,将IO设置为开漏输出,外部
发表于 2019-11-11
STM8S103之IO复用
一、简介本文以STM8S103F3P6编程为例,介绍STM8S103F3P6如何引脚复用。二、实验平台电脑平台:Windows7 64位旗舰编译软件:IAR硬件平台:STM8S103F3P6三、版权声明四、实验前提1、在进行本文步骤前,请先安装IAR  EWSTM8-EV-1311版本;准备好STM8S103F3P6硬件平台。五、基础知识暂无六、源码地址暂无七、实验内容1.先阅读STM8S103F数据手册2.操作步骤以STM8S103F3P6的IO“PC6”为定时器1PWM输出为例:1)、配置定时器1为PWM输出void Init_Timer1(void){  GPIO_Init(GPIOC
发表于 2019-11-11
STM8S103之IO复用
STM8S_010_I2C读写EEPROM(硬件方式)
如果检测到地址匹配可以将 MCU 从低功耗模式中唤醒● 可选的时钟展宽功能 3.主模式所要求的操作顺序● 在I2C_FREQR寄存器中设定该模块的输入时钟以产生正确的时序● 配置时钟控制寄存器● 配置上升时间寄存器● 编程I2C_CR1寄存器启动外设● 置I2C_CR1寄存器中的START位为1,产生起始条件● I2C模块的输入时钟频率必须至少是:● 标准模式下为:1MHz● 快速模式下为:4MHz Ⅲ、软件工程源代码1.关于工程本文提供的工程代码是基于前面软件工程“STM8S-A04_UART基本收发数据”增加I2C接口修改而来。读写EEPROM的方式和之前“模拟I2C读写”的方式不一样。 2.硬件
发表于 2019-11-09
stm8s105调试I2C记录
最近由于AR项目中调试LCOS需要用到STM8S105的mcu,本次主要是使用模拟I2C。1.IIC协议简介 IIC协议这里只做简要介绍,详细介绍可以百度了解,协议相对简单,主要有开始位,停止位,应答位,非应答位。开始位:当时钟为高,数据线由高变低停止位:当时钟位高,数据线由低变高。应答位:第9个时钟到来时,数据线为低。(这里第9个时钟,发送完一个字节,紧接着就是第9个时钟到来)非应答位,第9个时钟到来时,数据线为高。2.LCOS协议:1.发送数据:单数据发送: 开始位:写地址位(8bit):寄存器地址(16bit):数据(8bit):停止位多字节发送:开始位:写地址(8bit):寄存器地址(16bit):数据(8bit
发表于 2019-11-09
stm8s105调试I2C记录
STM8S103之GPIO
如何快速了解GPIO,查看Reference manual中GPIO章节,初步了解到GPIOGPIO输入分为:Floating Input和Input with pull-upGPIO输出分为:Open drain和pull-up(且pull-up时速率可以设置)GPIO复用功能如何选择,复用功能分为:Default alternate function和Alternate function after remap [optionbit]其中remap得知参考STM8S103的datasheet中的Option bytes,STM8S103中的Option bytes可以设置时钟,IO口的复用选择
发表于 2019-11-09
STM8S103之GPIO
STM8S MAX7219点阵模块驱动芯片程序
以下为.h文件:#ifndef __MAX7219_H#define __MAX7219_H#include "stm8s_gpio.h"#include "stm8s.h"#include <iostm8s103f3.h>#include <intrinsics.h>#include "tim1.h" #define uchar unsigned char#define uint  unsigned int#define count 8  void Init_MAX7219(void);void
发表于 2019-11-08
STM8S MAX7219点阵模块驱动芯片程序
小广播
何立民专栏 单片机及嵌入式宝典

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

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