查看: 518|回复: 6

[原创] STM32F1(Flash 读保护)

[复制链接]

该用户从未签到

28

主题

90

帖子

17

蝴蝶豆

金牌会员

最后登录
2019-4-16
发表于 2019-2-9 17:43:03 | 显示全部楼层 |阅读模式
本帖最后由 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. }
复制代码



回复

使用道具 举报

该用户从未签到

33

主题

364

帖子

113

蝴蝶豆

论坛元老

最后登录
2019-4-24
发表于 2019-2-10 08:46:00 | 显示全部楼层
我的疑问是Flash读保护后,是不是还可以调试DEBUG?
还是说这么做了以后只能全部FLASH擦除后,才可以再次使用调试。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

1559

帖子

474

蝴蝶豆

论坛元老

最后登录
2019-4-24
发表于 2019-2-12 08:26:11 | 显示全部楼层
奏奏奏 发表于 2019-2-10 08:46
我的疑问是Flash读保护后,是不是还可以调试DEBUG?
还是说这么做了以后只能全部FLASH擦除后,才可以再次使 ...

读保护以后不能DEBUG了,要不然保护就没用了。
下次要擦FLASH以后才能再次使用
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

11

帖子

0

蝴蝶豆

新手上路

最后登录
2019-2-15
发表于 2019-2-15 09:29:32 | 显示全部楼层
学习 学习
回复

使用道具 举报

该用户从未签到

66

主题

678

帖子

2

蝴蝶豆

论坛元老

最后登录
2019-4-24
发表于 2019-2-15 10:40:42 | 显示全部楼层
设置读写保护后,就不能用stlink调试了。用stlink解除读写保护时,会自动把flash全部擦除,好像是。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2019-2-15
发表于 2019-2-15 14:24:52 | 显示全部楼层
跟专用的工具有啥区别?
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

90

帖子

17

蝴蝶豆

金牌会员

最后登录
2019-4-16
 楼主| 发表于 2019-2-20 14:58:24 | 显示全部楼层
keijio 发表于 2019-2-15 14:24
跟专用的工具有啥区别?

量产的时候不需要专用的的工具进行加密。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2019-4-24 17:47 , Processed in 0.106413 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表