關於STM32的IAP和flash的坑

2021-10-10 13:13:46 字數 687 閱讀 5259

我用的是stm32f103,正點原子的庫函式版本。剛開始用的用的是stm32c8t6,後來發現程式編譯完都有28k,flash總共64k,考慮的要iap,換了stm32cbt6,封裝都是 lqfp-48的,但是flash大一點,**貴一點,咋們不差錢,免得後面不夠用(最後換了國產gd32cbt6)。

2k留給變數儲存,保證掉電不丟失。在韓斌好友的啟發下,增加了對電機狀態的儲存,確保掉電重啟後電機恢復到上次執行的狀態,真雞兒天才,我怎麼沒想到。

stm32的flash根據大小有分別

flash小於256k的,每頁1024位元組,就是1kb

flash大於256k的,每頁2048位元組,就是2kb

每次寫flash必須一頁一頁寫入,這個是最重要的,劃重點了。所以寫flash,比較麻煩有幾個步驟要記錄一下:

1.先判斷一下,你要寫入的位址是否合理?

2.再解鎖flash,這時候中斷全部會被遮蔽,觸發不了。

3.接著讀取整頁的資料,看看資料是不是都是0xffff(預設擦除後就是這樣),如果不是就擦除整頁內容,然後把剛剛讀出來資料和你要寫入的資料整合,重新寫入flash的這頁裡面。

4.然後給flash上鎖

5.最後等待2個系統時鐘,讀取flash值,是否跟要寫入的變數一樣。需要注意:主頻24m以下使用0等待,24m-48m使用1等待,48m~72m使用2等待。

沒了,我就記著這麼多,有點困,先睡了?

STM32的IAP韌體公升級

an2606 system memory boot mode an3155 usart for bootloader 指令集詳解 an2557 iap using usart 將0x08000000開始的main memory空間劃分為兩部分,其中低位址空間用於儲存iap driver,剩餘空間用於...

stm32 利用iap更新程式

在官方軟體庫的 core cm3.h 檔案裡 直接提供了 系統復位的函式void softreset void 方式一 stm32 ram足夠大的情況下使用ram來快取新的程式 一般程式的bin檔案大小只有幾十k 第一步自定義乙個協議 例 第二步 接收到進入boot程式命令即呼叫softreset軟...

IAP公升級日記(STM32晶元)

就是我們的使用者區程式 以我使用的stm32f030cct6為例,其有256kb的flash記憶體空間,m0的核心,其記憶體對映圖如下 從圖中可以看出 該mcu的主flash位址是從0x08000000處開始,又因該款mcu的flash大小為256kb,所以該款mcu的位址區間為0x08000000...