STM32内部的EEPROM其实是Flash模拟的,也就是会占用程序的存储空间,下载的程序也放在这个地方,不过L系列单独给eeprom分配的有位置,理论上所有的STM32都可以使用这个方法,但是要注意程序越大占用的空间越多,不要和程序覆盖在一起。
大家可能使用的型号都不同,我们首先在官网下载对应型号的参考手册
网址:意法半导体STM | STM32/STM8微控制器 | MCU单片机

STEP.2
打开pdf文档找到"Flash program memory and data EEPROM (FLASH)"

这里有详细的说明
找到对应的内存的设备
示意:

L071是196KB的所以是这个表格

STEP.3
开始编程(基于HAL库)
定义一个函数,像这样:

再由参考手册宏定义一下这两个eeprom的地址:
PS:如果是没有eeprom的stm32,只要程序不是足够大,可以把地址改成Flash的最后几页(避免和程序冲突导致错误),解锁上锁函数也要分别改为
HAL_FLASH_Unlock(void);
HAL_FLASH_Lock(void);
每次对其写数据要先解锁,用完再上锁。

读写函数:

这里读写的是8bit的数据,如果要用16,32bit的数据类型
直接改数据类型就可以啦!
使用方法:

代码:
#ifndef __EEPROM_H
#define __EEPROM_H
#include "main.h"
//MAX_3KB
#define MCU_Start_Address_Bank1 0x08080000
//MAX_3KB
#define MCU_Start_Address_Bank2 0x08080C00
void Flash_Write(uint32_t Address,uint8_t *Data,uint8_t Length);
void Flash_Read(uint32_t Address,uint8_t *Data,uint8_t Length);
#endif
#include "eeprom.h"
//max 3KB// 地址 数据 长度*/
void Flash_Write(uint32_t Address,uint8_t *Data,uint8_t Length)
{
HAL_FLASHEx_DATAEEPROM_Unlock();//解锁Flash
for(uint8_t i=0;i< Length;i++)
{
/* 数据类型 数据类型 */
*(__IO uint8_t *)Address = (uint8_t) Data[i];
Address+=1;
}
HAL_FLASHEx_DATAEEPROM_Lock();//上锁Flash
}//羊羊课代表
//max 3KB// 地址 数据 长度*/
void Flash_Read(uint32_t Address,uint8_t *Data,uint8_t Length)
{
for(uint8_t i=0;i< Length;i++)
{
/* 数据类型 */
Data[i]=*(__IO uint8_t *)Address;
Address+=1;
}
}//羊羊课代表
-
微控制器
+关注
关注
48文章
8249浏览量
162376 -
单片机
+关注
关注
6074文章
45340浏览量
663550 -
mcu
+关注
关注
147文章
18605浏览量
387043 -
STM32
+关注
关注
2305文章
11120浏览量
371159 -
EEPROM
+关注
关注
9文章
1129浏览量
85533
发布评论请先 登录
如何操作芯片内部EEprom读写数据
STM32固件库的使用方法
读写51单片机内部EEPROM的方法
如何进行STM32系列单片机内部EEPROM的读写详细资料和程序免费下载
分享EEPROM的作用和使用方法
STM32L系列读取单片机内部EEPROM
STM32F103:内部Flash模拟EEPROM

STM32内部EEPROM的使用方法
评论