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

STM32F1(Flash 读保护)

[复制链接]
XinLiYF 发布时间:2019-2-9 17:43
本帖最后由 XinLiYF 于 2019-2-9 17:45 编辑 ' e. _) g% |7 w" {
  b+ ~; w# j' L
STM32F1(Flash 读保护)
; o4 i* t$ F' R0 S9 j1 `8 O
1,目的
! C! ~) J! D( v) a        在实际的产品发布中,如果不对储存在单片机 Flash 中的程序做一些保护的话,就有可能被一些不法公司,通过仿真器(J-Link,ST-Link 等)把 Flash 中的程序读取回来,得到 bin 文件或 hex 文件,然后去山寨产品。所以我们需要对程序进行保护,一种比较简单可靠的方法就是把 Flash 设置成读保护。) G3 \  l* Z1 C: G. [* R" U7 l

3 y8 i9 \% U1 n! B4 P2,开发环境
3 L' f& S1 d  @. B        1,适用芯片:STM32F1 全部芯片
- v% T, K. z9 |& K/ W        2,固件库:STM32Cube_FW_F1_V1.6.16 C3 w5 \" l% A& V. T
        3,IDE:MDK525
$ @& [- h, ~+ M! d' A! a. r5 ~# r1 |
3,程序源码2 m7 Z% B/ B( e+ f* h+ N/ T
  1. /**% E' x. O  B# ~6 K
  2.   * @brief  Set flash read protection.
    $ z( B% a2 Q) M
  3.   * @param  [in] state: Flash read protection state, true: enable protection, false: disable protection.
    8 ^9 m- i- @4 r8 \* N5 s3 O& F* T
  4.   * @retval true:  Successful operation.
    . c9 I8 c" i: ]! Y$ S# c; D4 f
  5.   * @retval false: Operation failed.
    ; h0 y& S  j4 n$ U
  6.   */
    9 R* b$ N" l- j4 z
  7. bool SetFlashReadProtection(bool state)
    % f" t- ]" A- d1 r: P
  8. {
    " A% ~/ Q" r# O) L. i4 ~. ^: ~! e' }
  9.   FLASH_OBProgramInitTypeDef OptionsBytesStruct = {0};
    6 p, b: {1 [6 y/ \- c; _  o( `0 r* a
  10.   HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
    & X, D, b* R# q) K  S  m5 ?  N  \
  11.   : C- o. l+ d  {& F
  12.   if(state == true)
    + n+ p$ b3 w7 ~. [" ^8 Y2 \+ v
  13.   {
      k* d( k8 Z# _/ i2 J" X5 b: N
  14.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0)4 F, [0 P" H( D. y. E! ~
  15.     {  n3 ^0 Z/ `% `' R/ I& |1 m, }) x
  16.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;5 Y5 ]2 Q; M, }
  17.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_1;
    " B" |7 j, `- \  ~1 l
  18.       6 [- C0 k& d! p6 b) e9 {/ M
  19.       HAL_FLASH_Unlock();
    - x& b. E/ D. ?
  20.       HAL_FLASH_OB_Unlock();
    * j& x, J, ~3 _2 R1 R9 A4 f" n+ f
  21.       
    ; l+ j  {* o8 f$ n4 M  z+ q7 H
  22.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
    * q9 F# {% y; m1 m
  23.       {# F( R+ M7 d4 \! B; f' `1 z5 d7 _) L( F
  24.         HAL_FLASH_OB_Lock();8 m7 p) Z& C/ \2 O4 S
  25.         HAL_FLASH_Lock();
    # X) ~' E, L& _' w; T1 k; O
  26.         
    ! e& Y( B- o: s0 P3 q0 G9 T
  27.         return false;) ]' P' q9 W) B" G, l. O
  28.       }
    1 I8 X/ I1 N0 Q! P
  29.       , B+ g- a4 O: b  U
  30.       HAL_FLASH_OB_Lock();
    ) \' Z4 c% [) d3 j5 ]' u
  31.       HAL_FLASH_Lock();
    ; f7 S: h  `; Y0 r- t8 W# ], y9 |7 K
  32.     }2 z  Y! x" Z( _$ y% G. w- o7 S
  33.   }
    ! k8 x" p1 x, h! X2 t
  34.   else
    9 e+ [5 l4 F& h" X, s( |. ]
  35.   {
    : L! J* B8 W# r. m
  36.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_1)3 O! p  [9 W6 p
  37.     {5 y* T- O0 f6 R& ?0 P, `: k
  38.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;+ K7 Z! U% b* x  `) F% ]
  39.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_0;9 S& }; q0 C: `+ T* }! S& o9 x, {
  40.       ; W; j/ `* ^5 U: f9 a
  41.       HAL_FLASH_Unlock();% T$ r& ^  O" W$ ^+ \
  42.       HAL_FLASH_OB_Unlock();* B- H1 Z0 X0 `8 c1 N
  43.       
    . M3 t8 l0 P4 m- ?1 X1 J
  44.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)) \& k4 y) L( E% a
  45.       {
    5 F7 y% K" J; S; ]
  46.         HAL_FLASH_OB_Lock();$ d7 T0 ]  G3 \: o7 h% l. O
  47.         HAL_FLASH_Lock();
    + c$ X6 O3 W: _# |0 h7 Y! m
  48.         
      }) @9 E# m6 H2 d& y% E
  49.         return false;8 R& ?/ A6 [$ R' `- b' u
  50.       }
    : \2 T1 `# c. {, N, s6 C) H
  51.       6 o/ Q/ W* i/ x' i( O
  52.       HAL_FLASH_OB_Lock();' e  ~+ G) K& U# _( H2 B
  53.       HAL_FLASH_Lock();
    3 p3 m9 j# G# @# L# j
  54.     }7 N/ w# u+ G8 J4 A
  55.   }5 c, @! B) u1 m% Q8 u
  56.   
    5 b' Z# k. W4 H, d
  57.   return true;
    ! _5 d5 ?& L+ u  M
  58. }
复制代码
& E" s" T; u6 c& @/ W9 W9 `
9 _" x4 G7 q9 t

& i$ ^% Q: ~$ f4 w9 c4 @
赞 收藏 2 评论6 发布时间:2019-2-9 17:43

举报

6个回答
奏奏奏 回答时间:2019-2-10 08:46:00
我的疑问是Flash读保护后,是不是还可以调试DEBUG?. C7 k6 h: X2 V9 B
还是说这么做了以后只能全部FLASH擦除后,才可以再次使用调试。
wudianjun2001 回答时间:2019-2-12 08:26:11
奏奏奏 发表于 2019-2-10 08:469 n- r+ Y! V' N! o4 s
我的疑问是Flash读保护后,是不是还可以调试DEBUG?6 M4 H( i" ?& B& C) ]$ q- c
还是说这么做了以后只能全部FLASH擦除后,才可以再次使 ...

. |5 x1 a" z/ _( O读保护以后不能DEBUG了,要不然保护就没用了。
( u* F9 G# I  A/ u下次要擦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
跟专用的工具有啥区别?
  Q5 h1 z' g( w5 U
XinLiYF 回答时间:2019-2-20 14:58:24
keijio 发表于 2019-2-15 14:24
" `0 t! {7 V) x- k% X跟专用的工具有啥区别?

' B& X' E& ^! \$ a( \$ B/ \0 n量产的时候不需要专用的的工具进行加密。

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版