1.在main函数中加入启用读保护功能。
5 T7 S. n, z$ s: h O
k# ~) o/ |7 l8 o! B: [
* G9 c% Z7 b" C U/ n. S; t1 z! y; p: a; A; o/ r
2.读保护函数
; x6 B \0 O. I8 P( R, k( I' F# E+ }* Y) z6 m
" h6 u, U3 c; ~. r% {- E
3 |& r) A2 _' b6 O/ r" e0 i! f% A
4 a3 h' H a" F) c& h1 b: o) e. q0 B! i0 y- w6 C* n
- int main(void)
3 t; S8 K' e# S$ C - {
! y7 u! _1 b+ B# U5 u6 q6 T - Flash_EnableReadProtection();
t3 E& U" [. q5 Y" ]3 s - While(1)6 l: D5 k$ r3 B& k0 h
- {
- L7 Q4 N" B1 `, K# p5 {7 q - 9 P1 r7 S0 T" H: N" x/ C- Q: E
- }" S3 i P4 {2 ~' a0 w, ^
- }' W6 A- Z- A' q8 \5 Y% C
- J) V/ P! w8 G
- void Flash_EnableReadProtection(void)# Y/ \. s$ W: o
- {
4 R+ m& [+ [0 P6 _
$ X6 k) U L& z: I b( {- FLASH_OBProgramInitTypeDef OBInit;
6 F. V0 t/ V5 P
6 o: l, k) N! n* J' K8 V- __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
" n2 U+ W2 r" T5 |3 l - ( P7 R9 K- t+ b- a- n
- HAL_FLASHEx_OBGetConfig(&OBInit);
- M: ?) g! D- R" C8 [5 D& | - if(OBInit.RDPLevel == OB_RDP_LEVEL_0)
" i# c" C& o0 A9 `1 u - {
7 { y) I2 S3 N9 d @# w - OBInit.OptionType = OPTIONBYTE_RDP;3 D/ F7 c7 |2 S x7 ]+ {
- OBInit.RDPLevel = OB_RDP_LEVEL_1;
, m. W) l8 I; ^ h6 a3 S. ~- K2 d - HAL_FLASH_Unlock();
# C9 L- y! z8 a - HAL_FLASH_OB_Unlock();# z* k( w0 ^: ~! O8 d
- HAL_FLASHEx_OBProgram(&OBInit);
! Z; V! b/ q! j2 Z$ c* f2 S - HAL_FLASH_OB_Lock();) _, _5 C5 t1 U, w. ]0 t
- HAL_FLASH_Lock();
/ n! m- j( c7 [2 a0 c3 B4 G9 r - }: p, J* y+ z2 ~/ x8 x
- __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
* k3 K: r& B2 |* ~3 D8 s9 i - 3 O8 y% X% g- q( m9 w
- }
7 b- X. }, J+ m* k* }; n - % G8 D5 F. a" A
- void Flash_DisableReadProtection(void)- I" W' [- r# w. H# q# ^; ]
- {. X* K: R) [0 F5 V, q) q( @
- 2 O3 i5 x Z: l6 F+ D& x
- FLASH_OBProgramInitTypeDef OBInit;6 L _ j7 H( S
* r! _5 p& I3 W2 {" c2 v. r4 F5 k- __HAL_FLASH_PREFETCH_BUFFER_DISABLE();" Y- a" ^) d1 T* x7 ~( Y7 x+ M
4 @8 t' V4 X( m# y* S( n, j9 K# Z: t- HAL_FLASHEx_OBGetConfig(&OBInit);
% A: l( A# y# @* t5 o - if(OBInit.RDPLevel == OB_RDP_LEVEL_1)2 F2 ^6 i# d7 A3 f
- {& g4 S% `& q2 P
- OBInit.OptionType = OPTIONBYTE_RDP;
6 w) [7 ]: x5 O# N3 w) n" [' { W - OBInit.RDPLevel = OB_RDP_LEVEL_0;
; E! q& q: V( K% ] - HAL_FLASH_Unlock();! |( | `) ]! ^# k- G
- HAL_FLASH_OB_Unlock();, V7 ~& L. G4 \1 K- d* ^, J
- HAL_FLASHEx_OBProgram(&OBInit);
6 N. K: v* j z0 B/ m - HAL_FLASH_OB_Lock();
- Y" r* @' n# h - HAL_FLASH_Lock();
( a, r% q9 d; O' j5 p& E - }. H* `2 C* e# `- x! z# g
- __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
9 I& W) {. H) C9 S, a3 P! ]
1 Q5 r4 Y- R$ ~$ y' }7 J5 }- }
; @, [: G* E8 r, \# u1 Q. e4 v
复制代码
8 q& }% l7 o4 h# o9 N" F+ H
# n" a1 y) C% g+ e) [* z |