STM32F1(Flash 讀保護)

                                                      STM32F1(Flash 讀保護)

1,目的

        在實際的產品發佈中,如果不對儲存在單片機 Flash 中的程序做一些保護的話,就有可能被一些不法公司,通過仿真器(J-Link,ST-Link 等)把 Flash 中的程序讀取回來,得到 bin 文件或 hex 文件,然後去山寨產品。所以我們需要對程序進行保護,一種比較簡單可靠的方法就是把 Flash 設置成讀保護。


2,開發環境

        1,適用芯片:STM32F1 全部芯片

        2,固件庫:STM32Cube_FW_F1_V1.6.1

        3,IDE:MDK525


3,程序源碼

/**
  * @brief  Set flash read protection.
  * @param  [in] state: Flash read protection state, true: enable protection, false: disable protection.
  * @retval true:  Successful operation.
  * @retval false: Operation failed.
  */
bool SetFlashReadProtection(bool state)
{
  FLASH_OBProgramInitTypeDef OptionsBytesStruct = {0};
  HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
  
  if(state == true)
  {
    if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0)
    {
      OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
      OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_1;
      
      HAL_FLASH_OB_Unlock();
      
      if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
      {
        HAL_FLASH_OB_Lock();
        
        return false;
      }
      
      HAL_FLASH_OB_Lock();
    }
  }
  else
  {
    if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_1)
    {
      OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
      OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_0;
      
      HAL_FLASH_OB_Unlock();
      
      if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
      {
        HAL_FLASH_OB_Lock();
        
        return false;
      }
      
      HAL_FLASH_OB_Lock();
    }
  }
  
  return true;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章