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