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)
{
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按钮,执行上面程序,读保护可解除。

 

*************************华丽丽的分割线***********************************************

  
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 读保护功能和清除读保护功能设置【转】相关推荐

  1. STM32HAL库-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)

    目录 概述 一.使用方法 二.STM32CubeMx配置​ 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本 ...

  2. STM32HAL库-F4-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)

    概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本案例还包含内部FLASH读写数据,本质就是操作Flash. 硬件:STM32F401CEU6最小系统板(内 ...

  3. 两种方法清除Excel保护密码

    一.利用VBA脚本直接清除 打Excel,打开脚本编辑器(Alt+F11)或者如图,右键sheet名称 输入代码并运行,即可清除密码保护: Sub DeletePW()ActiveSheet.Prot ...

  4. 修改Excel时出现“被保护单元格不支持此功能“的解决办法

    关于Excel被保护的工作表忘记密码的解除办法 Excel无法修改,出现"被保护单元格不支持此功能" 这种情况下,先看看文件格式 xlsx格式: 方法亲测有效 将文件打开后另存为为 ...

  5. 电流速断保护c语言程序,TQXDB-III多功能继电保护实验培训系统实验指导书2.doc

    TQXDB-III多功能继电保护实验培训系统实验指导书2,继电保护作业指导书,多功能电表作业指导书,实验指导书,计算机网络实验指导书,实验室作业指导书,c语言实验指导书答案,实验指导书格式,信号与系统 ...

  6. webSocket 实现消息推送、心跳、已读消息、加载更多等功能

    读万卷书不如行万里路,行万里路不如阅人无数,阅人无数不如名师指路.站着巨人身上,你可以看的更高.更远. 一.webSocket 初始化 initWebSocket 方法中,初始化 webSocket. ...

  7. 开机预读快还是不预读快_WIN 7下的超级预读比VISTA要好,改进不少!推荐开启超级预读!...

    预读技术是微软vista和windows7默认开启的程序,原意是增加程序运行和开机速度,但事与愿违,该技术已经变成与UAC几乎一样的垃圾,普通用户建议关闭,原因有: 1.程序本身额外增加系统负担,启用 ...

  8. X86汇编语言从实模式到保护模式10:进入保护模式

    目录 1. 全局描述符表GDT 1.1 段描述符与描述符表 1.2 全局描述符表的定义 1.3 全局描述符表寄存器GDTR 1.3.1 GDTR用途 1.3.2 GDTR构成 1.3.3 lgdt指令 ...

  9. mysql实战20 | 幻读是什么,幻读有什么问题?

    在上一篇文章最后,我给你留了一个关于加锁规则的问题.今天,我们就从这个问题说起吧. 为了便于说明问题,这一篇文章,我们就先使用一个小一点儿的表.建表和初始化语句如下(为了便于本期的例子说明,我把上篇文 ...

最新文章

  1. linux echo 写二进制文件
  2. jQuery.extend 函数使用详解
  3. Javascript之学习笔记每日更新
  4. 采购订单收货后不能修改价格的增强
  5. 计算机主板4针风扇插座,电脑的散热风扇2针、3针、4针接口有什么不同吗?
  6. IDA来远程调试Linux程序
  7. k8s 为何成为大厂标配?
  8. 使用绝对定位时浏览器大小改变排版会乱_HTML amp; CSS页面布局之定位
  9. 访问网络共享时出现“拒绝访问”
  10. 线程执行完之后会释放吗_java多线程并发:CAS+AQS+HashMap+volatile+ThreadLocal,乐分享...
  11. 问题 A: 阿正的忐忑不安(C语言)
  12. (后端)SpringMVC提交数组时不能超过256个值(转)
  13. hexo+github+hexo-theme-matery搭建个人免费博客
  14. [洛谷P3391] 文艺平衡树 (Splay模板)
  15. centos6 系统安装 system-config-kickstart 工具
  16. BZOJ2002:[HNOI2010]弹飞绵羊——题解
  17. 烟台职业学院计算机,烟台职业学院首届计算机应用技能决赛落幕
  18. Android 系统语言国家地区代码
  19. 2017年10月30日360最新虚拟壳脱壳后完全修复
  20. ABAP tRFC和qRFC

热门文章

  1. NavicatPremium12 软件和破解工具和破解教程
  2. Windows XP 的序列号
  3. linux fwrite 头文件,linux c之用fwrite和fread实现文件的复制
  4. [Python] Native Crash Addr2line 自动解析Tombstone文件脚本
  5. Switf的基本语法
  6. 全网最详细实现微信小程序支付功能【前端部分】
  7. Android进阶之旅 - 项目实战篇
  8. 一道归并排序题的解析
  9. Golang获取目录下的文件及目录信息
  10. 3D开发技术学习网站