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单片机外部晶振不起振解决方法
下一篇:STM8单片机CAN滤波器的设置
推荐阅读最新更新时间:2024-11-11 22:06
推荐帖子
- 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 处理器
设计资源 培训 开发板 精华推荐
- ADA4627-1ARZ带保护反相放大器的典型应用电路
- ADA4637-1ARZ-RL带保护反相放大器的典型应用电路
- AM6TW-4807DZ ±7.2V 6 瓦双路输出 DC/DC 转换器的典型应用
- 根据 EN50121-3-2(双输出)使用带有 EMC 滤波的 RP40-2412DFR DC/DC 转换器的典型应用
- LT1121IS8-3.3 5V 低压差稳压器的典型应用电路,用于具有关断的电池供电电源
- STC3115 混合模式电量计的典型应用
- L7808A输出稳压电路的典型应用
- LTC3642IDD-5 高效 15V、10mA 稳压器的典型应用电路
- 使用 Silicon Labs 的 SI3400 的参考设计
- LT3467IS6 单节锂离子电池至 5V 升压转换器的典型应用