stm32对flash的读写保护与解除

2023-11-20

一、STM32对内部Flash的保护措施  
        所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。 
        1、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:A、 通过调试器(JTAG或SWD); B、从RAM中启动并执行的程序; 
        2、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。   
   读与写设置的效果见下表: 

读保护 写保护 对Flash的操作功能
有效 有效 CPU只能读,禁止调试和非法访问。
有效 无效 CPU可以读写,禁止调试和非法访问,页0~3为写保护。
无效 有效 CPU可读,允许调试和非法访问。
无效 无效 CPU可以读写,允许调试和非法访问。


二、当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况: 
        1、调试执行程序时; 
        2、从RAM启动并执行程序时 
        STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码。 
三、Flash保护的相关函数 
   FLASH_Unlock();   //Flash解锁 
   FLASH_ReadOutProtection(DISABLE);  //Flash读保护禁止   
   FLASH_ReadOutProtection(ENABLE);   //Flash读保护允许

四、stm32设置读保护和解除读保护操作

1、功能:读保护设置后将不能读出flash中的内容;当解除读保护的时候stm32会自动擦除整个flash,起到保护数据的作用。

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

3、解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也可以设置在命令中。

4、设置读保护的代码:

 
  1. int main(void)

  2. {

  3. ...

  4. if (FLASH_GetReadOutProtectionStatus()!=SET) //检查设置读保护与否

  5. {

  6. FLASH_Unlock(); //写保护时可以不用这句话,可用可不用

  7. FLASH_ReadOutProtection(ENABLE); //设置读保护

  8. }

  9. ...

  10. while(1)

  11. {

  12. ...

  13. }

  14. }

上面的代码执行后,使用j-link就不能读出程序了,实现了代码读保护。

注意:芯片读保护后,无法再次烧写新的程序到flash中,必须要解除读保护才可以,测试需谨慎。

5、解除读保护代码:

 
  1. void Off_Protect(void) //关闭保护

  2. {

  3. if(FLASH_GetReadOutProtectionStatus() != RESET)

  4. {

  5. FLASH_Unlock(); //不解锁FALSH也可设置读保护,可用可不用

  6. FLASH_ReadOutProtection(DISABLE);

  7. FLASH_Lock(); //上锁

  8. }

  9. }

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

 
  1. int main(void)

  2. {

  3. Chip_Init();

  4. FLASH_Unlock(); //不解锁FALSH也可设置读保护,可用可不用

  5. FLASH_ReadOutProtection(DISABLE);

  6. }

五、测试

下载并执行设置读保护代码后,再次下载程序显示:

说明已经启动了 读保护,无法再次下载程序了。

通过ST-LINK Utility连接芯片,提示读保护,无法读取flash数据:

这个时候,需要调用解除读保护的代码即可恢复。

转载自:STM32_读保护功能和清除读保护功能设置 - 百度文库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32对flash的读写保护与解除 的相关文章

随机推荐

  • 【error】org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[/geoserver]启动失败

    error org apache catalina core StandardContext startInternal 由于之前的错误 Context geoserver 启动失败 tomcat10配置geoserver war包启动错误
  • Android 一些常见BUG汇总(持续更新)

    写在前面的话 每个开发者在工作中会遇到或多或少的小bug 这里博主把它们记录下来 以便以后查阅 开始 1 file storage emulated 0 DCIM xxx jpg exposed beyond app through Cli
  • [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反 要直接求从起点到终点的最大距离 不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径 那么 就是阻止从左上角到右下角的所有相交圆 于是 就是要变成没有从左上角到右下角的相交圆才可以 那么不妨跑一个bfs来判断
  • 全面分析冒泡排序过程

    冒泡排序也是一种简单直观的排序算法 其思想是 它重复地走访过要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 也就是说该数列已经排序完成 这个算法的名字由来是因为越小的元素会经
  • leetcode分类刷题:二分查找(Binary Search)(二、隐藏有序序列的数学类型)

    参加了下2023届秋招 不得不感叹leetcode lintcode的题目实在太多了 也很难 特别对于我这种非科班生而言 感觉有必要分类整理一下 以便以后在工作中更好的应用 花了点时间刷了下二分查找的相关题目 刷的越多 反而越不会了 先把目
  • 还没做完的小程序

    include
  • 基于swiper使用vue-awesome-swiper 实现鼠标移入暂停自动播放、左右按钮控制前进后退、常见避坑、API中文文档地址

    vue 中使用swiper vue awesome swiper 鼠标移入暂停自动播放 左右按钮控制前进后退 常见避坑 swiper对应vue awesome swiper版本会带来很多坑点 推荐下面对照版本 帮大家避坑了 亲测可用 一 n
  • oracle 中的开窗函数over()

    开窗函数与聚合函数一样 都是对行的集合组进行聚合计算 它用于为行定义一个窗口 这里的窗口是指运算将要操作的行的集合 它对一组值进行操作 不需要使用GROUP BY子句对数据进行分组 能够在同一行中同时返回基础行的列和聚合列 反正我理解这个函
  • 原生-秒数转换为小时、分钟

    function formatSeconds value var secondTime parseInt value 秒 var minuteTime 0 分 var hourTime 0 小时 if secondTime gt 60 如果
  • Python实现迷宫游戏

    项目 迷宫游戏 摘要 1 引言 1 1研究的背景及意义 1 2研究的内容 2 系统结构 2 1系统的结构 2 2基本思路 3 实现代码 3 1Maze类 3 2Player类 3 3Controller类 3 4主函数 4 实验 5 总结和
  • JS修改对象属性的值

    当对象以数字为属性名时 其实就是一个数组 用 var foo 1 a 2 b foo 1 c console log foo 1 c 2 b 当对象以字符为属性名时 直接用 获取属性值 var bar a 1 b 2 c 3 bar a h
  • Java反射获取泛型

    反射泛型方法说明 1 isPrimitive 判断指定的Class对象是否表示一个基本类型 2 isAssignableFrom 表示class是否是参数class的父类 3 ParameterizedType 表示参数化类型如List 4
  • Echarts配置系列-图文并茂教你配置渐变色面积图,折柱双图,环形图,仪表盘图等

    文章目录 说明 渐变色面积图 如何修改图标legend样式 如何去掉折线图小圆点 如何设置粗细 折线图线条设置更细或者更粗 如何修改X轴Y轴字体大小 横向渐变色柱状图 自动转动炫酷百分比环形图 渐变色仪表盘 简约风格圆环百分比仪表盘图 双柱
  • 模板类成员函数特化写法

    昨天有对模板类的函数成员特化需求 目的是为了对不同模板参数实现不同的操作 结果在写过程中碰到already defined的问题 貌似是模板新手最容易碰到的问题了 类外的成员函数和同在类外的特化版本成员函数冲突了 因为对模板用法不是很熟悉
  • java poi 将公文套红 并 电子签章

    套红的方法 签章 import com deepoove poi XWPFTemplate import com deepoove poi xwpf NiceXWPFDocument import lombok extern slf4j S
  • RSA公钥每次签名得到的结果都一样?

    这里记录下 RSA对于同一数据块签名一致的原因是使用的填充算法 涉及PKCS 1 5 PSS 为什么RSA公钥每次加密得到的结果都不一样 RSA PSS数字签名算法
  • nginx的sticky模块

    Sticky工作原理 Sticky是nginx的一个模块 它是基于cookie的一种nginx的负载均衡解决方案 通过分发和识别cookie 来使同一个客户端的请求落在同一台服务器上 默认标识名为route 1 客户端首次发起访问请求 ng
  • neo4j windows图像界面 如何查询最短路径

    MATCH p1 concept name factor p2 concept name cf4 p allshortestpaths p1 10 p2 RETURN p 注意上述p1是变量这个是通用的 只需要更改concept这个即可 你
  • 使用Notepad++工具查看文件的十六进制

    最近在用notepad 打开 dat文件 想看看里面的一些数据但是打开之后发现是乱码 下面给出解决方法 1 首先打开 dat文件 发现是一些乱码 2 点击 插件 gt 搜索hex gt 找到HEX Editor勾选 gt 安装 3 重新打开
  • stm32对flash的读写保护与解除

    一 STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护 防止对Flash的非法访问 写保护和读保护 1 读保护即大家通常说的 加密 是作用于整个Flash存储区域 一旦设置了Flash的读保护 内置的Flas