STM32 讀寫內部Flash

2021-08-17 07:56:33 字數 2017 閱讀 3141

flash模組組織

儲存器被組織為程式儲存器模組,資料eeprom模組和資訊塊。

程式儲存器塊分為4 kb的扇區,每個扇區都是進一步分成16頁,每頁256位元組。

該操作用於擦除程式儲存器中的頁面(64個字)。要做到這一點:

●解鎖flash_pecr暫存器

1.將pekey1 = 0x89abcdef寫入程式設計/擦除金鑰暫存器(flash_pekeyr)

2.將pekey2 = 0x02030405寫入程式設計/擦除金鑰暫存器(flash_pekeyr)

●解鎖程式儲存器

●解鎖flash_pecr暫存器

1. 將prgkey1 = 0x8c9daebf寫入程式儲存器金鑰暫存器

(flash_prgkeyr)

2.將prgkey2 = 0x13141516寫入程式儲存器金鑰暫存器

(flash_prgkeyr)

●將flash_pecr暫存器中的erase位置1

●設定flash_pecr暫存器中的prog位選擇程式頁面

●等待bsy位清零

●將0x0000 0000寫入程式頁的第乙個字以擦除

注意:該功能可以從兩個儲存體,ram或外部儲存器執行。

這個操作用來寫乙個字到程式儲存器,假設它是

先前被刪除。要做到這一點:

●解鎖flash_pecr暫存器

●解鎖程式儲存器

●將乙個字寫入程式儲存器中的有效位址。

**:(注釋刪了,上傳後全是亂碼

flash.c:

#include "flash.h"

#include "main.h"

#define u32 uint32_t

#define u16 uint16_t

#define u8 uint8_t

#define pekey1 0x89abcdef

#define pekey2 0x02030405

#define prgkey1 0x8c9daebf

#define prgkey2 0x13141516

extern char teemp;

void writeflashtest(u32 dataxaddr,u8 write_data,u32 size)

{  u32 i;

u32 temp;

u16 t=0;

u32 fwaddr=dataxaddr;

u8 *dfu=write_data;

hal_flash_unlock();

flash_eraseinittypedef f;

f.typeerase = flash_typeerase_pages;

f.pageaddress = dataxaddr;

f.nbpages = 1;

uint32_t pageerror = 0;

hal_flashex_erase(&f, &pageerror);

hal_flash_lock();

hal_flash_unlock();

for(t=0;tflash.h:

#include "main.h"

#include "stm32l1xx_hal_flash_ramfunc.h"

#define u32 uint32_t

#define u16 uint16_t

#define u8 uint8_t

void flash_erase_pages(u32 erase_address);

void writeflashtest(u32 dataxaddr,u8 write_data,u32 size);

u8 flash_read_data(u32 dataxaddr);

unsigned char flash_write_data(u32 dataxaddr,u32 write_data);

stm32 讀寫內部Flash

stm32的flash分為主儲存塊和資訊塊。主儲存塊用於儲存具體的程式 和使用者資料,資訊塊用於負責由stm32出廠是放置2kb的啟動程式 bootloader 和512b的使用者配置資訊區。主儲存塊是以頁為單位劃分的,一頁大小為1kb。範圍為從位址0x08000000開始的128kb內。對flas...

STM32 實現內部Flash的讀寫(HAL庫版)

flash 中文名字叫快閃儲存器,是一種長壽命的非易失性 斷電資料不丟失 的儲存器。可以對稱為塊的儲存器單元塊進行擦寫和再程式設計,在進行寫入操作之前必須先執行擦除。乙個nand flash由多個塊 block 組成,每個塊裡面又包含很多頁 page 每個頁對應乙個空閒區域 冗餘區域 spare a...

STM32之內部FLASH原理

不同型號的 stm32,其 flash 容量也有所不同,最小的只有 16k 位元組,最大的則達到了 1024k 位元組。市面上 stm32f1 開發板使用的晶元是 stm32f103系列,其 flash 容量一般為 512k 位元組,屬於大容量晶元。大容量產品的 flash 模組組織結構如圖 40....