STM8S——Flash program memory and data EEPROM
1、简介
STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的;所以我们可以通过这些通用寄存器来编程或擦除存储器的内容、设置写保护、或者配置特定的低功耗模式。我们也可以自己对器件的 option byte 进行编程。在这里我们只简单的讲解如何对STM8S内部的数据存储区域(data memory)进行写操作、读操作、擦除操作。
2、存储架构图
STM8S内部存储包括:FLASH程序存储器(FLASH program memory)和数据EEPROM(DATA EEPROM);
(1)数据EEPROM又包括:
- 数据存储区域(DATA MEMORY):指定从地址0x00 4000开始,其中包括 [1 block] 的option byte,数据存储区域用于存储应用数据;
(2)FLASH程序存储器又包括:
- 用户启动区域(USER BOOT CODE):指定从地址0x00 8000开始,其中包括UBC option bytes和 [128 byte] 的中断矢量(interrupt vectors);
- 程序存储区域(MAIN PROGRAM):用于存储应用程序代码;

所以我们的操作是在DATA MEMORY里面,在该区域的指定地址进行读取内容、写入内容、擦除内容。
3、操作方法
(1)FLASH_ReadByte( ADDRESS ):读取地址ADDRESS处的1字节内容
(2)FLASH_ProgramByte( ADDRESS , DATA ):写1字节的内容到地址ADDRESS处
(3)FLASH_EraseByte( ADDRESS ):在地址ADDRESS处删除1字节的内容
4、操作步骤
使用操作前的配置
(1)配置选择编程时间,选择标准模式;
(2)解除数据存储区域的写保护;
说明:UBC和DATA MEMORY都有写保护,其中UBC的写保护是永远无法解锁的,而DATA MEMORY的写保护是可以通过连续写入两个MASS密钥值来解除该区域的写保护的;第一个密钥为0x56,第二个密钥为0xAE;只有当两个密钥输入正确(输入到寄存器FLASH_DUKR中)且输入密钥的先后顺序正确时,才会解除写保护;否则该区域在下一次系统复位之前都将一直保持写保护状态。
(3)读取、写入、擦除等操作;
5、代码实现
/* Includes ------------------------------------------------------------------*/
#include "stm8s.h" /* Private typedef -----------------------------------------------------------*/
typedef enum { FAILED = , PASSED = !FAILED} TestStatus; /* Private variables ---------------------------------------------------------*/
__IO TestStatus OperationStatus; /**
* @brief How to Read / Write / Erase one Byte on FLASH memory.
* @par Examples description
* - Read one byte at address 0x40A5
* - Write its complement value at address + 1
* - Check programed value
* - Erase 2 byte (address 40A5 & 40A6)
* - Check the 2 bytes value is 0x00.
* @param None
* @retval None
*/
void main(void)
{ uint8_t val = 0x00, val_comp = 0x00;
uint32_t add = 0x00; /* Define FLASH programming time */
//Standard programming time fixed at 1/2 tprog
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); /* Unlock Data memory */
//compare to two hardware key value: 0x56 and 0xAE
FLASH_Unlock(FLASH_MEMTYPE_DATA); /* Read a byte at a specified address */
add = 0x40A5;
//read one byte from the address
val = FLASH_ReadByte(add); /* Program complement value (of previous read byte) at previous address + 1 */
val_comp = (uint8_t)(~val);
//modify one byte at the address
FLASH_ProgramByte((add + ), val_comp); /* Check program action */
val = FLASH_ReadByte((add + ));
if (val != val_comp)
{
/* Error */
OperationStatus = FAILED;
/* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
/* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
while ()
{
}
} /* Erase byte at a specified address & address + 1 */
//erase one byte at the address
FLASH_EraseByte(add);
FLASH_EraseByte((add + ));
/* Erase action */
val = FLASH_ReadByte(add);
val_comp = FLASH_ReadByte((add + ));
if ((val != 0x00) & (val_comp != 0x00))
{
/* Error */
OperationStatus = FAILED;
/* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
/* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
while ()
{
}
} /* Pass */
OperationStatus = PASSED;
/* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
/* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
while ()
{
}
}
FLASH
STM8S——Flash program memory and data EEPROM的更多相关文章
- detect data races The cost of race detection varies by program, but for a typical program, memory usage may increase by 5-10x and execution time by 2-20x.
小结: 1. conflicting access 2.性能危害 优化 The cost of race detection varies by program, but for a typical ...
- 程序空间(Program memory)
The computer program memory is organized into the following: Data Segment (Data + BSS + Heap) Stack ...
- 20182320《Program Design and Data Structures》Learning Summary Week9
20182320<Program Design and Data Structures>Learning Summary Week9 1.Summary of Textbook's Con ...
- The differentiation program with abstract data
#!r6rs ( import ( rnrs base ( 6 ) ) ( rnrs io simple ( 6 ) ) ) ( define ( deriv exp var ) ...
- Using Internal EEPROM of PIC Microcontroller
There are commonly three types of memories in a PIC Microcontroller, Flash Program Memory, Data Memo ...
- STM8S103F3P6 开发环境笔记
STM8S103F3 产品手册 https://www.st.com/resource/en/datasheet/stm8s103f2.pdf 内核 16 MHz advanced STM8 core ...
- RFID 读写器 Reader Writer Cloner
RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...
- Arduino M0 的一个坑(2015-12-25)
前几天收到 Arduino M0,试各项功能都正常,可就是串口监视器/串口助手不能显示程序里打印的输出,好生奇怪,各种换波特率各种PC串口程序换着试,资料不多,官方资料也只说到 Serial1 用于 ...
- 初识DSP
初识DSP 1.TI DSP的选型主要考虑处理速度.功耗.程序存储器和数据存储器的容量.片内的资源,如定时器的数量.I/O口数量.中断数量.DMA通道数等.DSP的主要供应商有TI,ADI,Motor ...
随机推荐
- Linux env命令详解
env:查询环境变量 常用的命令展示 查看当前环境的环境变量 [root@localhost ~]# env HOSTNAME=localhost.localdomain SELINUX_ROLE_R ...
- Linux fsck命令详解
fsck(file system check)用来检查和维护不一致的文件系统.若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查. fsck常见命令参数 -a:自动修复文件系统,不询问任何 ...
- Beanstalkd 的理解
Beanstalkd 的理解 Beanstalkd 是一个轻量级的内存型队列,利用了和Memcache 类似的协议.其官网beanstakkd官网 下方的感谢语说: Many thanks to me ...
- Hibernate查询(HQL——Hibernate Query Language)
HQL查询 HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,而不进行update,delete和insert等操作.而且HQL是面向对象的,具备继承,多态和关联等特性. from子句: ...
- 新手学Linux:在VMware14中安装CentOS7详细教程
VMware Workstation14安装CentOS7.0 详情教程 1.准备工作 a)下载VMware workstation14 b)下载CentOS7 c)下载SSH Secure Shel ...
- async/await actor promise 异步编程
Python协程:从yield/send到async/await http://blog.guoyb.com/2016/07/03/python-coroutine/ Async/Await替代Pro ...
- Undefined function or method 'deploywhich' for input arguments of type 'char'
在进行matlab和java混合编程的时候.由matlab打包,把m文件转换为jar文件.供java调用.有时在Tomcat中调用此类jar类会出现如题或者以下的错误: ??? Error using ...
- vue 项目项目启动时由于EsLint代码校验报错
今天在编写好vue项目代码时,在命令行输入npm start的时候出现了如下图所示的一大堆错误: 在网上查找资料说是缺少EsLint配置文件的问题,最终找到一篇由 hahazexia 编写的一篇博客文 ...
- Java 中 Emoji 的正则表达式
一.emoji 的范围 查阅维基百科中 emoji 的说明 1. 杂项符号及图形 杂项符号及图形一共有768个字符,范围为: U+1F300 - U+1F5FF,在 Java 中正则表达式为: &qu ...
- smtp发送html报告与日志附件图片png
1.非ssl发送: 授权码机制,开启smtp,获取授权码以qq邮箱为例: 附件展示: #!/usr/bin/python3 import os import smtplib from email.mi ...