STM8S读写内部EEPROM

发布者:CelestialMagic最新更新时间:2018-05-31 来源: eefocus关键字:STM8S  读写内部EEPROM 手机看文章 扫描二维码
随时随地手机看文章

1初始化函数


  1. void InitEEPROM(void)  

  2. {  

  3.     

  4.   FLASH_DeInit();  

  5.   FLASH_Unlock(FLASH_MEMTYPE_DATA);//EEPROM  

  6.   FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_TPROG);  

  7.     

  8. }  


2.读一个字节的函数实现


  1. /*******************************************************************************  

  2. * 名称: INT8U FlashEeprom_ReadByte(INT16U Address)  

  3. * 功能: flasheeprom读一个字节函数  

  4. * 形参: Address:读取数据的地址  

  5. * 返回: 返回想读取的数据的值  

  6. * 说明: 在main.c和key.c文件调用   

  7. ******************************************************************************/  

  8.   

  9. INT8U FlashEeprom_ReadByte(INT16U Address)  

  10. {  

  11.         INT8U Data;  

  12.           

  13.         Data = FLASH_ReadByte(Address);  

  14.         return Data;  

  15. }  

3.读一个32位数

先定义一个联合体


  1. union INI32  

  2. {  

  3.   U32 Data;  

  4.   U8 buf[4];  

  5. };  

  6. typedef union INI32 INT_32;  


实现读一个32位数

[html] view plain copy

  1. u32 EEPROM_Read(U32 addr)  

  2. {  

  3.    INT_32 data;  

  4.    data.buf[0]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr);  

  5.    data.buf[1]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+1);  

  6.    data.buf[2]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+2);  

  7.    data.buf[3]=FLASH_ReadByte(EEPROM_BASE_ADDR+addr+3);  

  8.    return data.Data;  

  9. }  


4下面是实现一个字节的写和32位的写


  1. void FlashEeprom_WriteByte(INT16U Address,INT8U Data)  

  2. {  

  3.         FLASH_Unlock(FLASH_MEMTYPE_DATA);  

  4.         FLASH_ProgramByte(Address,Data);  

  5.         FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  

  6.         FLASH_Lock(FLASH_MEMTYPE_DATA);  

  7. }  

  8.   

  9. void EEPROM_Write(U32 addr,U32 data)  

  10. {  

  11.     INT_32 Wdata;  

  12.     Wdata.Data=data;  

  13.     FLASH_ProgramByte(EEPROM_BASE_ADDR + addr,  Wdata.buf[0]);  

  14.     FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  

  15.     FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+1,Wdata.buf[1]);  

  16.     FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  

  17.     FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+2,Wdata.buf[2]);  

  18.     FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  

  19.     FLASH_ProgramByte(EEPROM_BASE_ADDR + addr+3,Wdata.buf[3]);  

  20.     FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  

  21.   

  22. }  


测试程序


  1. int main()  

  2. {  

  3.   u32 a,b,c;  

  4.   a=55;b=33;c=66;  

  5.   EEPROM_Write(0x04,a);  

  6.   EEPROM_Write(0x08,b);  

  7.   EEPROM_Write(0x0c,c);  

  8.    a=0;b=0;c=0;  

  9.   a= EEPROM_Read(0x04);  

  10.   b=EEPROM_Read(0x08);  

  11.   c=EEPROM_Read(0x0c);  

  12. }  


关键字:STM8S  读写内部EEPROM 引用地址:STM8S读写内部EEPROM

上一篇:STM8单片机的中断优先级
下一篇:stm8 软件模拟IIC驱动PCF8563T,NOKIA5110液晶显示

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

STM8S学习01——SPI&IIC
1、温习IIC总线协议 1)I2C 总线的一些特征 1 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL 2 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地址 主机可以作为主机发送器或主机接收器 3 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁,防止数据被破坏 4 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达 3.4Mbit/s 5 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整 6 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
[单片机]
STM8S】 独立看门狗
.h文件如下: #ifndef __IWDG_H #define __IWDG_H #include stm8s.h void IWDG_Init(void); void IWDG_Feed(void); #endif .c文件如下: #include iwdg.h void IWDG_Init(void) //配置并启动看门狗 //独立看门狗,时间1.02S { IWDG- KR = 0xcc; //启动独立看门狗 IWDG- KR = 0x55; //写入解锁 IWDG- PR = 0x06; //256分频 IWDG- RLR = 0xff; //设置重载寄存器 IWDG
[单片机]
STM8s串口2异步基本收发使用说明
学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。 使用某宝上买的STM8S最小系统板,外部晶振为8MHz的。HSI的误差对串口波特率影响比较大,这里使用外部晶振。 开发板芯片是105K4的,只有UART2,这里把UART2的整体框图放在下面,蓝色矩形框是串口异步基本收发所用到的寄存器,可以看到,所要用到的寄存器很少。 这里先说下如何计算波特率以及误差多少: 官方手册已经给出: 这里我使用的波特率为9600bps,然后主时钟为8M,这样分频因子为8M/9600约等于833=0x341,计算的波特率为8M/833=9603.8,误差为(9603.8-9600)/9600*100%约
[单片机]
<font color='red'>STM8s</font>串口2异步基本收发使用说明
stm8s开发(二) GPIO的使用:点亮LED
通用输入输出口(GPIO)是我们使用单片机最基本的,主要功能: ● 端口的各个位可以被单独配置 ● 可选择的输入模式:浮动输入和带上拉输入 ● 可选择的输出模式:推挽式输出和开漏输出 ● 外部中断可以单独使能和关闭 用户手册上描述: 每一个端口都有一个输出数据寄存器(ODR),一个引脚输入寄存器(IDR)和一个数据方向寄存器(DDR) 总是同相关的。控制寄存器1(CR1)和控制寄存器2(CR2)用于对输入/输出进行配置。任何一个I/O引脚可以通过对DDR,ODR,CR1和CR2寄存器的相应位进行编程来配置。 各种不同配置总结如下: 配置模式 DDR CR1 CR2 配置模式 上拉电阻 输入 0 0 0 悬浮输入
[单片机]
STM8S之时钟设置
在测量一些CATV系统指标中,常常要用到频谱仪,为了使测量结果准确,在频谱仪的使用上常涉及到一个分辨带宽设置的问题。要弄清这个问题,得要知道一些频谱仪的基本原理。图1是频谱仪的基本原理框图。图中的中频频率(输入信号通过与本振信号的和频或差频产生),本振受斜波发生器的控制,在斜波发生器的控制下,本振频率将从低到高的线性变化。这样在显示时,斜波发生器产生的斜波电压加到显示器的X轴上,检波器输出经低通滤波器后接到Y轴上,当斜波发生器对本振频率进行扫描时显示器上将自动绘出输入信号的频谱。检波器输出端的低通滤波器称为视频滤波器,用在分析扫描时对响应进行平滑。 1、分辨带宽 在频谱分析仪中,频率分辨率是一个非常重要的概念,它是由中频滤波
[单片机]
<font color='red'>STM8S</font>之时钟设置
stm8s跳出中断程序c语言,STM8S I2C总线中断程序
/*========================================================================================================== 本源程序文件内部使用的一些操作指令的宏定义 ==========================================================================================================*/ /*-----------------------------------------------------------------------------
[单片机]
关于STM8S IAR 无法下载程序,以及无法进去中断的问题
之前内有用过STM8 一会再用STM32 做一个小项目时 觉得STM8也有库应该很方便就直接选了它,结果调试的时候各种心酸,本想着一天解决的任务,结果拖了三天。接下来介绍一下遇到的主要问题 以及解决方法。 1、IAR无法下载程序问题 首先关于芯片型号设置就不说了 网上一大堆,主要是Vcap 引脚对地电容的取值,网上普遍说1uF, 由于我做了两个板子 一个PCB一个覆铜板 PCB没问题 ,但是覆铜板1uF 就下不进去程序,后来改成0.1uF才可以。如果软件配置对了,现在不进去很有可能是这个电容的问题。 2、定时器进不去中断问题 尝试了TIM2 TIM4 都进不去,我是用的是风驰 分享的STM8s207寄存器版本的例程,其他都
[单片机]
STM8S单片机GPIO.C的理解
一、STM8S单片机GPIO.C的组成 实际上,STM8S 系列单片机需要使用的stm8s_gpio.c由以下几个部分组成: void GPIO_DeInit(GPIO_TypeDef* GPIOx) void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode) void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal) void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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