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

//需要C语言基础

EEPROM

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

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

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

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

代码工程

工程

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

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

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

代码

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

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

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

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

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

如果想要复位清除,请用

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

最后

距离比赛还有25天,加油

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azhuo9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值