本文主要是介绍stm32l0片上eeprom的读写操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、介绍
- 1.1 片上eeprom介绍
- 1.2 写eeprom操作
- 二、编程
- 三、测试
- 3.1 测试代码
- 3.2测试结果
- 四、例程
一、介绍
1.1 片上eeprom介绍
L0的片上eeprom特性主要用来存储系统的配置信息,f103如果需要存储配置信息,还需要额外的一颗eeprom芯片,片上eeprom的机制也符合这系列的低功耗的属性。
1.2 写eeprom操作
此操作旨在将字或字的一部分写入数据EEPROM。用户必须在正确的地址和大小写正确的值。内存接口在必要时自动执行擦除操作(如果所有位当前都设置为0,则无需在写入之前删除旧内容)。类似地,如果要写入的数据为0,则只执行擦除操作。当只执行写操作或擦除操作时,持续时间为Tprog(3.2 ms);如果两者都执行,则持续时间为2 x Tprog(6.4 ms)。每次擦除和写入操作都将FIX标志设置为1时,可以强制内存接口执行。
注意的是
- 一般flash擦除后是0xff,而片上eeprom擦除后是0x00
- 一般flash在编程前需要先擦除,而stm32的内存接口自动的执行了擦除操作,无需用户执行额外的擦除指令。
二、编程
//eeprom地址
#define EEPROM_BASE_ADDR 0x08080000
//向偏移地址写入len个字节
void eeprom_write(uint16_t BiasAddress, uint8_t *Data, uint16_t len)
{uint16_t i;HAL_StatusTypeDef status = HAL_OK;HAL_FLASHEx_DATAEEPROM_Unlock();for(i=0;i<len;i++){status +=HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE, EEPROM_BASE_ADDR+BiasAddress+i, *Data);Data++;}HAL_FLASHEx_DATAEEPROM_Lock();
}
//向偏移地址读取len个字节
void eeprom_read(uint16_t BiasAddress,uint8_t *Buffer,uint16_t Len)
{uint8_t *wAddr;wAddr=(uint8_t *)(EEPROM_BASE_ADDR+BiasAddress);while(Len--){*Buffer++=*wAddr++;}
}
三、测试
3.1 测试代码
//测试printf("开始测试\r\n");printf("写入eeprom数据:[0]:%x [1]:%x\r\n",eeprom_write_data[0],eeprom_write_data[1]);eeprom_write(0,eeprom_write_data,2);HAL_Delay(10);eeprom_read(0,eeprom_read_data,2);printf("读取的eeprom数据:[0]:%x [1]:%x\r\n",eeprom_read_data[0],eeprom_read_data[1]);printf("片上eeprom测试完成\r\n");
3.2测试结果
向0x08080000写入两个字节和从改该地址读取两个的内容一致,测试成功。
四、例程
例程链接
这篇关于stm32l0片上eeprom的读写操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!