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、代码实现
1 /* Includes ------------------------------------------------------------------*/
2 #include "stm8s.h"
3
4 /* Private typedef -----------------------------------------------------------*/
5 typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;
6
7 /* Private variables ---------------------------------------------------------*/
8 __IO TestStatus OperationStatus;
9
10
11 /**
12 * @brief How to Read / Write / Erase one Byte on FLASH memory.
13 * @par Examples description
14 * - Read one byte at address 0x40A5
15 * - Write its complement value at address + 1
16 * - Check programed value
17 * - Erase 2 byte (address 40A5 & 40A6)
18 * - Check the 2 bytes value is 0x00.
19 * @param None
20 * @retval None
21 */
22 void main(void)
23 {
24
25 uint8_t val = 0x00, val_comp = 0x00;
26 uint32_t add = 0x00;
27
28 /* Define FLASH programming time */
29 //Standard programming time fixed at 1/2 tprog
30 FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
31
32 /* Unlock Data memory */
33 //compare to two hardware key value: 0x56 and 0xAE
34 FLASH_Unlock(FLASH_MEMTYPE_DATA);
35
36 /* Read a byte at a specified address */
37 add = 0x40A5;
38 //read one byte from the address
39 val = FLASH_ReadByte(add);
40
41 /* Program complement value (of previous read byte) at previous address + 1 */
42 val_comp = (uint8_t)(~val);
43 //modify one byte at the address
44 FLASH_ProgramByte((add + 1), val_comp);
45
46 /* Check program action */
47 val = FLASH_ReadByte((add + 1));
48 if (val != val_comp)
49 {
50 /* Error */
51 OperationStatus = FAILED;
52 /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
53 /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
54 while (1)
55 {
56 }
57 }
58
59 /* Erase byte at a specified address & address + 1 */
60 //erase one byte at the address
61 FLASH_EraseByte(add);
62 FLASH_EraseByte((add + 1));
63 /* Erase action */
64 val = FLASH_ReadByte(add);
65 val_comp = FLASH_ReadByte((add + 1));
66 if ((val != 0x00) & (val_comp != 0x00))
67 {
68 /* Error */
69 OperationStatus = FAILED;
70 /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
71 /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
72 while (1)
73 {
74 }
75 }
76
77 /* Pass */
78 OperationStatus = PASSED;
79 /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */
80 /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */
81 while (1)
82 {
83 }
84 }
FLASH
上一篇:M41T11-RTC(实时时钟)
下一篇:STM8S——Clock control(CLK)
推荐阅读
史海拾趣
Dongguan Jingyue Electronics Co Ltd始终将社会责任和可持续发展作为公司发展的重要组成部分。公司积极参与公益事业,关注环境保护和员工福利。通过捐赠教育基金、支持环保项目、改善员工待遇等方式,公司履行了社会责任,也为公司的可持续发展奠定了基础。
请注意,以上故事均为虚构内容,仅用于展示电子行业公司可能的发展故事框架。
Advanced Thermal Products Inc公司成立于XXXX年,由一群热衷于热管理技术的工程师创立。在初创期,ATP公司便以独特的技术视角,专注于研发高效、创新的热管理产品。他们针对当时电子设备散热效果不佳的痛点,成功开发出了一款新型的热管理解决方案,为公司在行业内树立了良好的口碑。
C-MAX Time Solutions公司自创立以来,一直致力于电子时间同步技术的研发。在某一时期,公司推出了一款革命性的高精度时钟同步芯片,这款芯片凭借其卓越的稳定性和低延迟特性,迅速在通信、金融和交通等领域获得了广泛应用。这一技术创新不仅提升了C-MAX的市场竞争力,也推动了整个电子行业时间同步技术的发展。
江西联智集成电路有限公司(简称联智)自2016年成立以来,始终致力于无线充电技术的研发和创新。公司凭借其先进的无线充电TX/RX芯片解决方案,迅速在行业内崭露头角。联智不仅拥有由多名高校博士和高级研发人员组成的核心研发团队,还在中国及韩国设立了研发中心,确保技术的领先性和市场竞争力。
海洋勘探、水下通信和声学测量等领域对精准探测和数据采集有着极高的要求。Cedrat Technologies凭借其高性能压电陶瓷传感器技术,成功开发出用于声纳阵列系统的探测和成像设备。这些设备能够精确接收和分析水下环境中的声波,实现目标探测和数据采集。这一创新应用不仅拓展了电子行业的应用范围,也为海洋科学研究和工程实践提供了有力的技术支持。
在电子行业的激烈竞争中,Electrolube公司始终坚持以客户需求为导向,不断创新和拓展产品线。除了UVCL涂层外,公司还推出了一系列树脂、涂料和热管理解决方案的产品组合,为EV电池提供全面保护。
这些产品不仅具有优异的性能表现,而且能够满足不同客户的需求。例如,某些产品具有优异的耐高温性能,适用于高温环境下的电子设备;而另一些产品则具有出色的耐化学腐蚀性能,能够在恶劣的工作环境中保持稳定的性能。
Electrolube公司通过不断的技术创新和产品优化,成功拓展了市场份额,并在电子行业中树立了良好的品牌形象。同时,公司还积极与各大汽车制造商合作,共同推动电动汽车产业的发展。
附件中是我做的一个阻容降压的电路,但这个电源相当不稳定,老是把芯片冲击坏掉(芯片的5V电压管脚和GND直接短路,通了),自我改动:加了个Pi型滤波电路,但仍然没效果。新的一个想法是:用一个1:1的隔离变压器把市电隔离开来,但不知道变压器的 ...… 查看全部问答∨ |
|
本人刚拿到一块LM3S9B96开发板,现在想在KEIL开发软件下弄个例程下载到开发板上去,熟悉一下这个开发的过程。由于刚接触不知道怎么操作。望哪位前辈能指点一下,越详细越好!谢谢啦!… 查看全部问答∨ |
|
在TI,LM3S601芯片上用程序进行编码器速度计算时,利用到SysCtlDelay()这个函数时,显示sysctlDelay未定义,但我sysctl.h或是sysctl .c都已经导入IAR了~~~make时还是通不过,这是什么原因?GO to definition sysctlDelay一直没反映 … 查看全部问答∨ |
本帖最后由 ddllxxrr 于 2016-1-7 16:54 编辑 出手头几块开发板,全新。 1、黑金Cyclone II开发板。 2、micro2440 arm开发板 1G的nand flash,图就不上了。 3、TI大学计划的LM3S811开发板,有好几块。 4、TI的msp430 pad ,图也不上了。 ...… 查看全部问答∨ |
主要完成下面这些功能 1. 拍照功能。通过控制摄像头拍照,通过UART 接口和摄像头通信,可将照片存放在存储单 元中。配置上外部存储卡,可以将照片存放到挂载在片上系统的任意内存卡中。 2. 照片修改功能。对拍摄的照片进 ...… 查看全部问答∨ |
第一步入门-51核心和基本电路 中国人有10亿啊,每年有多少大学生毕业呢?我不知道。但是我看到有一张照片,招聘会上熙熙攘攘,人来人往,十分震撼。从来没有一个时刻让我感觉到中国的人力资源是如此的丰富。但是,从现在的大学毕业出来的学生学到 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 上演你的“ADI实验室电路”DIY,赢取E金币 !
- 了解并观看是德科技汽车电子、物联网(IOT)精彩专题,下载技术文章送好礼!
- PI 有奖直播:在无需DC-DC变换器的多路输出电源设计中实现高效率和出色的输出调整率
- 有奖直播|TI 带您领略互联、高效的智能家居方案
- 下载文章:“深入了解信号发生器”丰富知识赢取好礼
- 医用/工业CT医疗影像探测器芯片应用与解决方案
- 【EEWORLD第三十九届】2012年06月社区明星人物揭晓!
- 有奖直播:万物互联 -世健公司携手Microchip专家,共同探讨IoT解决方案
- [年末调查]工程师年末大盘点,你被点名了!
- 答题赢好礼:ADI MEMS工业监测助力机器大健康发展