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

STM32F1(Flash 读保护)

[复制链接]
XinLiYF 发布时间:2019-2-9 17:43
本帖最后由 XinLiYF 于 2019-2-9 17:45 编辑 0 D& ?: B) }/ M# C( ]) I
/ H& Z6 r; H' O8 Z) s
STM32F1(Flash 读保护)
- _* h* D7 ~* c" e
1,目的
( D' `' P7 y4 O: @( f$ C' Z8 V. X        在实际的产品发布中,如果不对储存在单片机 Flash 中的程序做一些保护的话,就有可能被一些不法公司,通过仿真器(J-Link,ST-Link 等)把 Flash 中的程序读取回来,得到 bin 文件或 hex 文件,然后去山寨产品。所以我们需要对程序进行保护,一种比较简单可靠的方法就是把 Flash 设置成读保护。* J* p1 n7 Z! F* k# W4 y+ o4 v( ~
8 s, z- g3 s6 W+ N/ u
2,开发环境
6 W0 W! \8 m  s* Q        1,适用芯片:STM32F1 全部芯片7 B! r+ h$ h: K4 m: G7 M
        2,固件库:STM32Cube_FW_F1_V1.6.1
4 t. i4 k4 o! c* [        3,IDE:MDK525) t2 o' ~, K) {; v# {

8 r8 O* z+ v8 H, E1 m" c$ V7 E3,程序源码$ y+ B4 [/ W) W, D
  1. /**2 m6 y( m- Q2 u* z
  2.   * @brief  Set flash read protection.
    5 U- T4 h. g# l* B
  3.   * @param  [in] state: Flash read protection state, true: enable protection, false: disable protection." Q; N. {& y+ t9 [% H
  4.   * @retval true:  Successful operation.
    : h' J) |9 ~; l2 C) @) C+ w
  5.   * @retval false: Operation failed.( j+ o/ V9 m+ f3 ?8 Z! J
  6.   */" i1 d) d' V( O) y7 L' L3 L
  7. bool SetFlashReadProtection(bool state)) ?- G5 U5 Y! }0 s5 ~$ s, _8 B. i
  8. {
    6 Y5 r! f1 _: H6 B5 R. j% D4 |) }
  9.   FLASH_OBProgramInitTypeDef OptionsBytesStruct = {0};
    : f& G$ m. b: f$ f$ M1 N- y8 R- e
  10.   HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
    ) |" c8 R7 L+ s8 @& Q- a
  11.   " X4 d8 X( Y- T, L7 v1 ~% Q. T0 N4 m
  12.   if(state == true)" |5 L: \7 G8 O! j' B& w/ ?7 c
  13.   {! s3 O, o5 @- z9 ]
  14.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0)
    , _* f; e" t* `6 n6 r8 P
  15.     {' P. H; w# A3 R2 k3 \
  16.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;. @- p) x: O$ J1 ]6 i5 h
  17.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_1;
    ; f$ Z0 ^" Y' L+ P7 z7 O
  18.       ; O! x9 I+ z, t6 K
  19.       HAL_FLASH_Unlock();7 G0 p" t' Q( |; [1 \( E
  20.       HAL_FLASH_OB_Unlock();" g( ^3 W0 c# F/ k6 h# D
  21.       . w" k. e8 w& m: z, O5 i4 A
  22.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
    % h/ k. V. R- C+ S2 `
  23.       {
    6 D8 w. J+ o- D7 `( `
  24.         HAL_FLASH_OB_Lock();
    ! x1 T3 X6 v, S
  25.         HAL_FLASH_Lock();
    : Y( U: @1 z2 ~) k5 O3 Q
  26.         
    " ~7 \! ?- Q8 d8 H/ N
  27.         return false;
    $ D. y; d# x/ `5 f% R
  28.       }9 N' x3 d: y% L5 c$ A* U; w
  29.       # _& p3 E! Q. ?% E% d; F3 K
  30.       HAL_FLASH_OB_Lock();* l, }# Y- J! v/ n# v  `' Y
  31.       HAL_FLASH_Lock();4 k+ f3 d$ N% s
  32.     }1 s+ P* U2 E1 U5 k' N* j( D7 E& F+ U. e
  33.   }
    ! ]' C- b- d! f2 i, V
  34.   else
    3 H" ]. C" l: r7 q6 @) o  K0 c
  35.   {
    4 A7 l7 f! J. i0 }8 {
  36.     if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_1)
    ( H" K9 r+ Z9 o9 e- m2 g
  37.     {
    1 k& R; [& k  s+ a6 B
  38.       OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;& b" R$ T% Z6 x& ?+ S
  39.       OptionsBytesStruct.RDPLevel   = OB_RDP_LEVEL_0;
    + h. @) c" m2 G5 `  q, _4 p  k
  40.       & }# H- h0 X: a
  41.       HAL_FLASH_Unlock();
    ) G; t* N$ c. Y# s- d! G9 d
  42.       HAL_FLASH_OB_Unlock();$ g& I; U1 a4 s. d  Z! ~& U
  43.       
    + m/ D! ~, V) j
  44.       if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)! w# r( o& u3 q5 S" ]3 ]. e3 X0 _. w
  45.       {
    ( x' g5 v' i3 i$ L! X
  46.         HAL_FLASH_OB_Lock();8 S' b+ J: M' V/ V
  47.         HAL_FLASH_Lock();+ |" v: X# I  x6 y- V
  48.         # T7 y% C6 N7 x! p, j
  49.         return false;. V# {9 j, \- k- I  N# \) j1 H1 B
  50.       }3 O7 i4 Z) d1 }
  51.       - M+ ^) l  q8 K4 X, P4 n* t6 ^! ?
  52.       HAL_FLASH_OB_Lock();# }4 J( z( q" t, o3 B
  53.       HAL_FLASH_Lock();2 t5 v) G0 z- H, U: J# E
  54.     }. {6 ~: `$ q, a( W) E) |
  55.   }
    + r! v! ]8 `4 Y$ W* Q* f
  56.   
    3 P% |9 L. ^; t- Z0 I5 D
  57.   return true;, t, B0 j5 {6 [6 X
  58. }
复制代码
/ M+ C' @  x2 G/ Z; Z
2 h+ m+ t) f9 O6 a! f: k$ a$ L( i3 u

7 O/ t( K& C1 P' U
收藏 2 评论6 发布时间:2019-2-9 17:43

举报

6个回答
奏奏奏 回答时间:2019-2-10 08:46:00
我的疑问是Flash读保护后,是不是还可以调试DEBUG?
& ?: a; e! X& S0 x; Y) ?5 p还是说这么做了以后只能全部FLASH擦除后,才可以再次使用调试。
wudianjun2001 回答时间:2019-2-12 08:26:11
奏奏奏 发表于 2019-2-10 08:46. t- ]% v! N) Y2 g# o. p) ]- S$ N
我的疑问是Flash读保护后,是不是还可以调试DEBUG?# R. `- ~5 S, [9 I& I( M, }5 \# d
还是说这么做了以后只能全部FLASH擦除后,才可以再次使 ...
$ M. c) I7 d* L( b
读保护以后不能DEBUG了,要不然保护就没用了。
% n2 x5 c9 P, ^8 p' D下次要擦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
跟专用的工具有啥区别?
' n9 y& r- K7 M% |7 Q
XinLiYF 回答时间:2019-2-20 14:58:24
keijio 发表于 2019-2-15 14:24
- H, }8 n! I% ?- D6 Q  N+ Y跟专用的工具有啥区别?
& O0 B! |! M! [  i3 N( q- Z1 a
量产的时候不需要专用的的工具进行加密。

所属标签

相似分享

官网相关资源

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