STM32如何设置读保护和解除读保护?

发布者:Haifeeng最新更新时间:2024-09-12 来源: elecfans关键字:STM32  设置读保护  解除读保护 手机看文章 扫描二维码
随时随地手机看文章

关于STM32对内部Flash的保护    

为了防止对Flash的非法访问,所有STM32的芯片都提供对Flash的保护,具体分为写保护和读保护。     如果对Flash设置了写保护,那就无法对Flash进行编程和擦除。在开发STM32的时候,如果出现这种情况,通常仿真器都支持对Flash进行解锁,像jlink,stlink等仿真器都支持这个功能。     在使用MDK进行调试的时候,可能会遇到如下图所示的报错信息,这时候就要排查Flash是不是被保护起来了。 

9da9a678-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:

通过调试器(JTAG或SWD)

从RAM中启动并执行的程序

写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志,读与写设置的效果见下表: 

9dc6b8f8-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况: 

调试执行程序时

从RAM启动并执行程序时 

STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码


  Flash保护的相关函数   

9df7d780-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

STM32如何设置读保护和解除读保护?   

  读保护设置后将不能读出Flash中的内容。

如何设置读保护

   在程序的开头加入“设置读保护”的代码即可,每次运行代码时都检查一下,如果没有开就打开,如果打开了就跳过。其中,设置读保护的代码如下:

9e090c3a-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

    上面的代码执行后,使用j-link就不能读出程序了,实现了代码读保护。需要注意的是,芯片读保护后无法再次烧写新的程序到Flash中,必须要解除读保护才可以。但是当解除读保护的时候STM32会自动擦除整个Flash,起到保护数据的作用。

通过代码解除Flash保护

    解除读保护可以设置在按键里面,方便实现解锁,也可以设置在命令中。如下是解除读保护代码:

9e1c6c8a-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

    程序中设置一个按键或者命令,可以随时解除Flash的读保护,让芯片又可以重新烧录程序。如果没有留,还可以专门写一个程序,下载到RAM中去运行,用来解除读保护。     注意:执行后,Flash会自动全部擦除。

9e2f0408-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

通过ST-Link Utility来解除Flash保护     

在STLink连接目标板的情况下打开程序烧写软件ST-Link Utility,在菜单栏的Target下选择connect,因为这时候Flash已经被锁住了,能看到如下图所示的错误提示。

9e40f6ea-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

下面来操作如何解除Flash保护。     请确保当前已经正确连接了STLink和目标板,在菜单栏Target里打开Option Bytes...选项,发现在这里Read Out Protection选项是Enable,这个表示无法通过SWD读取STM32内部Flash的程序。

9e562b0a-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

将Read Out Protection选项设置为Disable,并点击Apply。     这时候Flash已经成功解锁了,跟上文提到的解除Flash保护的结果一样,内部Flash已经被擦除了,如下图红框中所示。

9e7a206e-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

    完成以上步骤之后,在菜单栏Target下选择Disconnect断开与目标板连接。     

重新进入MDK,可以正常对目标板烧写程序了。

通过ST-Link Utility来设置Flash保护     

在菜单栏Target里打开Option Bytes...选项,可以看到下面有Flash sector protection选项。选择Select all之后,发现所有Page的Protection项都已经变成Write Protection了,只要选择Apply选项就可以对Flash进行写保护,如下图所示。

9e92fe86-8ba1-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000


关键字:STM32  设置读保护  解除读保护 引用地址:STM32如何设置读保护和解除读保护?

上一篇:详解STM32中定时器的时钟源
下一篇:STM32芯片连接电脑出现的问题与解决方法

推荐阅读最新更新时间:2026-03-22 22:08

STM32如何设置保护解除保护
关于STM32对内部Flash的保护 为了防止对Flash的非法访问,所有STM32的芯片都提供对Flash的保护,具体分为写保护和读保护。 如果对Flash设置了写保护,那就无法对Flash进行编程和擦除。在开发STM32的时候,如果出现这种情况,通常仿真器都支持对Flash进行解锁,像jlink,stlink等仿真器都支持这个功能。 在使用MDK进行调试的时候,可能会遇到如下图所示的报错信息,这时候就要排查Flash是不是被保护起来了。 读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方
[单片机]
<font color='red'>STM32</font>如何<font color='red'>设置</font><font color='red'>读</font><font color='red'>保护</font>和<font color='red'>解除</font><font color='red'>读</font><font color='red'>保护</font>
STM32 保护功能和清除保护功能设置【转】
1、STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。 1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出: 通过调试器(JTAG或SWD); 从RAM中启动并执行的程序; 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。 读与写设置的效果见下表: 读保护写保护 对Flash的操作功能 有效 有效
[单片机]
STM32保护功能和清除保护功能设置
1、STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。 1)、读保护即大家通常说的 加密 ,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出: 通过调试器(JTAG或SWD); 从RAM中启动并执行的程序; 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。 读与写设置的效果见下表: 读保护写保护 对Flash的操作功能
[单片机]
介绍一种使用MDK解除保护的方法
经历过产品量产的同学应该都知道,芯片一般会在出厂时开启读保护:要么在代码中加入,要么在烧录程序后人工通过软件开启该功能,比如 STM32 ST-LINK Utility: 当然也可以使用该工具关闭读保护功能。 为了保证程序不被读取,大多数产品应该会直接在量产代码中加入该功能,但这样会导致一个麻烦的问题:无法正常调试。 每次下载后,如果代码出现问题,都需要在线调试,而你的代码为了不忘记,默认就是开启读保护功能的,所以每次下载后,如果发现问题,你可能要找一个工具,如 J-Flash 或者上面的软件负责关闭读保护,让我们的开发效率降低不少。 是否有更好的方法解除读保护呢? 今天给大家介绍一种使用 MDK 解除读保护的方法,毕竟 MD
[单片机]
介绍一种使用MDK<font color='red'>解除</font><font color='red'>读</font><font color='red'>保护</font>的方法
stm32f4 RAM中运行程序 保护设置
主要是为了在RAM中运行程序来解除读保护的。没想到ST-Link Utility 就直接可以。 ST-Link Utility:target-- options bytes-- 就可以看到读保护。 解除读保护,选择 Level 0. 其他都不变(WDG_SW,nRST_STDBY,nRST_STOP都按照默认的勾上) 然后点击Apply即可。 读保护: 1: while(1) 2: { 3: PD13_Toggle; 4: Delay(0x7FFFF); 5: //按键按下,切换 是否 读保护 6: if(is_key_toggle) 7: { 8:
[单片机]
stm32f4 RAM中运行程序 <font color='red'>读</font><font color='red'>保护</font><font color='red'>设置</font>
如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
在单片机开发中, 数据存储 是一个绕不开的话题。EEPROM因其非易失性存储特性,常用于保存配置参数等数据。 然而,EEPROM的擦写次数通常有限,以STM32为例,STM32L0、STM32L4自带的EEPROM一般 10万次 左右,而很多单片机并不内置EEPROM,这时候,利用单片机的FLASH存储器来模拟EEPROM就成为了一个高性价比的解决方案,但,FLASH的擦写次数一般在 1万次 左右,这个我们可以通过ST的官方数据手册看到: 1万次,在很多场景下并不够。 今天,老宇哥跟大家一起探讨,如何用单片机FLA
[嵌入式]
如何用 <font color='red'>STM32</font> FLASH 实现等效 100 万次擦写的 EEPROM 功能?
STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved