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;
}