当前位置:   article > 正文

[蓝桥杯物联网从0开始]15届蓝桥杯省赛备赛,小白学习路线之EEOROM可擦可编程只读存储器_可擦除可编程 rom

可擦除可编程 rom

//需要C语言基础

EEPROM

EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种可以通过电子手段实现擦除和编程的可读写存储器。简单来说,就是一种可以存储数据并且可以对数据进行修改的存储器。

EEPROM的工作原理类似于普通的存储器,但是有一点不同的是,它不需要外部的供电来保持数据的存储。当我们需要修改存储器中的数据时,可以通过传输电流来改变存储器中的电子状态,从而实现数据的修改。

相比于其他存储器,EEPROM具有可编程性和可擦除性的特点,也就是说我们可以随时修改存储器中的数据,而不需要更换存储器。这种特点使得EEPROM在很多应用中非常有用,比如在单片机中用于存储程序和数据。

STM32L071系列提供了高达6千字节的EEPROM,对EEPROM进行编程时采用在按字、半字或字节,可以页执行擦除操作。

代码工程

工程

为了看到效果,这次将LED的闪烁次数写到E2PROM中,因为系统是按照'字'来写入的,所以写入的地址必须是4的整数倍,否则会进入' hard fault '

  1. *解锁函数*/
  2. HAL_FLASHEX_DATAEEPROM_UnlockO; //解锁FLASHEX_DATAEEPROM/*锁定函数*/
  3. HAL_FLASHEX DATAEEPROM_LockO:/*写操作函数*/
  4. HAL_FLASHEx_DATAEEPROM_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);//用来区分要写入的数据类型,取值为:FLASH_TYPEPROGRAM_BYTE(字节:8位),
  5. FLASH_TYPEPROGRAM_HALFWORD(半字:16位),
  6. FLASH_TYPEPROGRAM_WORD(字:32位)和FLASH_TYPEPROGRAM DOUBLEWORD(双字:64位)Address用来设置要写入数据的FLASHEX_DATAEEPROM地址Data写入的数据类型,这个参数默认是64位的,如果你要写入小于64位的数据比如16位,程序会进行类型转换

创建工程,初始化PA15引脚LED灯

代码

编写以下函数,EEPROM读取函数,将数据从地址读出并写到buffer中。

  1. void EEPROM_Read(uint32_t addr,uint32_t *buffer,uint32_t length)
  2. {
  3. uint32_t *Whole_addr; //临时指针地址
  4. HAL_FLASHEx_DATAEEPROM_Unlock(); //必须解锁
  5. Whole_addr = (uint32_t *)(addr+DATA_EEPROM_BASE); //从起始地址按照4的整倍数写入
  6. while(length--) //读取数据
  7. {
  8. *buffer++=*Whole_addr++;
  9. }
  10. HAL_FLASHEx_DATAEEPROM_Lock(); //锁定EEPROM
  11. }

在main的初始化部分添加LED闪烁及闪烁次数写入EEPROM代码中,以下内容

  1. uint32_t count[3]={0}; //数据缓冲数组
  2. EEPROM_Read(0,count,1);//将数据读取到count
  3. count[0]++; //LED闪烁次数加一
  4. HAL_FLASHEx_DATAEEPROM_Unlock();//必须解锁才能使用
  5. //在EEPR0M地址4上写入count的值
  6. //DATA EEPROM BASE(0x08080000UL)是FLASHEx DATAEEPROM的起始地址
  7. HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_WORD,DATA_EEPROM_BASE,count[0]);//
  8. while(count[0]--)
  9. {
  10. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);
  11. HAL_Delay(300);
  12. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
  13. HAL_Delay(300);
  14. }

到此,不断按复位键可以看到每一次重启后闪烁次数都会不断增多。

如果想要复位清除,请用

  1. HAL_FLASH_Lock();//必须使用
  2. HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);//单页擦除

最后

距离比赛还有25天,加油

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/883280
推荐阅读
相关标签
  

闽ICP备14008679号