历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2019年11月19日 | STM8S——Flash program memory and data EEPROM

2019-11-19 来源:eefocus

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

推荐阅读

史海拾趣

Hirose Electric公司的发展小趣事

Hirose Electric公司电子行业的五个发展故事

1. 连接器技术的创新与多样化

Hirose Electric自创立以来,便以连接器技术的不断创新而著称。在过去的70多年里,该公司不断推出适应市场需求的连接器产品,从最初的简单连接器发展到如今涵盖工业、通讯、消费类电子、电脑及汽车等多个领域的复杂连接器解决方案。例如,Hirose开发了多种类型的RF、同轴、板对板、线对板、圆形、MicroUSB、FPC/FFC等连接器,这些产品不仅提升了设备的连接性能,还满足了市场对高质量、高效率连接方案的需求。

2. 全球化战略与市场拓展

为了更好地服务全球客户,Hirose Electric实施了积极的全球化战略。公司在全球范围内建立了多个生产基地和销售网络,包括在中国上海、深圳和北京设立的分支机构,以及在其他国家和地区的代表处。这些机构的设立不仅缩短了与客户之间的距离,还提升了供应链的灵活性和响应速度。例如,Hirose通过在中国市场的深耕,不仅扩大了其在中国市场的份额,还为中国电子行业的发展提供了有力支持。

3. 环保型连接器的研发与推广

随着全球对环境保护意识的增强,Hirose Electric也积极投身于环保型连接器的研发与推广中。公司致力于生产同轴连接器、FFC/FPC连接器以及单排和双排等环保型连接器,这些产品在满足性能要求的同时,还减少了生产过程中的环境污染。Hirose通过采用先进的生产工艺和材料,确保连接器的制造过程符合环保标准,赢得了业界的广泛赞誉。

4. 与分销商的紧密合作

Hirose Electric深知与分销商合作的重要性,因此与全球多家知名分销商建立了长期稳定的合作关系。这些分销商不仅为Hirose的产品提供了广泛的销售渠道,还通过提供专业的技术支持和客户服务,帮助Hirose更好地满足客户需求。例如,贸泽电子作为Hirose的重要分销商之一,凭借其强大的供应链能力和专业的技术团队,为Hirose的产品在全球范围内的推广和销售提供了有力支持。

5. 产品系列的持续升级与扩展

为了保持市场竞争力,Hirose Electric不断对其产品系列进行升级和扩展。例如,公司近期将DF40系列连接器的高度范围从4毫米扩展到7毫米,以满足不同产品设计对连接器高度的需求。这一升级不仅提升了DF40系列连接器的灵活性,还进一步巩固了Hirose在连接器市场的领先地位。此外,Hirose还不断推出新的连接器产品,如TF07V系列FPC/FFC连接器,这些产品以其卓越的性能和可靠性赢得了市场的广泛认可。

Compex Corporation公司的发展小趣事

Compex Corporation的创立可以追溯到电子行业的早期阶段。自XXXX年成立以来,公司便致力于研发和生产高质量的单层电容器、电阻以及其他电子元件。初期,公司面临着激烈的市场竞争和技术挑战,但凭借其卓越的技术团队和不懈的努力,逐渐在市场中站稳了脚跟。公司不断推出创新产品,满足了客户对高质量电子元件的需求,逐渐赢得了客户的信任和市场份额。

Amptek Inc公司的发展小趣事

近年来,电子行业面临着巨大的变革和挑战。新技术的不断涌现和市场的快速变化使得企业必须不断适应和创新。Compex Corporation也不例外。公司紧密关注行业动态和技术发展趋势,不断调整和优化产品结构和市场策略。同时,公司还加大了在人工智能、物联网等新兴领域的研究力度,以期在未来市场中占据先机。通过持续创新和适应变化,Compex Corporation在电子行业中保持了领先地位,并为未来的发展奠定了坚实基础。

请注意,以上故事是基于假设和可能的情况构建的,并非Compex Corporation的实际发展历史。如果需要更具体和准确的信息,建议查阅相关公司的官方资料或行业报告。

Fagor Electrónica公司的发展小趣事

进入1960年代,Fagor Electrónica迎来了其发展的第一个重大里程碑。1964年,公司成功启动了第一批硅整流器的制造。这一创新不仅提高了产品的性能,还为公司带来了更大的市场份额。硅整流器的推出标志着Fagor Electrónica在电子制造技术上的领先地位,也为其后续的发展奠定了坚实的基础。

Eureka Microelectronics Inc公司的发展小趣事

为了支持公司的持续发展和业务扩张,Eureka成功完成了多轮融资。这些融资不仅为公司提供了充足的资金支持,也吸引了众多投资者的关注。借助这些资金,Eureka加大了在研发、生产、销售等方面的投入,进一步提升了公司的竞争力和市场地位。同时,公司也积极开展战略合作,与上下游企业建立了紧密的合作关系,共同推动产业链的发展。

爱特姆(ATOM)公司的发展小趣事

爱特姆科技自在美国德克萨斯州休斯顿市成立以来,便致力于电子行业的创新与发展。1998年,公司成功创立了“ATOM”品牌,标志着其正式踏入了品牌化发展的道路。起初,爱特姆以台湾、深圳、昆山为主要研发生产基地,凭借对技术的不断追求和对市场的敏锐洞察,逐渐在连接器领域取得了突破。

问答坊 | AI 解惑

matlab第三课

数组与矩阵运算 这是今天讨论的重点!…

查看全部问答>

人才需求/招聘

任职要求: 1为TD-SCDMA Node B执行RF测试用例 2在板卡级别组织和开发 HW RF测试环境 3 负责HW Node B系统的测试。 4本科以上,硕士优先,主修通信或者相关领域。 5非常了解HW RF的测试(必须要有RF仪器经验 ) 6RF 电路开发背景优先。 7熟 ...…

查看全部问答>

基于FPGA 的DDS 调频信号的研究与实现.pdf

基于FPGA 的DDS 调频信号的研究与实现.pdf…

查看全部问答>

下班回家后,不弄技术,你能做什么?

嗨, 本来想看点电视节目的,关注关注国家大事什么的............... 但是还是习惯看看单片机论坛,查查资料什么的 ............ 我这陋习真难改...........…

查看全部问答>

一道汇编题?

25. 内存地址是0000H,若有4KB的存储空间,其内存的最终地址是(  ). A.400H        B.FFFH         C.4FFH      D.1000H 答案是什么?为什么?请高手 ...…

查看全部问答>

keil3上memory window 无法显示的问题

前两天你在网上下了个700多M的keil3来用!好不容易装好了发现memory window 里没法显示内存数据! 看了半天发现是字体的问题,memory window 的字体默认的是1295711,一般编译框里字体是10或0,但是没办法修改!今天弄了一天都没办法,字体太小, ...…

查看全部问答>

STM32的UART竟然不支持7Bit传输...

STM32 只能设置8,9位的方式。LPC ARM可以支持5,6,7,8位。工控中常用的 9600,E,7,1 就用不了吗?…

查看全部问答>

用团购模拟芯片DIY LCR自平衡电桥【不定期不定时更新】

准备使用 这次的团购的运放 基准源 ADC做一个LCR电桥。 写此帖的目的: 1,正好有活动,能比较低的价格买到芯片,买了芯片之后手痒就做点东西; 2,做东西的时候顺便学些东西; 3,做的过程中肯定会碰到很多问题,希望得到各位大大的帮助; 4 ...…

查看全部问答>

求问关于cc2531 usb dongle 的驱动问题

小弟现在需要用cc2531 usb dongle  ,但插到电脑上一直无法成功安装驱动,在网上到处搜索也找不到它的驱动文件,用的是win7 家庭普通版的系统,求各位大侠帮帮忙指点指点~~~…

查看全部问答>