日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

stm32对flash的读写保护与解除

發(fā)布時間:2023/12/4 综合教程 58 生活家
生活随笔 收集整理的這篇文章主要介紹了 stm32对flash的读写保护与解除 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、STM32對內(nèi)部Flash的保護(hù)措施 ?
? ? ? ? 所有STM32的芯片都提供對Flash的保護(hù),防止對Flash的非法訪問 - 寫保護(hù)和讀保護(hù)。?
? ? ? ? 1、讀保護(hù)即大家通常說的“加密”,是作用于整個Flash存儲區(qū)域。一旦設(shè)置了Flash的讀保護(hù),內(nèi)置的Flash存儲區(qū)只能通過程序的正常執(zhí)行才能讀出,而不能通過下述任何一種方式讀出:A、 通過調(diào)試器(JTAG或SWD); B、從RAM中啟動并執(zhí)行的程序;?
? ? ? ? 2、寫保護(hù)是以四頁(1KB/頁) Flash存儲區(qū)為單位提供寫保護(hù),對被保護(hù)的頁實(shí)施編程或擦除操作將不被執(zhí)行,同時產(chǎn)生操作錯誤標(biāo)志。 ??
? ?讀與寫設(shè)置的效果見下表:?

讀保護(hù) 寫保護(hù) 對Flash的操作功能
有效 有效 CPU只能讀,禁止調(diào)試和非法訪問。
有效 無效 CPU可以讀寫,禁止調(diào)試和非法訪問,頁0~3為寫保護(hù)。
無效 有效 CPU可讀,允許調(diào)試和非法訪問。
無效 無效 CPU可以讀寫,允許調(diào)試和非法訪問。

二、當(dāng)Flash讀保護(hù)生效時,CPU執(zhí)行程序可以讀受保護(hù)的Flash區(qū),但存在兩個例外情況:?
? ? ? ? 1、調(diào)試執(zhí)行程序時;?
? ? ? ? 2、從RAM啟動并執(zhí)行程序時?
? ? ? ? STM32還提供了一個特別的保護(hù),即對Flash存儲區(qū)施加讀保護(hù)后,即使沒有啟用寫保護(hù),Flash的第 0 ~ 3 頁也將處于寫保護(hù)狀態(tài),這是為了防止修改復(fù)位或中斷向量而跳轉(zhuǎn)到RAM區(qū)執(zhí)行非法程序代碼。?
三、Flash保護(hù)的相關(guān)函數(shù)?
? ?FLASH_Unlock(); ? //Flash解鎖?
? ?FLASH_ReadOutProtection(DISABLE); ?//Flash讀保護(hù)禁止 ??
? ?FLASH_ReadOutProtection(ENABLE); ? //Flash讀保護(hù)允許

四、stm32設(shè)置讀保護(hù)和解除讀保護(hù)操作

1、功能:讀保護(hù)設(shè)置后將不能讀出flash中的內(nèi)容;當(dāng)解除讀保護(hù)的時候stm32會自動擦除整個flash,起到保護(hù)數(shù)據(jù)的作用。

2、設(shè)置讀保護(hù):在程序的開頭加入“設(shè)置讀保護(hù)”的代碼即可,每次運(yùn)行代碼時都檢查一下,如果沒有開就打開,如果打開了就跳過。

3、解除讀保護(hù):解除讀保護(hù)可以設(shè)置在按鍵里面,方便實(shí)現(xiàn)解鎖,也可以設(shè)置在命令中。

4、設(shè)置讀保護(hù)的代碼:

int main(void)
{...if (FLASH_GetReadOutProtectionStatus()!=SET)  //檢查設(shè)置讀保護(hù)與否 { FLASH_Unlock();                           //寫保護(hù)時可以不用這句話,可用可不用FLASH_ReadOutProtection(ENABLE);          //設(shè)置讀保護(hù) }...while(1){...}
}

上面的代碼執(zhí)行后,使用j-link就不能讀出程序了,實(shí)現(xiàn)了代碼讀保護(hù)。

注意:芯片讀保護(hù)后,無法再次燒寫新的程序到flash中,必須要解除讀保護(hù)才可以,測試需謹(jǐn)慎。

5、解除讀保護(hù)代碼:

void Off_Protect(void) //關(guān)閉保護(hù)
{ if(FLASH_GetReadOutProtectionStatus() != RESET){FLASH_Unlock(); //不解鎖FALSH也可設(shè)置讀保護(hù),可用可不用FLASH_ReadOutProtection(DISABLE);FLASH_Lock();   //上鎖 } 
}

程序中設(shè)置一個按鍵或者命令,可以隨時解除flash的讀保護(hù),讓芯片又可以重新燒錄程序。如果沒有留,還可以專門寫一個程序,下載到RAM中去運(yùn)行,用來解除讀保護(hù)。執(zhí)行后,flash會自動全部擦除。

int main(void)
{Chip_Init();FLASH_Unlock(); //不解鎖FALSH也可設(shè)置讀保護(hù),可用可不用FLASH_ReadOutProtection(DISABLE);
}

五、測試

下載并執(zhí)行設(shè)置讀保護(hù)代碼后,再次下載程序顯示:

說明已經(jīng)啟動了 讀保護(hù),無法再次下載程序了。

通過ST-LINK Utility連接芯片,提示讀保護(hù),無法讀取flash數(shù)據(jù):

這個時候,需要調(diào)用解除讀保護(hù)的代碼即可恢復(fù)。

?

轉(zhuǎn)載自:https://wenku.baidu.com/view/539f9f0754270722192e453610661ed9ad5155fb.html?rec_flag=default&sxts=1560582755950

總結(jié)

以上是生活随笔為你收集整理的stm32对flash的读写保护与解除的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。