STM32內部Flash的操作函式

2021-10-10 12:48:21 字數 1854 閱讀 3837

1. iap遠端更新機制說明

3. stm32內部flash的操作函式

stm32 操作內部flash的函式介面

#include

"inflash.h"

#include

"stm32f10x_flash.h"

/*! * 功 能: 不檢查的寫入內部flash

* param1: 起始位址

* param2: 要寫入的資料指標

* param3: 要寫入的資料的個數

* return: 無返回值

*/void

inflashwritenocheck

(uint32_t writeaddr, uint16_t *pbuffer, uint16_t numtowrite)

}/*!

* 功 能: 從指定位址開始寫入指定長度的資料

* param1: 起始位址(此位址必須為2的倍數!!)

* param2: 要寫入的資料指標

* param3: 半字(16位)數 (就是要寫入的16位資料的個數.)

* return: 成功返回 0

* 失敗返回 -1

*/int

inflashwrite

(uint32_t writeaddr, uint8_t *pbuffer, uint16_t numtowrite)

flash_unlock()

;// 解鎖

flash_setlatency

(flash_latency_2)

;// 因為系統時鐘為72m所以要設定兩個時鐘週期的延時

flash_clearflag

(flash_flag_bsy | flash_flag_pgerr | flash_flag_wrprterr | flash_flag_eop)

;// 寫入頁之前要擦除整頁,並判斷是否擦除成功

while

(flash_erasepage

(writeaddr)

!= flash_complete)

;// 寫入資料,小端儲存,資料的高位元組儲存在高位址

if(numtowrite ==1)

else

}flash_lock()

;// 上鎖

return0;

}/*!

* 功 能: 讀取指定位址的半字(16位資料)

* param1: 讀位址(此位址必須為2的倍數!!)

* return: 讀取到的資料

*/uint16_t inflashreadhalfword

(uint32_t faddr)

/*! * 功 能: 從指定位址開始讀出指定長度的資料

* param1: 起始位址(此位址必須為2的倍數!!)

* param2: 要儲存的緩衝區的位址

* param3: 要讀取的半字(16位)數 (就是要讀取的16位資料的個數.)

* return: 無返回值

*/void

inflashread

(uint32_t readaddr, uint16_t *pbuffer, uint16_t numtoread)

}/*!

* 功 能: 測試函式,往內部flash寫入乙個位元組的資料

* param1: 起始位址

* param2: 要寫入的資料

* return: 成功返回0

*/int

inflashwritechar

(uint32_t writeaddr, uint8_t writedata)

stm32 讀寫內部Flash

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

STM32 讀寫內部Flash

flash模組組織 儲存器被組織為程式儲存器模組,資料eeprom模組和資訊塊。程式儲存器塊分為4 kb的扇區,每個扇區都是進一步分成16頁,每頁256位元組。該操作用於擦除程式儲存器中的頁面 64個字 要做到這一點 解鎖flash pecr暫存器 1.將pekey1 0x89abcdef寫入程式設...

STM32關於操作內部FLASH整理

stm32的flash分為主儲存塊 資訊塊和快閃儲存器儲存器介面暫存器等 3 部分組成。主儲存塊用於儲存具體的程式 和使用者資料。起始位址0x08000000,b0和b1接gnd從這裡開始執行程式。資訊塊用於負責由stm32出廠時放置2kb的啟動程式 bootloader 和512b的使用者配置資訊...