前言
今天總結“STM32F103片內FLASH編程”,對于學習編程的人來說“FLASH”這個詞肯定很熟悉,因為FLASH主要用于存儲數據。對于STM32來說,內部FLASH的容量有大有小,從16K到2M不等,主要看芯片的型號。
對于剛從51或者430轉入學習ARM-Cortex M芯片的人來說,可能只知道內部FLASH是拿來裝載程序的,事實上Cortex M芯片內部FLASH的可以拿來編程的,而且還可以像外部FLASH一樣存儲數據。對,今天提供的工程就是使用內部FLASH像外部FLASH一樣讀寫數據,而且不是塊或者頁編程(即不覆蓋臨近地址數據)。
在實際的開發中,內部FLASH存儲數據也是很重要的一點,特別是一些不常修改,而且很重要的標志位,或者一些配置等,存儲在內部FLASH是很常見的。但是,這個地址一定要避開程序儲存的地址(我計劃后期整理編程地址規范及要求)。
每天總結的不僅僅是基礎,而是重點,不起眼的重點,容易被人忽視的重點。關注微信公眾號“EmbeddDeveloper”還有更多精彩等著你。
今天提供下載的“軟件工程”都是在硬件板子上進行多次測試、并保證沒問題才上傳至360云盤。
今天的軟件工程下載地址(360云盤):
https://yunpan.cn/cSFA6h6kwu5jb訪問密碼 bc34
STM32F10x的資料可以在我360云盤下載:
https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90
內容講解
工程概要說明: 提供工程的源代碼主要就是兩個接口,一個寫,一個讀。
void FLASH_WriteNWord(uint16_t* pBuffer, uint32_t WriteAddr, uint16_t nWord);
void FLASH_ReadNWord(uint16_t* pBuffer, uint32_t ReadAddr, uint16_t nWord);
相信經常編程的人都明白函數接口的意思(我的命名規則還是算比較人性化的),就是和常見的訪問外部FLASH一樣,不會覆蓋數據,我已經在實際工作中應用而且商業化了。
主要在地址“ADDR”處寫一個標志位,在地址“ADDR + 1”連續寫一串數據。如果標志位已經是“寫過”,則不會再次寫入數據,只會讀取數據,意思就是說數據只寫一次,以后每次只是讀取數據(就是保證掉電后數據會不會丟失)。每次讀取數據,通過串口打印出以前寫入的數據是否正確。
提供的工程以簡單為原則,詳細中文注釋,方便自己方便大家。
關于“STM32F103 片內FLASH編程”我把重要的幾點在下面分別講述:
一、寫函數接口
該函數位于flash.c文件下面;
注意:
A.參數pBuffer是數據緩沖區,是16位的,而不是8位的。(其實這里可以整理為8位的,由于時間有限,如果有需要,請微信里回復我,我抽時間整理一下)。
B.參數長度也是16位的數量。
C.地址是內部FLASH地址,可別溢出了,也別和程序沖突。最好看看你的程序大小及芯片容量。
二、讀函數接口
該函數位于flash.c文件下面;
注意的地方和上面寫函數接口一樣,主要是參數。
三、讀寫應用
該函數位于main.c文件下面;
藍色表示讀寫標志位
紅色表示讀寫數據
看一下就知道程序的流程是:“數據標志位”和“數據”都只寫一次,而每次上電讀一次標志位,再讀數據。
這里的“數據標志位”地址就在“數據”前面。
四、今天的重點
重點A.頁的大小:STM32F1小、中容量是1K,而大容量是2K,對于編程這里是有差異的。
重點B.STM32系列芯片中有很大一部分頁的大小都是規則的,也就是說都是1K或許2K大小,學過其他系列芯片的人可能知道,在其他很多芯片中也有不是規則的,如STM32F4中基本都不是規則的(如下圖F4芯片),有的一塊16K、128K等不規則。這樣的芯片對于今天提供的工程就不適用,今天提供工程適用于內部FLASH規則大小的芯片。
說明
今天提供的軟件工程基于STM32F103大容量芯片,中等及小容量芯片也使用,只要修改flash.h文件一個宏(頁大小就可以)。其實只要適當修改工程的部分配置,STM32F1的芯片都適用。
-
FlaSh
+關注
關注
10文章
1633瀏覽量
147942 -
STM32F103
+關注
關注
33文章
477瀏覽量
63600 -
STM32F10
+關注
關注
0文章
45瀏覽量
15624
發布評論請先 登錄
相關推薦
評論