STM32L4系列內部FLASH雙字編程示例

發(fā)布時(shí)間:2020-4-21 11:07    發(fā)布者:嵌入式人生17
STM32L4系列內部FLASH雙字編程示例
有人使用STM32L476芯片開(kāi)發(fā)產(chǎn)品,他想在內部FLASH空間特定位置寫(xiě)些數據,發(fā)現總是失敗,并補充說(shuō)之前使用STM32F1系列、STM32L1系列卻沒(méi)有類(lèi)似問(wèn)題。
其實(shí),針對STM32L4的內部FLASH編程,跟STM32F1/L1系列是不同的,其中STM32F1的內部FLASH編程僅支持半字編程,STM32L1的內部FLASH編程主要支持字編程或半頁(yè)編程。而STM32L4系列的內部FLASH編程所支持的則是64位雙字編程或以32個(gè)雙字為單位的快速行編程。
對于少量的零星數據編程自然會(huì )選擇64位雙字編程模式,即每次改寫(xiě)Flash內容必須以64位為單位。硬件還針對這64位數據做了8位的ECC,我們用戶(hù)看不到而已。下面簡(jiǎn)單介紹下64位雙字編程過(guò)程。
在基于64位雙字編程時(shí),如果只是就字節或半字進(jìn)行編程則會(huì )產(chǎn)生錯誤;或者盡管使用雙字編程卻沒(méi)有遵循雙字地址對齊【8字節對齊】時(shí)也會(huì )產(chǎn)生錯誤。
這里我使用ARM MDK V2.9開(kāi)發(fā)環(huán)境,借助于STM32L476_NUCELO開(kāi)發(fā)板演示一下對內部FLASH某個(gè)位置寫(xiě)幾個(gè)64位數據的實(shí)現過(guò)程【寫(xiě)之前相關(guān)區域已經(jīng)被擦除過(guò)了】。
我通過(guò)IDE將內部FLASH最后的0x1000地址空間預留出來(lái)用于填寫(xiě)些數據,即我將內部FLASH分成2塊,將最后的0x1000FLASH空間劃了出來(lái)。如下圖所示:【這里的芯片是STM32L476RGT6,下面只演示寫(xiě)三個(gè)64位數據!
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9420\wps35.png
我將特定數據區定義在內部FLASH空間0x80ff000開(kāi)始的地方。
#define  Address_Const     (0x80FF000)
另外還定義了一個(gè)64位地址指針和一個(gè)64位數據數組。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9420\wps36.png
相關(guān)執行參考代碼如下:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9420\wps37.png
代碼是基于STM32Cube庫來(lái)組織的,連續寫(xiě)了三個(gè)64位的數據到指定的FLASH空間。其中主要涉及到一個(gè)FLASH編程函數HAL_FLASH_Program(),它有三個(gè)變量,分別是編程模式,待編程的FLASH地址以及用于編程的數據。
代碼比較簡(jiǎn)單,對欲編程的地址做檢查確認,然后進(jìn)行FLASH編程開(kāi)鎖,清除可能存在的各種掛起狀態(tài)標志,進(jìn)行雙字編程,之后對FLASH寄存器訪(fǎng)問(wèn)進(jìn)行上鎖。
現在基于上面的代碼看看運行結果:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9420\wps38.png
我們可以看到在指定的FLASH地址空間寫(xiě)三個(gè)64位數據。
在上面介紹64位雙字編程規則時(shí),可能有人會(huì )問(wèn),如果我遵循了8字節地址對齊,待寫(xiě)的數據也不是字節或半字,而是一個(gè)字會(huì )怎么樣呢?那你也得湊成2個(gè)字來(lái)寫(xiě),方能完成一次寫(xiě)操作。
比方基于上面測試代碼,僅僅將每次待寫(xiě)的數據改為32位字,最后結果便是高位字被填0了。就像下面這樣:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9420\wps39.png
好,關(guān)于STM32L4系列內部FLASH雙字編程模式就介紹到這里。整個(gè)過(guò)程應該說(shuō)不難,只要注意到各個(gè)細節就好。
趁此再拋磚引玉似地做些提醒:STM32系列眾多,各個(gè)系列的內部FLASH編程模式以及頁(yè)或扇區的容量規劃、地址安排往往各有差異,在FLASH編程時(shí)千萬(wàn)別跟著(zhù)慣性或感覺(jué)走。還有,不同的編程模式往往對芯片的電源電壓有不同的要求,這點(diǎn)也要特別特別特別注意。

本文地址:http://selenalain.com/thread-585553-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页