你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1(Flash 读保护)

[复制链接]
XinLiYF 发布时间:2019-2-9 17:43
本帖最后由 XinLiYF 于 2019-2-9 17:45 编辑

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,程序源码
  1. /**
  2.   * @brief  Set flash read protection.
  3.   * @param  [in] state: Flash read protection state, true: enable protection, false: disable protection.
  4.   * @retval true:  Successful operation.
  5.   * @retval false: Operation failed.
  6.   */
  7. bool SetFlashReadProtection(bool state)
  8. {
  9.   FLASH_OBProgramInitTypeDef OptionsBytesStruct = {0};
  10.   HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
  11.   
  12.   if(state == true)
  13.   {
  14.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0)
  15.     {
  16.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
  17.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_1;
  18.       
  19.       HAL_FLASH_Unlock();
  20.       HAL_FLASH_OB_Unlock();
  21.       
  22.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
  23.       {
  24.         HAL_FLASH_OB_Lock();
  25.         HAL_FLASH_Lock();
  26.         
  27.         return false;
  28.       }
  29.       
  30.       HAL_FLASH_OB_Lock();
  31.       HAL_FLASH_Lock();
  32.     }
  33.   }
  34.   else
  35.   {
  36.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_1)
  37.     {
  38.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
  39.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_0;
  40.       
  41.       HAL_FLASH_Unlock();
  42.       HAL_FLASH_OB_Unlock();
  43.       
  44.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
  45.       {
  46.         HAL_FLASH_OB_Lock();
  47.         HAL_FLASH_Lock();
  48.         
  49.         return false;
  50.       }
  51.       
  52.       HAL_FLASH_OB_Lock();
  53.       HAL_FLASH_Lock();
  54.     }
  55.   }
  56.   
  57.   return true;
  58. }
复制代码



收藏 2 评论6 发布时间:2019-2-9 17:43

举报

6个回答
奏奏奏 回答时间:2019-2-10 08:46:00
我的疑问是Flash读保护后,是不是还可以调试DEBUG?
还是说这么做了以后只能全部FLASH擦除后,才可以再次使用调试。
wudianjun2001 回答时间:2019-2-12 08:26:11
奏奏奏 发表于 2019-2-10 08:46
我的疑问是Flash读保护后,是不是还可以调试DEBUG?
还是说这么做了以后只能全部FLASH擦除后,才可以再次使 ...

读保护以后不能DEBUG了,要不然保护就没用了。
下次要擦FLASH以后才能再次使用
丿JC 回答时间:2019-2-15 09:29:32
学习 学习
any012 回答时间:2019-2-15 10:40:42
设置读写保护后,就不能用stlink调试了。用stlink解除读写保护时,会自动把flash全部擦除,好像是。
keijio 回答时间:2019-2-15 14:24:52
跟专用的工具有啥区别?
XinLiYF 回答时间:2019-2-20 14:58:24
keijio 发表于 2019-2-15 14:24
跟专用的工具有啥区别?

量产的时候不需要专用的的工具进行加密。

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版