STM32內(nèi)部的EEPROM其實是Flash模擬的,也就是會占用程序的存儲空間,下載的程序也放在這個地方,不過L系列單獨給eeprom分配的有位置,理論上所有的STM32都可以使用這個方法,但是要注意程序越大占用的空間越多,不要和程序覆蓋在一起。
大家可能使用的型號都不同,我們首先在官網(wǎng)下載對應型號的參考手冊
網(wǎng)址:意法半導體STM | STM32/STM8微控制器 | MCU單片機

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

這里有詳細的說明
找到對應的內(nèi)存的設(shè)備
示意:

L071是196KB的所以是這個表格

STEP.3
開始編程(基于HAL庫)
定義一個函數(shù),像這樣:

再由參考手冊宏定義一下這兩個eeprom的地址:
PS:如果是沒有eeprom的stm32,只要程序不是足夠大,可以把地址改成Flash的最后幾頁(避免和程序沖突導致錯誤),解鎖上鎖函數(shù)也要分別改為
HAL_FLASH_Unlock(void);
HAL_FLASH_Lock(void);
每次對其寫數(shù)據(jù)要先解鎖,用完再上鎖。

讀寫函數(shù):

這里讀寫的是8bit的數(shù)據(jù),如果要用16,32bit的數(shù)據(jù)類型
直接改數(shù)據(jù)類型就可以啦!
使用方法:

代碼:
#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// 地址 數(shù)據(jù) 長度*/
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++)
{
/* 數(shù)據(jù)類型 數(shù)據(jù)類型 */
*(__IO uint8_t *)Address = (uint8_t) Data[i];
Address+=1;
}
HAL_FLASHEx_DATAEEPROM_Lock();//上鎖Flash
}//羊羊課代表
//max 3KB// 地址 數(shù)據(jù) 長度*/
void Flash_Read(uint32_t Address,uint8_t *Data,uint8_t Length)
{
for(uint8_t i=0;i< Length;i++)
{
/* 數(shù)據(jù)類型 */
Data[i]=*(__IO uint8_t *)Address;
Address+=1;
}
}//羊羊課代表
-
微控制器
+關(guān)注
關(guān)注
49文章
8783瀏覽量
165361 -
單片機
+關(guān)注
關(guān)注
6078文章
45550瀏覽量
672788 -
mcu
+關(guān)注
關(guān)注
147文章
19065瀏覽量
402279 -
STM32
+關(guān)注
關(guān)注
2312文章
11183瀏覽量
374324 -
EEPROM
+關(guān)注
關(guān)注
9文章
1144瀏覽量
86274
發(fā)布評論請先 登錄
如何操作芯片內(nèi)部EEprom讀寫數(shù)據(jù)
STM32固件庫的使用方法
讀寫51單片機內(nèi)部EEPROM的方法
stm32f2xx固件庫手冊詳細介紹了stm32f2xx的庫函數(shù)及使用方法
如何進行STM32系列單片機內(nèi)部EEPROM的讀寫詳細資料和程序免費下載
分享EEPROM的作用和使用方法
STM32L系列讀取單片機內(nèi)部EEPROM
STM32F103:內(nèi)部Flash模擬EEPROM
CubeMX的基礎(chǔ)使用方法
STM32G0開發(fā)筆記:EEPROM M24C02的使用方法
STM32內(nèi)部EEPROM的使用方法
評論