<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/單片機知識點總結/directory.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
因為用到了HC32F460系列的單片機的flash存儲數據,所以寫了這套程序.
目的是為了在便於存儲.
關於407的Flash
寫數據時最小寫的單位是 4字節
擦除的時候,最小擦除的單位是1個扇區(8KB)
讀取數據的時候最大讀取的位寬是128位(16字節)
關於提供的基本的flash操作函數
1.讀取
2.擦除
3.寫入
關於本節封裝的Flash寫讀函數思路
1.使用其中一個扇區存儲數據,假設使用11扇區,准備一個固定大小(假設是512)的u32類型的數組用來存儲數據
記住一句話:只要擦除過了的地方,不需要再次擦除就可以寫入數據
在下載程序的時候.默認所有的flash都是已經擦除過的.
2.第一次存儲
把整個數組全部寫到扇區的最前面
3.第二次存儲(不需要擦除,直接寫入就可以,因為后面都已經擦除過了)
把整個數組緊接着寫到后面
4.第三次存儲(不需要擦除,直接寫入就可以,因為后面都已經擦除過了)
把整個數組緊接着寫到后面
5.假設寫到最后了
我后面空了一點是因為定義的數組大小不一樣,不一定正好占滿.
6.接着再寫
檢測不夠了以后,擦除下這個扇區,把數據從頭開始存儲.
源碼使用
1.我先說一下flash_helper 的使用
2.提示:存儲數據的時候是把數據放到這個數組里面
3.使用flash_helper存儲數據
//初始化flash存儲 //同時把先前存儲的數據讀取出來放到 flash_helper_struct.FlashHelperData數組里面 flash_helper_init(32*FLASH_SECTOR_SIZE);//使用第32個扇區存儲 //設置存儲的數據 flash_helper_struct.FlashHelperData[0]=12345; flash_helper_struct.FlashHelperData[1]=6666; //調用函數把數組數據存儲到flash flash_helper_update();
4.讀取存儲的數據(直接從數組獲取) 推薦
因為數組里面的值就是存儲在flash里面的,所以數組里面的值就是存儲在flash里面的值
flash_helper_struct.FlashHelperData[0] flash_helper_struct.FlashHelperData[1]
5.讀取存儲的數據(從flash里面獲取)
這個函數一般用於查看下存儲的對不對, 不過需要是調用完flash_helper_update函數以后, 然后接着使用
例如,獲取剛剛數組的第一位存儲在flash里面的值
uint32_t data; flash_helper_get(0,&data,1); printf("get0=%d\r\n",data);
例如,獲取多個(下面的例子是獲取前兩位)
推薦使用方式(新建一個falsh_data文件)
1.存儲數據如果一個u32就存儲一個數據顯得有些浪費,咱們應該使用共用體來操作一下
2.然后舉個例子(讓一個u32可以存儲多個數據)
3.如果存儲字符串
假設這個字符串最大不到1024字節, 咱可以先建一個1024的數組,然后
移植使用
把下面的文件放到自己的工程里面即可
結語
代碼寫多了呢其實寫的是思路和思想,當然好的思路和思想需要建立在雄厚的底子之上