历史上的今天
返回首页

历史上的今天

今天是:2025年04月04日(星期五)

2020年04月04日 | stm32 l0相关的eeprom

2020-04-04 来源:eefocus

内部FLASH和EEPROM这种掉电后还能保存内容的内存统称为non-volatile memory(NVM),STM32L053内部有2K的EEPROM.


内部EEPROM的页大小为一个Word为单位,擦除是必须以页为单位,所以库函数里的擦除函数也是每次擦除4个字节:


view plaincopy to clipboardprint?


/** 

  * @brief  Erase a word in data memory. 

  * @param  Address: specifies the address to be erased. 

  * @note   To correctly run this function, the HAL_FLASHEx_DATAEEPROM_Unlock() function 

  *         must be called before. 

  *         Call the HAL_FLASHEx_DATAEEPROM_Lock() to the data EEPROM access 

  *         and Flash program erase control register access(recommended to protect  

  *         the DATA_EEPROM against possible unwanted operation). 

  * @retval HAL status 

  */  

HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t Address)  

{  

  HAL_StatusTypeDef status = HAL_OK;  

    

  /* Check the parameters */  

  assert_param(IS_FLASH_DATA_ADDRESS(Address));  

    

  /* Wait for last operation to be completed */  

  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);  

    

  if(status == HAL_OK)  

  {  

    /* Clean the error context */  

    ProcFlash.ErrorCode = HAL_FLASH_ERROR_NONE;  

  

    /* Write "00000000h" to valid address in the data memory" */  

      *(__IO uint32_t *) Address = 0x00000000;  

  

    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);  

  }  

    

  return status;  

}    


写EEPROM的顺序和使用flash类似,要先解锁(UNLOCK) 才能写,写的时候可以字节、半字、字为单位都可以。


写的时候可以不擦除,内部会自动擦除。需要注意的是写EEPROM会消耗固定的时间,所以需要在程序对时间要求严格时


正确安排写EEPROM的时机。


写EEPROM的函数如下:


void EEPROM_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite)  

{  

    uint16_t t;  

    HAL_FLASHEx_DATAEEPROM_Unlock();      

    for(t = 0;t < NumToWrite;t++)  

    {  

        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE,DATA_EEPROM_BASE + WriteAddr + t,*(pBuffer + t));  

    }  

    HAL_FLASHEx_DATAEEPROM_Lock();  

}  


main函数里面先写EEPROM,然后再读出来验证是否和写一样,一样的话点亮LED:


#include "main.h"  

uint8_t Test[25] = "http://www.eepw.com.cn/";  

uint8_t Buff[25];  

int main(void)  

{  

    uint8_t res;  

    HAL_Init();  

    SystemClock_Config();  

    LED_Init();  

    EEPROM_Write(0,Test,25);  

    EEPROM_Read(0,Buff,25);  

    res = strcmp((const char*)Buff,(const char*)Test);  

    if(0 == res)  

    {  

        while(1)  

        {     

            HAL_Delay(500);  

            LED_TOG;              

        }  

  }  

}  

推荐阅读

史海拾趣

Artesyn Embedded Technologies公司的发展小趣事

随着公司产品的不断完善和市场认可度的提高,Artesyn Embedded Technologies开始与全球众多科技大厂建立紧密的合作关系。这些大厂包括知名的通信设备制造商、数据中心运营商等。通过与这些大厂的合作,Artesyn的产品得以广泛应用于各个领域,进一步提升了公司的知名度和影响力。

Cermetek Microelectronics公司的发展小趣事

随着产品的推出,Cermetek Microelectronics公司开始注重品质管理。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到最终的产品测试,都经过严格的把控。这种对品质的执着追求,使得公司的产品在市场上获得了良好的口碑。同时,公司还积极拓展市场,与多家知名企业建立了合作关系,进一步提升了品牌影响力。

意普(ESPE)公司的发展小趣事

随着市场需求的不断增长,意普(ESPE)公司开始拓展产品线,推出了包括通用光栅、反射板等一系列光电保护产品。同时,公司注重产品创新,不断引进国外先进技术,并结合国内市场需求进行改进,成功推出了多款具有竞争力的新产品。这些产品广泛应用于机械加工、汽车制造等行业,有效提升了客户的安全生产水平。

CALMIRCO公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈,行业挑战也层出不穷。CALMIRCO公司始终保持敏锐的市场洞察力,积极应对各种挑战。在面对原材料价格波动、国际贸易摩擦等不利因素时,CALMIRCO公司及时调整战略,优化生产流程,降低成本,确保产品的竞争力。同时,公司还不断加大研发投入,推动技术创新和产业升级,以适应不断变化的市场需求。

这五个故事只是CALMIRCO公司在电子行业发展中众多精彩瞬间的缩影。正是这些不懈的努力和持续的创新,使得CALMIRCO公司在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

常州星海电子(Starsea)公司的发展小趣事

质量是企业的生命线。常州星海电子自成立以来,便高度重视质量管理体系的建设和完善。公司先后通过了ISO9002、ISO9001:2000、ISO14000等多项国际质量管理体系认证,以及TS16949体系认证。这些认证不仅证明了公司在质量管理方面的卓越实力,也为公司赢得了众多国内外客户的信任和赞誉。

Hirose公司的发展小趣事

在拓展国内市场的同时,常州星海电子也积极开拓国际市场。公司的产品主要销往欧洲地区、美国和亚洲各国,是MOTOROLA、YAMAHA、Samsung、VTECH、LG、NOKIA等跨国公司的二极管供应厂家。国外销售量占公司总销售量的60%以上,这一成绩不仅体现了公司在国际市场上的竞争力,也为公司未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

用10个漂亮问题完美结束面试

本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 在面试结束前,大多数的主考官都会丢问题给求职者,最常见的就是:你有没有什么问题或疑问,想要提出来的?无论求职者是否有提出问题,其实,这个问题背后的真正含意,通常是主考官用来测试你对这份 ...…

查看全部问答>

找工作,选择比努力更重要

选择比努力更重要 一个人一生当中最大的幸福在于选择对两件事,一是找对单位、找对老板、找对上司;第二件事就是找对妻子或丈夫。为什么这么说呢?当太阳升起时我们与上司共事,当日落西下,我们与自己的爱人相拥。你永远可以更主动地去影响你的上 ...…

查看全部问答>

FM收音机带有立体声收音

收音部分采用CXA1238M集成电路,灵敏度高,性能稳定,立体收音,功放采用TDA2822M集成电路。 电子制作是综合能力的体现,从中可学到不少技术和经验,欢迎选购制作。一板两用,既可当FM收音机用,又可以当立体声功放用。本板体积小巧玲珑,给用户 ...…

查看全部问答>

求助:51与8155连接问题,模拟端口方式

如题,因为8155只需要低八位地址,P2想留做他用,故想采用普通IO模拟地址总线、ALE、WR等端口方式实现。按照时序图写出程序,但实验失败,在此求助,先谢过啦。代码如下: #include #include sbit AL = P2^0;    //ALE sbit W = P2^2 ...…

查看全部问答>

海浪发电的漂浮灯

除了每天准时升起的太阳时刻不停的将取之不竭能量输送到地球上,时刻波动起伏的广阔海面也蕴含着无穷的能量。这款漂浮在水面的信号灯利用海面的水流驱动发电机产生电力来点亮信号灯,可安置在暗礁周围用于警示或装置在深海边缘提醒游泳者慎入以及在 ...…

查看全部问答>

LCD液晶的操作

1602液晶:2行,每行16个点 主要看“写指令”和“写数据”,因为E=高脉冲,所以在初始化的时候要给E低电平,为高脉冲做准备。 1602液晶的屏幕地址,且以0x80为基地址。 在初始化中的指令码对应下表: 我写的LC ...…

查看全部问答>

如何获取WIFI的NIC_STATISTICS

直接用如下代码获取,返回值为TRUE,得不到数据:         memset(&m_nicdata, 0, sizeof(m_nicdata));         m_nicdata.Size = sizeof(NIC_STATISTICS);         m_nicdata.ptc ...…

查看全部问答>

求购在WINCE6.0下,A4平台上运行的TCPMP源码,价钱面议

在下求购能在WINCE6.0下,A4平台上运行的TCPMP源码. 本人在深圳 南山,西丽. QQ 50580776 EMAIL: gmb_669@163.com…

查看全部问答>

socket编程的问题

是这样的,我最近在ARM上移植了UCOSII,下载了TCP/IP包,目的是利用以太网口实现两个目标板的通信。应用层上用SOCKET编程实现,基于TCP协议。但是问题是server和client怎么也建立不起链接。client方connect函数一直调用失败。server方listen调用成 ...…

查看全部问答>

EVC下将LPBYTE转换成LPWSTR,谢谢!

LPBYTE lpByte; 如何转化为LPWSTR类型呢?…

查看全部问答>