STM8读写EEPROM

发布者:大橙子5511最新更新时间:2021-10-14 来源: eefocus关键字:STM8  读写  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

RWW特性允许用户在执行程序和读程序存储器时对DATA区域进行写操作,因此执行的时间被优化了。相反的操作是不允许的:即你不可以在写程序存储器时对DATA EEPROM进行读操作。


RWW特性是一直有效的而且可以在任意时刻使用。注意:并不是所有STM8都拥有RWW特性,请参考相应的数据手册来了解更多信息。 


字节编程

可以对主程序存储器和DATA区域逐字节地编程。要对一个字节编程,应用程序可直接向目标地址写入数据。


在主程序存储器中
当字节编程操作执行时,应用程序停止运行。


在DATA区域中 
有RWW功能的器件:在IAP模式下,应用程序不停止运行,字节编程利用RWW功能进行操作。 


无RWW功能的器件:当字节编程操作执行时,应用程序停止运行。


要擦除一个字节,向对应的字节简单写入'0x00'即可。


应用程序可以通过读FLASH_IAPSR寄存器来校验编程或擦除操作是否已被正确执行:


在一次成功的编程操作后EOP位被置1。


当软件试图对一个被保护的页进行写操作时WP_PG_DIS位被置1。在这种情况下,写操作不会被执行。


如果FLASH_CR1中的IE位已经被预先使能,则只要这些标志位(EOP/WP_PG_DIS)中有一个被置位就会产生一个中断。


STM8自动快速字节编程,根据目标地址的初始化内容的不同,编程持续时间可能也有所不同。如果字(4个字节)中包含不为空的字节,编程前字会被自动擦除。相反,如果字节为空,由于不会执行擦除操作从而编程时间变短。然而,可以通过对FLASH_CR1中的FIX位置1来强迫执行系统擦除操作而不管其内容是否为空,从而使编程时间固定(请参考FLASH控制寄存器)。编程总时间随之被规定为擦除时间和写操作时间的和(请参考tPROG参数,在数据手册的"Flash program memory"表中)。


注意:为了快速写一个字节(没有擦除操作),将要被写入数据的整个字(4个字节)必须被预先擦除。因此不可能对同一个字做连续两次快速写操作(在第二次写之前没有擦除操作):第一次写字节操作将是快速操作但针对另外一个字节的第二次写操作将需要一个擦除操作。

 

字编程

字写入操作允许一次对整个4字节的字进行编程,从而将编程时间缩短。


主程序存储器和DATA EEPROM都可以进行字操作。在一些STM8S器件中,也拥有当DATA EEPROM在进行写操作时同时具备RWW功能。请参考数据手册了解更多信息。为了对一个字编程,FLASH_CR2和FLASH_NCR2中的/WPRG/NWPRG位必须预先置位清零来使能字编程模式(请参考4.9.2 FLASH控制寄存器2(FLASH_CR2)和4.9.3 FLASH互补控制寄存器2(FLASH_NCR2))。然后将要被编程字的4个字节必须被从首地址开始装载。当四个字节都被写入后,编程周期自动开始。 


像字节操作一样,STM8的FLASH_IAPSR中的EOP与WR_PG_DIS控制位和FLASH中断相配合,可用于检查操作是否被正确执行完毕。


块编程

块编程比字节编程和字编程都要快。在STM8块编程操作中,整个块的编程或擦除在一个编程周期就可以完成。请参考(表4)了解具体器件的块的大小。在主程序存储器和DATA区域都可以执行块操作。


在主程序存储器中
用于块编程的代码必须全部在RAM中执行。


在DATA区域中 
有RWW功能的器件:DATA块操作可在主程序存储器中执行,然而数据装载阶段(下文中有述)必须在RAM中执行。


无RWW功能的器件:用于块编程的代码必须全部在RAM中执行。


一共有三种可能的块操作:


块编程(也叫标准块编程):整个块在编程前被自动擦除。


快速块编程:在编程前没有预先的块擦除操作。


块擦除。


在STM8块编程时,中断被硬件自动屏蔽。


标准块编程

块编程操作允许一次对整个块进行编程,整个块在编程前被自动擦除。
为了对整个块编程,FLASH_CR2和FLASH_NCR2中的PRG/NPRG位必须预先置位/清零来使能标准块编程(请参考4.9.2 FLASH控制寄存器2(FLASH_CR2)和4.9.3 FLASH互补控制寄存器2(FLASH_NCR2))。然后需要向主程序存储器或DATA区域的目标地址依次写入要编程的数据,这样数据会被锁存在内部缓存中。为编程整个块,块中的所有字节都需要被写入数据。但要注意,所有被写入缓存的数据必须位于同一个块中,这意味着这些数据必须有同样的高位地址:仅仅低6位的地址可以不一样。当目标块的最后一个字节被装载到缓存后,编程就自动开始了。编程前首先会自动执行一次擦除操作。


当对DTA区域进行块编程时,应用程序可以检查FLASH_IAPSR中的HVOFF位确认编程状态。一旦HVOFF被置0,真正的编程阶段就开始了,此时应用程序就可以返回到主程序中去了。FLASH_IAPSR中的EOP与WR_PG_DIS控制位和FLASH中断相配合,可用于检查操作是否被正确执行完毕。


快速块编程
STM8快速块编程允许不擦除存储器内容就对块进行编程,因此快速块编程的编程速度是标准块编程的两倍。该模式仅用于被编程部分已经被擦除过的情况,同时这种模式对向空白部分写入完整的应用代码特别有用,因为这种模式可以节省相当可观的时间。


快速块编程的步骤和标准块编程的步骤大致一样,FLASH_CR2和FLASH_NCR2中的FPRG/NFPRG位必须预先置位/清零来使能快速块编程(请参考4.9.2 FLASH控制寄存器2(FLASH_CR2)和4.9.3 FLASH互补控制寄存2(FLASH_NCR2))。FLASH_IAPSR中的EOP与WR_PG_DIS控制位和FLASH中断相配合,可用于检查快速块编程操作是否被正确执行完毕。


警告:在执行快速块编程之前如果这个块不是空的话,不能保证写入的数据无误。


块擦除

块擦除允许擦除整个块。
为了擦除整个块,FLASH_CR2和FLASH_NCR2中的ERASE/NERASE位必须预先置位/清零来使能块擦除(请参考4.9.2 FLASH控制寄存器2(FLASH_CR2)和4.9.3 FLASH互补控制寄存器2(FLASH_NCR2))。通过对块中所有的字写入'0x00 00 00 00'来擦除整个块。字的起始地址必须以'0','4','8',或'C'作为结尾。


FLASH_IAPSR中_PG_DIS控制位和FLASH中断相配操作是否被正确执行完毕。

 

选项字节(Option byte)编程

 

对选项字节编程和对DATA EEPROM区域编程非常相似。
应用程序可直接向目标地址进行写操作。利用STM8的RWW功能,在对选项字节写操作的同时程序不必停下来。


请参考相应的数据手册来了解选项字节内容的细节。


关键字:STM8  读写  EEPROM 引用地址:STM8读写EEPROM

上一篇:STM8单片机外部晶振不起振解决方法
下一篇:STM8单片机CAN滤波器的设置

推荐阅读最新更新时间:2024-11-11 22:06

IIC实现对EEPROM(24C02)的读写
概述:EEPROM芯片型号为24C02,该芯片的总容量是256个字节,该芯片通过IIC总线与外部连接。 实验功能:通过KEY1按键来控制24C02的写入,通过另外一个按键KEY0来控制24C02的读取。 硬件电路: IIC配置代码: //初始化IIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟 //GPIOB8,B9初始化设置 GPIO_InitStructure.GPIO_Pin = GP
[单片机]
IIC实现对<font color='red'>EEPROM</font>(24C02)的<font color='red'>读写</font>
STM8建立IAR工程
STM8是意法半导体公司出的增强型八位单片机,性能比51单片机强大,而且价格便宜,在商业应用中很受欢迎 在STM8的开发工程中主要有两种开发工具链.第一是使用IAR开发环境,第二十使用cosmic+sttoolset工具链,因为工作和自身的原因,这两种工具连都有幸使用过,接下来会写一套基于固件库的STM8学习笔记 另外,先使用固件库作为学习模版 建立STM8工程分为几步 1. 建立工作空间,然后建立工程 2. 添加源代码分组, 3. 工程配置 4. 加入库文件 添加之后的文件如下 选择芯片型号STM8S208R8,添加.H文件路径 编译,提示不通过 提示没有没有ADC1 TIM5
[单片机]
<font color='red'>STM8</font>建立IAR工程
旧文备份:AVR读写EEPROM分析
由于AVR的EEPROM写周期比较长(一般为毫秒级),因此在编程使用过程中要特别注意.对于读EEPROM没什么好说的,读一个字节的数据要耗费4个时钟周期,可以忍受,写就比较麻烦了,虽然放在EEPROM的数据都不是频繁访问的;虽然可以用读-比较-写的机制降低EEPROM的写操作频度,但在写入过程中,过长的写入周期还是会造成一些问题,下面就分析一下几种方式的EEPROM写操作. 循环查询式 将地址和数据写入EEPROM相关的寄存器,置写标志后就循环不断查询写完成标志,直到写完成,退出循环,顺序执行其他程序.在置写入标志到写完成的这段时间,程序除了不断查询写完成标志和响应硬件中断之外什么也不干,这段时间就这么浪费了,如果是个实时性要
[单片机]
EEPROM IIC
1. 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 2. 起始和终止信号 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号 起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态 接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好
[单片机]
<font color='red'>EEPROM</font> IIC
STM32中flash的读写详解
一:对STM32内部FLASH写进行编程操作,需要遵循以下流程:   1.FLASH解锁   2.清除相关标志位   3.擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便)   4.写入FLASH   5.锁定FLASH (1)获取状态:FLASH_Status FLASH_GetStatus(void); 返回值是通过枚举类型定义的。 typedef enum { FLASH_BUSY = 1, //忙 FLASH_ERROR_PG, //编程错误 FLASH_ERROR_WRP, //写保护错误 FLASH_COMPLETE, //操作完成 FLASH_TIMEOUT /
[单片机]
AVR IAR EEPROM 读写
IAR中关键字及其用法: __eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放 __tinyflash, __flash, __farflash, __hugeflash 用于flash 存储空间控制数据存放 __ext_io, __io 用于I/O存储空间, 控制数据存放,控制指针类型和存放 __regvar 放置一个变量在工作寄存器中 @ 用于变量的绝对地址定位。也可以用#pragma location 命令 #pragma vector 提供中断函数的入口地址 __root 保证没有使用的函数或者变量也能够包含在目标代码中 __no_init 禁止系统
[单片机]
STM32CubeMX GPIO模拟I2C读写M24C64
一、先了解一下硬件的连接,I2C_SDA和I2C_SCL分别接STM32的PB9、PB6 二、粗阅一下M24C64的数据手册,得知器件地址和存储器地址,器件地址是8bit,而存储器地址是16bit 三、下面是M24C64的写时序 四、下面是M24C64的读时序 五、下面是程序编写流程 六、看看时序参数 七、好啦!需要的知识点差不多都提到了开始搬砖 1、用STM32CubeMX配置生成工程,并打开工程。(具体怎么用这个软件这里不讲) 2、在我的工程里是这样配置的 《1》配置USART3,用打印读出来的数据与写入的是否一致 《2》配置PB6、PB9为开漏输出模式,配置如下: void MX_GPIO_Init(void)
[单片机]
STM32CubeMX GPIO模拟I2C<font color='red'>读写</font>M24C64
IAR for STM8下载、安装、注册
一、下载 官方下载,网址 https://www.iar.com/iar-embedded-workbench/#!?currentTab=free-trials 到这个页面,下载即可,国外的网址下载较慢。 二、安装 1.下载软件,双击安装包,进入准备安装(解压)过程 2、点击Install IARM Embeded Workbench for STMicroelctronics STM8 3.进入安装向导界面,点击“Next” 4.选择“I accept the ...”,点击“Next” 5.点击“Change”选择安装路径(默认C盘,可以不用修改,我这里改为D盘),点击“Next” 6.勾选需要安装调试的
[单片机]
IAR for <font color='red'>STM8</font>下载、安装、注册

推荐帖子

DHCP AUTOIP 静态IP
在使用DHCP获取失败后,系统会用AUTOIP来配置IP。我想让他DHCP失败后就用STATIC静态IP。曾试过配置lwipopts.h来关闭AUTOIP,好像它也不会用静态IP。问题1:我想在DHCP失败后就用STATIC静态IP,该怎么做?问题2:AUTOIP不是很明白,能帮我解释一下吗?问题3:DHCP失败那个时间有40秒左右,太长了,在哪里改啊?这些问题困扰了我很久,谢谢您!:DHCPAUTOIP静态IP原帖由longxtianya于2011-5-
longxtianya 微控制器 MCU
加快电力企业智能化数字化转型,避免或降低电力行业事故发生率
电力行业的工作内容广泛,包括电力的生产、传输、分配和使用等各个环节。然而,在这些环节中,有一些工作内容由于其特殊性,容易发生事故。比如电站建设、输电线路的架设等,由于施工环境复杂,作业人员需要面对高空作业、大型机械操作等多种风险因素,因此事故率相对较高。施工过程中可能会发生坍塌、触电、机械伤害等事故。再比如电力技改领域通常涉及到设备的拆卸、安装和调试,如果操作不当,也容易导致事故发生。除此之外,在电力生产领域以及电力作业现场因管控不严也会导致事故发生。在电力生产过程中,工作人员需要维护
宇宙的心 安防电子
三菱 PLC MX Component 编程 读取块的函数 readBlock(),在C# 中如何调用
三菱PLCMXComponent编程读取块的函数readBlock(),在C#中如何调用。在三菱编程手册上有C++格式的函数的格式说明是readBlock(stringszdevice,intsize,outlplData)C#的没有说明。对这个格式有点疑问1.是读取多个软元件的值,outlplData应该是一个数组2.szDevice是个软元件List,C++使用’\\n‘隔开,不知道C#是用什么东西隔开哪位大虾有C#的PLC三菱MX访问
benson 嵌入式系统
哈哈,看看淘宝中的产品,28元
哈哈,看看淘宝中的产品,28元这个和论坛里的不是一样的吗?你为什么自己买啊?确实便宜啊、、、、:@什么如此便宜,便宜是因为量产,并且用的绝不可能是锂电的!嗯嗯,量产的跟自己玩的,那价格是没法比的~~回复5楼murray的帖子怎么销售是.0的?食人鱼二手的1块钱买3板,我买了一些,亮度不错,适合玩玩,做做照明小灯不错,就是有点光线偏冷,如果居家用,建议买1块钱2板的黄光的,不错哦,1块钱6个黄光食人鱼LED,实惠呢,哪里?淘宝自己搜,呵呵,感觉这个28元的成本下来,可以得
chenzhufly DIY/开源硬件专区
出未用过的nucleo F334、L053 F091
出未用过的nucleoF334、L053F091https://2.taobao.com/item.htm?id=596509448161&spm=a2oq0.12575281.0.0.25911deb5HHFoZ&ft=t出未用过的nucleoF334、L053F091已出,结贴。Nucleo上的STLinkV2.1,拆下来单独用也是不错的 确实,但是我有各种link,所以也用不上,出了。
流年u7 淘e淘
F28379D离线烧写的两种模式
对于F28379D的离线烧写有两种模式,一种是FLASH,另一种是FLASH_STANDALONE(见下图)FLASH:支持CPU1离线运行程序FLASH_STANDALONE:支持CPU1离线运行程序,并可通过IPC控制启动CPU2对于CPU1,如图:通过以上步骤设置为FLASH_STANDALONE模式编译后烧录即可。不要点击运行注意,由于是烧写FLASH,所以一定要保证在烧写时不要干扰开发板,否则会容易导致烧写失败,造成FLASH锁定!对CPU2
Aguilera DSP 与 ARM 处理器
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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