STM32 读写保护功能及设置

来源:本站
导读:目前正在解读《STM32 读写保护功能及设置》的相关信息,《STM32 读写保护功能及设置》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32 读写保护功能及设置》的详细说明。

功能::

读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出

整篇flash;

设置:

读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序

运行先

开保护)

解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设;

(1)设置读保护:

if(FLASH_GetReadOutProtectionStatus() != SET)

{

//FLASH_Unlock();不解锁FALSH 也可设置读保护???

FLASH_ReadOutProtection(ENABLE);

}

(2)解除读保护

if(FLASH_GetReadOutProtectionStatus() != RESET)

{

FLASH_Unlock();

FLASH_ReadOutProtection(DISABLE);

}

这些函数在stm32f10x_flash 里面;

注意:调用上面这个库的时候需在#include "stm32f10x_flash.h"前加#define

_FLASH_PROG;

否则报(没有定义)错;

************************************************************************

/* Flash读保护使能 */

if (FLASH_GetReadOutProtectionStatus() == RESET)

{

FLASH_Unlock();

FLASH_ReadOutProtection(ENABLE);

}

/* 清除Flash读保护 */

if (FLASH_GetReadOutProtectionStatus() == SET)

{

/* 会擦除Flash */

FLASH_Unlock();

FLASH_ReadOutProtection(DISABLE);

}

CPU Flash读保护使能后,仿真器调试会失败。J-LINK有个解锁菜单,需要解锁才能正常再次烧写程序。当然解锁会导致Flash内容被全部擦出。

启动"J-Flash ARM"工具,Target->unsercure chip 就解除了芯片的读保护。

Target->unsercure chip 后一定要上电复位,系统复位是不行的。

一定要上电复位,系统复位是不行的!

STM32对内部Flash的保护措施

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读保护允许

现在总结一下FLASH读保护和解除读保护的步骤:

(1)设置读保护

int main(void)

{

....

if(FLASH_GetReadOutProtectionStatus() != SET)

{

//FLASH_Unlock();

FLASH_ReadOutProtection(ENABLE);

}

......

while(1)

{

.....

}

}

(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后

代码自己杀死了自己,哈哈!!!

if(FLASH_GetReadOutProtectionStatus() != RESET)

{

FLASH_Unlock();

FLASH_ReadOutProtection(DISABLE);

}

如果没有在程序中加入解除读保护代码,也不要紧,可以写段RAM中运行的程序

用于解除读保护,执行后,FLASH会自动全部擦除。代码如下:

int main(void)

{

Chinp_Init();

FLASH_Unlock();

FLASH_ReadOutProtection(DISABLE);

}

※对于在RAM中运行程序,说明如下:

(1)我使用IAR + J-Link,不用把Boot0和boot1脚设置成从RAM启动也可在RAM中调试(我是设置成从FLASH启动)。

(2)在IAR环境中设置Link文件为lnkarm_ram.xcl

(3)Debuger选项Download tab中勾全部去掉。

按上面设置完成后,按Debug按钮,执行上面程序,读保护可解除。

提醒:《STM32 读写保护功能及设置》最后刷新时间 2024-03-14 01:13:27,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32 读写保护功能及设置》该内容的真实性请自行鉴别。