1
、
STM32
对内部
Flash
的保护措施
所有
STM32
的芯片都提供对
Flash
的保护,防止对
Flash
的非法访问
-
写保护和读保护。
1)
、读保护即大家通常说的
“
加密
”
,是作用于整个
Flash
存储区域。一旦设置了
Flash
的读
保护,内置的
Flash
存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方
式读出:
通过调试器
(JTAG
或
SWD)
;
从
RAM
中启动并执行的程序;
2)
、写保护是以四页
(1KB/
页
) Flash
存储区为单位提供写保护,对被保护的页实施编程或擦
除操作将不被执行,同时产生操作错误标志。
读与写设置的效果见下表:
读保护写保护
对
Flash
的操作功能
有效
有效
CPU
只能读,禁止调试和非法访问。
有效
无效
CPU
可以读写,禁止调试和非法访问,页
0~3
为写保护。
无效
有效
CPU
可读,允许调试和非法访问。
无效
无效
CPU
可以读写,允许调试和非法访问。
2
、当
Flash
读保护生效时,
CPU
执行程序可以读受保护的
Flash
区,但存在两个例外情况:
1)
、调试执行程序时;
2)
、从
RAM
启动并执行程序时
STM32
还提供了一个特别的保护,
即对
Flash
存储区施加读保护后,
即使没有启用写保护,
Flash
的第
0
~
3
页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到
RAM
区执行非法程序代码。
3
、
Flash
保护相关函数
FLASH_Unlock();   //Flash
解锁
FLASH_ReadOutProtection(DISABLE);  //Flash
读保护禁止
FLASH_ReadOutProtection(ENABLE);   //Flash
读保护允许
4
、
stm32
置读保护跟清读保护操作
功能:
读保护设置后将不能读出
flash
的内容;
当解除读保护的时候
stm32
会自动擦出整篇
flash
;
读保护设置:在程序的开头加入
“
读保护
”
代码,即实现了读保护功能;
(每次程序运行先开
保护)
解除读保护:
解除读保护可以设置在按键里面,
方便实现解锁,
也不可不设按键在
RAM
中
执行程序再清除读保护;
(1)
设置读保护:
int main(void)
{
....
if(FLASH_GetReadOutProtectionStatus() != SET)
{
//FLASH_Unlock();
不解锁
FALSH
也可设置读保护???
FLASH_ReadOutProtection(ENABLE);
}
......
while(1)