STM32L0芯片F(xiàn)LASH編程示例及提醒
來源 | 茶花MCU
這里就STM32L053芯片的FLASH編程做個簡單演示并做些提醒,以供有需要的人參考。 一般來講,FLASH編程主要包括擦除、代碼編程、Option字修改操作,關(guān)于Option編程下面不做介紹。STM32L0芯片的擦除除了支持全片擦除外,再就是支持頁擦除,每頁的大小為128Bytes,即32個字。編程可以按字或按半頁【64Bytes】編程。
單頁擦除、單字編程以及半頁編程的時間都是一樣的,大概3.2ms左右,這點在芯片數(shù)據(jù)手冊上也明確出來了。
下面演示字編程、頁編程、頁擦除的操作。
這里我先以字編程模式寫5個字,然后以半頁編程模式對5個半頁進行FLASH編程,并記錄二者所花的時間,看看字編程時間跟半頁編程的是否一致。
另外,在完成5個半頁編程之后,又進行了頁擦除操作,擦除剛才已編程的5個半頁中的1頁,即最后應(yīng)只剩下3個半頁的內(nèi)容【注:對于STM32L0系列芯片,內(nèi)部FLASH被擦除后內(nèi)容為全0】。
下面代碼截圖是基于STM32Cube庫來組織的,主要涉及到字編程、半頁編程、頁擦除三個操作,對應(yīng)著綠色下劃線的3個庫函數(shù)。
另外,Period1和Period2分別來存放寫5個字和5個半頁的編程時間,并放在指定的FLASH位置。
編譯運行后我們可以看到如下結(jié)果:
上面截圖是經(jīng)過運行后芯片內(nèi)部的部分FLASH空間的內(nèi)容。5個紅色方框圍住的數(shù)據(jù)乃5個字編程后的結(jié)果,藍色方框內(nèi)的數(shù)據(jù)乃5次半頁編程后的結(jié)果,但最終只看到3個半頁的編程內(nèi)容,那是因為后面兩個半頁的內(nèi)容經(jīng)頁擦除操作后而消失了。
用來統(tǒng)計編程時間的定時器的計數(shù)頻率為1MHz,顯然Period1和Period2基本是相等的,將它們再除以5后所得編程時間都是3.3ms的樣子。顯而易見,進行批量代碼編程時采用半頁編程更高效。
前面說了做半頁編程時其執(zhí)行代碼需放到RAM運行,該代碼在STM32cube庫的這個文件stm32l0xx_hal_flash_ramfunc.c里面。實現(xiàn)該操作對于不同的IDE在處理上稍有差異。這里基于ARM MDK進行簡單配置,劃分點RAM出來給它用。
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!