17-3-華大單片機HC32F460系列flash存儲方案


<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的數組,然后

 

 

 

 

 

 

移植使用

把下面的文件放到自己的工程里面即可

 

 

結語

代碼寫多了呢其實寫的是思路和思想,當然好的思路和思想需要建立在雄厚的底子之上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM