測試環境:
注:本章節**只適合stm32f1系列!
移植修改區 ///
/* flash大小:128k */
#define
stm32flash_size
0x00020000ul
/* flash起始位址 */
#define
stm32flash_base
flash_base
/* flash結束位址 */
#define
stm32flash_end
(stm32flash_base | stm32flash_size)
/* flash頁大小:1k */
#define
stm32flash_page_size
flash_page_size
/* flash總頁數 */
#define
stm32flash_page_num
(stm32flash_size / stm32flash_page_size)
/// 匯出函式宣告
void
flash_init
(void);
uint32_t
flash_read
(uint32_t address,
void
*buffer,
uint32_t size)
;uint32_t
flash_write
(uint32_t address,
const
uint16_t
*buffer,
uint32_t numtowrite)
;int
flash_erasepage
(uint32_t pageaddress,
uint32_t nbpages)
;uint32_t
flash_writenotcheck
(uint32_t address,
const
uint16_t
*buffer,
uint32_t numtowrite);#
endif
// !__flash_h
end of file
/**
* @file flash.c
* * @brief create by ankun on 2019/10/10
* */
#include
"flash.h"
#include
static
uint16_t flashbuffer[stm32flash_page_size >>1]
;/// 初始化flash
void
flash_init
(void
)/**
* 讀flash
* @param address 位址
* @param buffer 存放讀取的資料
* @param size 要讀取的資料大小,單位位元組
* @return 讀出成功的位元組數
*/uint32_t
flash_read
(uint32_t address,
void
*buffer,
uint32_t size)
while
(nread &&((
(uint32_t
)s)< stm32flash_end)
)return size - nread;
}/**
* 寫flash
* @param address 寫入起始位址,!!!要求2位元組對齊!!!
* @param buffer 待寫入的資料,!!!要求2位元組對齊!!!
* @param numtowrite 要寫入的資料量,單位:半字,!!!要求2位元組對齊!!!
* @return 實際寫入的資料量,單位:位元組
*/uint32_t
flash_write
(uint32_t address,
const
uint16_t
*buffer,
uint32_t numtowrite)
if(i < pagefre)
/* 寫回flash */
count =
flash_writenotcheck
(stm32flash_base + pagepos * stm32flash_page_size, flashbuffer, stm32flash_page_size >>1)
;if(count !=
(stm32flash_page_size >>1)
)}else
} pbuffer += pagefre;
/* 讀取位址遞增 */
address +=
(pagefre <<1)
;/* 寫入位址遞增 */
nwrite -= pagefre;
/* 更新剩餘未寫入資料量 */
pagepos++
; pageoff =0;
/* 頁內偏移位址置零 */
/* 根據剩餘量計算下次寫入資料量 */
pagefre = nwrite >=
(stm32flash_page_size >>1)
?(stm32flash_page_size >>1)
: nwrite;
}/* 加鎖flash */
hal_flash_lock()
;return
((numtowrite - nwrite)
<<1)
;}uint32_t
flash_writenotcheck
(uint32_t address,
const
uint16_t
*buffer,
uint32_t numtowrite)
return
(numtowrite - nwrite);}
intflash_erasepage
(uint32_t pageaddress,
uint32_t nbpages)
return0;
}end of file
STM32F1系列選型參考
意法半導體的stm32f1系列主流mcu滿足了工業 醫療和消費類市場的各種應用需求。憑藉該產品系列,意法半導體在全球arm cortex m核心微控制器領域處於領先地位,同時樹立了嵌入式應用歷史上的里程碑。該系列在整合一流的外設和低功耗 低電壓執行等基礎上實現了高效能,同時還以可接受的 實現了高整合...
STM32F1系列 map檔案分析
我們通過學習stm32f1知道,想要優化 就必須知道工程的rom和ram的占用情況。所以,我們就要用到.map檔案,通過分析.map檔案,可以方便檢視工程rom和ram的占用情況,包括單個原始檔甚至每個函式的rom。問 那.map到底可以分為幾個部分呢?段 section 描述映像檔案的 和資料塊。...
STM32F4與STM32F1的區別
作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...