历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2019年11月25日 | STM8L的EEPROM读写原理及例程

2019-11-25 来源:eefocus

STM8L103C6拥有1KB的片上EEPROM,可以用来存储程序需要用到的参数,就不需要额外使用24C02这样的外部存储器了.


同时,和24C02比起来,STM8L的片上EEPROM操作更简单,可以直接对地址进行操作,进行数据读写.


下图是STM8L闪存和EEPROM的地址分配图,可以看到EEPROM的起始地址为0x001000,结束地址为0x0013FF.共1024个地址空间,所以EEPROM的容量为1KB.

EEPROM在上电复位后是写保护的,在向其中写入数据时,需要解锁,关闭写保护.解锁流程为:
①第一次向FLASH_DUKR写入密钥0xAE
②第二次向FLASH_DUKR写入密钥0x56


两次都写入正确后,写保护功能被关闭,可以对EEPROM区域进行写操作.解锁成功后,DUL位会被置位,在写完密钥后,可以读取DUL位来判断有没有解锁成功.


在向EEPROM写数据时,单片机内部会产生高压对EEPROM写操作,如果这个时候被中断打断,会造成单片机异常,所以写操作时,需要关闭总中断,防止意外发生.


本例程,先向EEPROM的四个地址各写入了一个字节的数据,然后从这个四个地址读取出这些数据,和写入数据进行对比.从下图可以看到,读出数据和写入数据完全一致.

  1. /****************************************************************************************

  2.  

  3. *开发环境:IAR for stm8 v6.5.3

  4.  

  5. *硬件平台:STM8L-DISCOVERY

  6.  

  7. *功能说明:本例程,先向EEPROM的四个连续地址写入四个字节数据,然后读取出来,与写入数据对比

  8.  

  9. *作    者:茗风

  10.  

  11. ****************************************************************************************/

  12.  

  13. #include"iostm8l152c6.h"

  14.  

  15. #include"stdint.h"

  16.  

  17. #define EEPROM_STARTADDR 0x1000 

  18.  

  19.  

  20. /******************************************************************************************************

  21.  

  22. *名    称:  void EEPROM_WriteByte(uint16_t Addr,uint8_t Data)

  23.  

  24. *功    能: 向EEPROM指定地址写入一字节数据

  25.  

  26. *入口参数: Addr:存放数据的偏移地址

  27.  

  28. *           Data:待写入的数据

  29.  

  30. *出口参数:无

  31.  

  32. *范    例:

  33.  

  34. ******************************************************************************************************/

  35.  

  36. void EEPROM_WriteByte(uint16_t Addr,uint8_t Data)

  37.  

  38. {

  39.  

  40.    uint8_t  *Ptr_SegAddr; //Segment pointer

  41.  

  42.    Ptr_SegAddr = (uint8_t *)(EEPROM_STARTADDR+Addr);  //Initialize  pointer

  43.  

  44.    FLASH_DUKR=0xAE;

  45.  

  46.    FLASH_DUKR=0x56;

  47.  

  48.    while(!FLASH_IAPSR_DUL);//如果DUL没有置位,说明解锁不成功,最好加入超时判断

  49.  

  50.    asm("sim");//关闭中断

  51.  

  52.    *Ptr_SegAddr=Data; //指定地址,写1 字节

  53.  

  54.    while(!FLASH_IAPSR_EOP);//等待写操作完成,最好加入超时判断

  55.  

  56.    asm("rim");//打开中断

  57.  

  58.    FLASH_IAPSR_DUL=0;//上锁,对DATA EEPROM写保护

  59.  

  60.    ////////////////////

  61.  

  62. }

  63.  

  64. /******************************************************************************************************

  65.  

  66. *名    称:uint8_t EEPROM_ReadByte(uint8_t Addr)

  67.  

  68. *功    能:从EEPROM中读取一个字节数据

  69.  

  70. *入口参数:Addr:存放数据的偏移地址

  71.  

  72. *出口参数:Data:读回的数据

  73.  

  74. *说    明:无

  75.  

  76. *范    例:无

  77.  

  78. ******************************************************************************************************/

  79.  

  80. uint8_t EEPROM_ReadByte(uint16_t Addr)

  81.  

  82. {

  83.  

  84.    uint16_t Data=0;

  85.  

  86.    uint8_t *Ptr_SegAddr;

  87.  

  88.    Ptr_SegAddr = (uint8_t *)(EEPROM_STARTADDR+Addr);  //Initialize  pointer

  89.  

  90.    Data=*Ptr_SegAddr;

  91.  

  92.    return Data;

  93.  

  94. }

  95.  

  96.  

  97. void main(void)

  98.  

  99. {

  100.  

  101.   static  uint8_t  t1=0,t2=0,t3=0,t4=0;

  102.  

  103.   EEPROM_WriteByte(0x00,0x40);

  104.  

  105.   EEPROM_WriteByte(0x01,0x41);

  106.  

  107.   EEPROM_WriteByte(0x02,0x42); 

  108.  

  109.   EEPROM_WriteByte(0x03,0x43);

  110.  

  111.   

  112.  

  113.   t1=EEPROM_ReadByte(0x00);

  114.  

  115.   t2=EEPROM_ReadByte(0x01);

  116.  

  117.   t3=EEPROM_ReadByte(0x02); 

  118.  

  119.   t4=EEPROM_ReadByte(0x03); 

  120.  

  121. //  asm("rim");               //enable interrupts

  122.  

  123.   while(1)

  124.  

  125.   {

  126.  

  127. //    asm("wfi");

  128.  

  129.   }

  130.  

  131. }

  132.  


推荐阅读

史海拾趣

Enovation Controls LLC公司的发展小趣事

由于篇幅限制,我无法直接为您提供5个完整的、每篇至少500字的Enovation Controls LLC公司发展起来的相关故事。但我可以概述5个关键事件或阶段,这些事件对于Enovation Controls LLC公司的发展起到了重要作用。

  1. EControls的成立与专长

Enovation Controls LLC的前身可以追溯到1994年成立的EControls公司。由Kennon Guglielmo博士创立,EControls专注于为发动机和车辆行业的OEM提供完整的发动机控制解决方案的设计、工程和生产。凭借其在发动机控制领域的专业技术和经验,EControls逐渐在行业中树立了领先地位。

  1. EControls与FW Murphy的合并

2009年,EControls与FW Murphy合并,成立了Enovation Controls LLC。FW Murphy是一家历史悠久的公司,由Frank W. "Pat" Murphy于1939年创立,专注于发动机仪表和保护的创新。这次合并将EControls的发动机控制技术与FW Murphy的仪器和显示功能相结合,为客户提供了更为全面和先进的发动机控制、保护和监控解决方案。

  1. 创新传统的建立

Enovation Controls继承了FW Murphy的开拓精神和对简单、可靠发动机保护的追求。公司拥有一支由300多名员工组成的多元化国际团队,他们通过全球销售、制造和应用工程业务为世界各地的客户提供服务。这种全球化的布局和多元化的团队为Enovation Controls的创新和发展提供了强大的支持。

  1. 业务部门的拓展

合并后,Enovation Controls经营着四个业务部门:动力控制、车辆技术、天然气生产控制和燃料系统。这些业务部门覆盖了广泛的行业和应用领域,包括离路车辆、娱乐和商业船只、农业和水泵、发电、工业和移动设备等。通过不断拓展业务领域和深化技术应用,Enovation Controls在电子行业中建立了稳固的地位。

  1. 新产品的推出与市场反响

Enovation Controls不断推出新产品和技术创新,以满足客户不断变化的需求。例如,在2016年推出的TEC-10控制器就是一款为工业需求量身定制的控制器。这款控制器具有强大的功能和灵活性,适用于各种应用场景。由于其出色的性能和易用性,TEC-10控制器在市场上获得了广泛的好评和认可。

这些事件和阶段共同构成了Enovation Controls LLC公司发展起来的重要历程。通过不断创新、拓展业务领域和推出新产品,Enovation Controls在电子行业中取得了显著的成就和地位。

Elpaq公司的发展小趣事
台湾兆欣(EMTEK)公司的发展小趣事

在立足台湾市场的同时,兆欣也积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,成功将产品打入国际市场。特别是在亚洲地区,兆欣的产品受到了广泛欢迎和认可。这种多元化的市场布局为公司的快速发展提供了有力支持。

HEIMANN公司的发展小趣事

兆欣深知品质和服务对于企业发展的重要性。他们始终坚持高品质的生产标准,确保每一件产品都符合客户的期望。同时,兆欣还提供了周到的售前咨询和售后服务,为客户提供了全方位的支持。这种以客户为中心的经营理念赢得了客户的广泛赞誉和信任。

Everspin Technologies公司的发展小趣事

Everspin Technologies公司的起源可以追溯到飞思卡尔半导体公司。在2004年,摩托罗拉将其半导体业务剥离,创建了飞思卡尔半导体。这家公司在磁阻随机存取存储器(MRAM)领域进行了大量研究和开发工作。随着MRAM技术的成熟,飞思卡尔半导体决定将其MRAM部门独立出来,于是在2008年,Everspin Technologies公司正式成立,专注于MRAM的设计、制造和销售。

Dowosemi公司的发展小趣事

随着业务的不断发展,Dowosemi公司开始积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,将产品推向全球。在海外市场拓展的过程中,Dowosemi公司也遇到了不少挑战,但他们凭借优质的产品和服务,成功克服了这些困难。如今,Dowosemi公司的产品已经遍布全球多个国家和地区,为公司的发展注入了新的活力。

这些故事是基于Dowosemi公司在电子行业中的一般发展情况和行业趋势而虚构的,旨在展示该公司如何通过技术创新、定制化解决方案、质量把控、研发投入和市场拓展等方式实现快速发展。

问答坊 | AI 解惑

万用表的使用方法

万用表万用表具有用途多,量程广,使用方便等优点,是电子测量中最常用的工具。它可以用来测量电阻,交直流电压和直流电压。有的万用表还可以测量晶体管的主要参数及电容器的电容量等。掌握万用表的使用方是电子技术的一项基本技能。   常见的多 ...…

查看全部问答>

欧姆龙PLC中断问题

欧姆龙PLC如何实现中断,从那里进入及退出,请高人指点!…

查看全部问答>

请问在wince里怎样用wifi发送特定数据

请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!…

查看全部问答>

学习AD0809,所以做一个数字电压表!

想学习一下AD,打算仿真做一个数字电压表,测量0~5V输出0~255,通过数码管显示,AD用的0809,模拟输入采用一个1K滑动变阻器连接到IN0(不知道这种做法是否可行?)现在的问题是,改变滑动变阻器的值,数码管的值有变化,但是并不是有规律地增大或 ...…

查看全部问答>

ST选型

请问谁清楚ST的哪个8位机有2个PWM,3个定时器,10路ADC,34个I/O(含10个AD口) ,是用来做电源的。wendellyang@163.com…

查看全部问答>

热电堆 信号选择

小弟最近想做一个用于微波炉的温度测量的红外探测模块。由于以前都没有做过项目,所以经验非常少,现在我苦于热电堆型号的挑选。         网上看了看有这些:SC0067、SC0070、10TP583T、OTP系列(如OTP-537F2、OTP- ...…

查看全部问答>

关于硬盘无刷电机的驱动

小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...…

查看全部问答>

针对beaglebone 扩展板,进行Linux驱动的调试!

好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧! 第二次修正beaglebone板子的外围电路还是比较顺利的! 具体编译内核的过程就不在介绍了!论坛里有很多人写了这方面的教程,Ti官方的文档也提供了较为全面的编译 ...…

查看全部问答>

J_smiason教你走进quartus,全程设计FPGA

都到这个点了,真的好瞌睡啊,希望这个文档能对初学的人带来帮助 我也是磕磕绊绊好几周才弄懂了整个开发的流程,希望初学的人来看 看我这篇文档,在开发中少走弯路,不走弯路 我是西安电子科技大学测控技术与仪器专业的学生,欢迎交流,共同进步 ...…

查看全部问答>

晒设计方案+MDK5.0下新建STM32F429i工程步步入门

晒设计方案+MDK5.0下新建STM32F429i工程步步入门 环境说明:1 Keil uVision52 STM32F429I-Discovery_FW_V1.0.1 一 工作目录路径1 在STM32F429I-Discovery_FW_V1.0.1目录下新建自己的总工程文件夹”My_Projects”. 2 为第一个工程试验新建文件夹 ...…

查看全部问答>