標(biāo)題: STM32對芯片啟動讀保護,實現(xiàn)加密(詳解) [打印本頁]

作者: irisice008    時間: 2021-5-27 15:03
標(biāo)題: STM32對芯片啟動讀保護,實現(xiàn)加密(詳解)
STM32可以對存儲在flash上的程序進行讀保護.
•    啟動讀保護后,用戶就不能再讀寫程序了.
•    所以,在燒寫程序之前,需要程序調(diào)用關(guān)閉讀保護.關(guān)閉讀保護后,會自動清空flash上的程序

頭文件位于:#include "stm32f10x_flash.h"

啟動保護,用在main()函數(shù)初始化時調(diào)用:

void Set_Protect(void) //啟動保護
{
  if(FLASH_GetReadOutProtectionStatus() != SET)
  {
    FLASH_Unlock(); //解鎖  
    FLASH_ReadOutProtection(ENABLE);
    FLASH_Lock();//上鎖
  }
}

注意:
當(dāng)代碼第一次調(diào)用Set_Protect()函數(shù)啟動讀保護時。
期間不能再次調(diào)用Off_Protect()函數(shù)關(guān)閉讀保護,需要重新斷電才能關(guān)閉讀保護(因為Flash狀態(tài)啟動讀保護后,不能立即設(shè)置Status=1)

關(guān)閉讀保護,在串口接收某個有效數(shù)據(jù)或按下某個按鍵時,調(diào)用:

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


運行測試
1.第一步,下載程序

2.下載成功后,再次燒寫程序,校驗是否啟動讀保護(因為啟動讀保護后,不能進行讀寫程序了)
  
3.通過ST-LINK Utility工具嘗試連接芯片,發(fā)現(xiàn)確實不能讀數(shù)據(jù)了

然后只要代碼調(diào)用Off_Protect()函數(shù),便可以取消保護了

oid SysLockProtectedProc(u8 nType)
{
        //設(shè)置讀保護:
        if (nType == 0x01)
        {
                if (FLASH_OB_GetRDP() != SET)
                {
                        FLASH_Unlock();

                        FLASH_OB_Unlock();

                        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);

                        FLASH_OB_RDPConfig(OB_RDP_Level_1);
                        FLASH_OB_Lock();
                }
        }
        //解除讀保護
        else
        {
                if (FLASH_OB_GetRDP()  != RESET)
                {
                        FLASH_Unlock();

                        FLASH_OB_Unlock();

                        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);

                        FLASH_OB_RDPConfig(OB_RDP_Level_0);
                        FLASH_OB_Lock();
                }
        }
}

上面這個函數(shù)可以實現(xiàn)讀保護,下載完程序后要斷電,在上電。這樣就無法下載和調(diào)試。需要用STVP全片擦除;蛘呤孪葘懞媒獬Wo的程序。





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1