STM32-读保护功能和清除读保护功能设置

发布者:春林初盛最新更新时间:2018-12-17 来源: eefocus关键字:STM32  读保护功能  清除读保护功能 手机看文章 扫描二维码
随时随地手机看文章

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)
    {
       .....
     }
}

    

这个写到程序当中并执行过后,使用j-link就不能‘读出’程序了,就是‘读保护’了!没有使用此程序可以读出下载到芯片中的程序,但是如果使用了此程序就无法读出程序了。但是也无法再次烧写新的程序到芯片中了(要测试请慎重!!!!!!)

  

可以在主程序当中设置一按键专门清除“读保护”,一旦按下按键则清除“读保护”时芯片可以重新被烧写。

  

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


if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
   

这些函数在stm32f10x_flash 里面,注意:调用上面这个库的时候需在#include "stm32f10x_flash.h"前加#define _FLASH_PROG;否则报(没有定义)错。

   

如果你没有做按键清除读保护这一步还有方法二补救:专门写一个清除“读保护”程序,使用RAM中运行程序的方法,运行此程序解锁“读保护”,执行后,FLASH会自动全部擦除。代码如下:


int main(void)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 

  while (1)
  {
  };
}

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

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

(2)在IAR环境中设置Link文件为lnkarm_ram.xcl或者自己修改STM32F10x_FLASH.icf文件


//define symbol __ICFEDIT_region_ROM_start__ = 0x080000F0;  //修改为如下:
define symbol __ICFEDIT_region_ROM_start__ = 0x200000F0;

//define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;  //修改为如下
define symbol __ICFEDIT_region_ROM_end__   = 0x20001FFF;


//define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; //修改为如下
define symbol __ICFEDIT_region_RAM_start__ = 0x20002000;


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

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


(4)点击下载运行时。可能会提示错误(有时不提示)

当下载时,提示 CRC校验失败,选择 NO(右边)。

当下载时,提示无法擦除 sector 0,选择NO(右边)


(5)运行前使用J-Flash ARM"工具,Target->unsercure chip 解除了芯片的读保护。不然会出现上述各种报错。


if (FLASH_GetReadOutProtectionStatus() == RESET) 
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE); 
}

if (FLASH_GetReadOutProtectionStatus() == SET) 


FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 
}

CPU Flash读保护使能后,仿真器调试会失败。J-LINK有个解锁菜单,需要解锁才能正常再次烧写程序。当然解锁会导致Flash内容被全部擦出。 运行启动"J-Flash ARM"工具,Target->unsercure chip 就解除了芯片的读保护。Target->unsercure chip 后一定要上电复位,系统不复位是不行的。


关键字:STM32  读保护功能  清除读保护功能 引用地址:STM32-读保护功能和清除读保护功能设置

上一篇:使用IAR+Jlink开发STM32关于下载Flash的一点发现
下一篇:keil环境下stm32下载和擦除程序对Flash的影响

推荐阅读最新更新时间:2024-03-16 16:20

关于STM32的GPIO配置不同输出速度会有什么影响
今天有人问:GPIO配置不同输出速度会有什么影响?你知道答案吗? 1写在前面 这个问题看起来比较简单,我相信很多人都能说出答案。 但是,很多人都只是停留在表面,至于深层次的含义,估计很少有人思考。 需要更深理解其中含义,可能需要结合特定场景来说,我自己也是在项目中才深刻体会其中含义。 2GPIO输出速度 不管标准外设库,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项。 类似如下: GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStru
[单片机]
关于<font color='red'>STM32</font>的GPIO配置不同输出速度会有什么影响
stm32 cortext-M3 类型对齐问题【worldsing笔记】
经过细测,Cortex-M3的double类型必须4字节对齐访问,其他诸如float,int,short 可以非对齐访问。否则将会产生硬件异常!即访问double类型地址必须能被4整除,测试代码如下: 1: /* 测试Cortex-M3类型对齐访问 2: * i,j,k,l控制对齐长度,对齐 3: * 长度不符合是将产生HardFault 4: * 异常 5: */ 6: double *p; 7: float *q; 8: int *t; 9: short *r; 10: char buf __attribute__((at(0X20002000))); 11: 12: int m
[单片机]
干货 | 用GD32替换STM32,这些细节你一定要知道!
GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的。 不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。 相同的地方我们就不说了,下面列一下不同的地方。 01 内核 GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。 02 主频 使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M 使用HSI(高速内部时钟):GD32的主频最大10
[单片机]
STM32学习笔记(一)时钟和定时器
由于近期在准备海洋航行器比赛,正好趁此机会学习一下ARM,看到周围很多同学都在使用32,所以我也买了一块STM32F103ZET6,准备好好地学习一下。 STM32的时钟系统相当的复杂,包含了5个时钟源,分别是HSI HSE LSI LSE PLL,HSI是高速内部时钟、RC振荡器,频率为8M,HSE是高速外部时钟,即晶振,我的核心板上晶振为8M。LSI为低速内部时钟、RC振荡器,频率40k,LSE为低速外部时钟,接32.768kHz晶振,作为RTC时钟源。PLL为锁相环倍频输出,最大不超过72M。 我在学习定时器时先看的是TIM3,它挂载在APB1分频器上,APB1上面挂载的是低速外设,APB2上挂载高速外设。 在s
[单片机]
STM32固件库详解
1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对
[单片机]
STM32GPIO的8种工作模式
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点: 1、利用外部电
[单片机]
STM32GPIO的8种工作模式
STM32串口USART用法的进阶(HAL库版本)
基础发送: uint8_t ch=0xAb;//1 uint8_t aRxBuffer = hello GKoSonrn ;//2 HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//3 HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);//4 此后不再讨论发送,毕竟这个不是重难点,接受才是。 基础接受: //HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//可以发也可以不发 //HA
[单片机]
[正点原子]STM32开发板F103 第41讲 RTC实时时钟备份区域BKP原理
RTC模块与 时钟配置系统在后备区域,在复位时候不会被清除(框图: 中文参考手册) 如何使用RTC实现时钟?RTCCLK RTC的时钟有几个来源有三种 32.768khz 8Mhz 40khz RTC_PRL是自动重装载寄存器 RTC_DIV 预分频余数寄存器 RTC_DIV的作用就是 可以提供一个更加精确的时钟, 时钟开启之后会给RTC_PRL写一个值(比如100),那么RTCCLK就会被 /100 之后得到 TR_CLK。 TR_CLK的一个周期有100个 RTCCLK ,RTC_DIV在你装载之后它的值就是100,他在 RTCCLK的控制下每一个时钟 减一, 假如RTCCLK=100hz,那么 RT
[单片机]
[正点原子]<font color='red'>STM32</font>开发板F103 第41讲 RTC实时时钟备份区域BKP原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved