STM32可以对存储在flash上的程序进行读保护.

  • 启动读保护后,用户就不能再读写程序了.
  • 所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序

头文件位于:#include "stm32f10x_flash.h"

启动保护,用在main()函数初始化时调用:

void Set_Protect(void) //启动保护
{
  if(FLASH_GetReadOutProtectionStatus() != SET)
  {
    FLASH_Unlock(); //解锁
    FLASH_ReadOutProtection(ENABLE);
    FLASH_Lock();//上锁
  }
}

注意:

当代码第一次调用Set_Protect()函数启动读保护时。

期间不能再次调用Off_Protect()函数关闭读保护,需要重新断电才能关闭读保护(因为Flash状态启动读保护后,不能立即设置Status=1)

关闭读保护,在串口接收某个有效数据或按下某个按键时,调用:

void Off_Protect(void) //关闭保护
{
  if(FLASH_GetReadOutProtectionStatus() != RESET)
  {
    FLASH_Unlock(); //不解锁FALSH也可设置读保护
    FLASH_ReadOutProtection(DISABLE);
    FLASH_Lock();//上锁
  }
}

运行测试

1.第一步,下载程序

2.下载成功后,再次烧写程序,校验是否启动读保护(因为启动读保护后,不能进行读写程序了)

3.通过ST-LINK Utility工具尝试连接芯片,发现确实不能读数据了

然后只要代码调用Off_Protect()函数,便可以取消保护了

具体参考:https://wenku.baidu.com/view/e086f59dc8d376eeafaa3116.html

STM32-对芯片启动读保护,实现加密(详解)的更多相关文章

  1. MD5加密详解

    MD5加密详解 引言: 我在百度百科上查找到了关于MD5的介绍,我从中摘要一些重要信息: Message Digest Algorithm MD5(中文名为信息摘要算法第五版)为计算机安全领域广泛使用 ...

  2. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  3. android emulator启动的两种方法详解

    android emulator启动的两种方法详解    转https://blog.csdn.net/TTS_Kevin/article/details/7452237 对于android学习者,模 ...

  4. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  5. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  6. STM32单片机串口一键下载电路与操作方法详解

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash.2)SRAM = 芯片内置的RAM区,就是内存啦.3)系统存储器 = 芯片内部一块特定的区域,芯片出 ...

  7. grub启动引导程序配置及命令行接口详解

    Grub(GRand Unified Bootloader),统一资源引导器,它的工作是提供一个菜单,允许用户选择要启动的系统或不同的内核版本:把用户选定的内核装载到RAM中的特定空间中,然后解压.展 ...

  8. php-fpm 启动参数及重要配置详解

    约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...

  9. php-fpm 启动参数及重要配置详解<转>

    原文地址  http://levi.cg.am/archives/3127 约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm. ...

随机推荐

  1. Python之旅Day12 HTML与CSS

    前端CSS与HTML部分 <a href="http://www.baidu.com" target="_Blank">百度</a>_B ...

  2. attention 介绍

    前言 这里学习的注意力模型是我在研究image caption过程中的出来的经验总结,其实这个注意力模型理解起来并不难,但是国内的博文写的都很不详细或说很不明确,我在看了 attention-mech ...

  3. 2016 安全圈玩起了直播,“学霸”带你玩转CTF_i春秋学院

    2016安全圈玩起了直播,“学霸”带你玩转CTF_i春秋学院 从小就很羡慕学霸的脑子,总有很简单很便捷的方法解出难题来,所以对于他们的笔记总会疯狂地想占有和copy.那么,对CTF大神自己总结出来的赛 ...

  4. 腾讯优秀 SDK 汇总

    1. 热修复 -- Tinker 项目地址:http://www.tinkerpatch.com/ SDK地址:https://github.com/Tencent/tinker 集成参考文档: ht ...

  5. 把ajax包装成promise的形式(1)

    概述 为了体验promise的原理,我打算自己把ajax包装成promise的形式.主要希望实现下列功能: // 1.使用success和error进行链式调用,并且可以在后面加上无限个 promis ...

  6. 原生Ajax GET+POST请求无刷新实现文本框用户名是否被注册

    实现Ajax需要使用一个核心对象XMLHttpRequest XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求 ...

  7. Python shuffle() 函数

    描述 shuffle() 方法将序列的所有元素随机排序. 语法 以下是 shuffle() 方法的语法: import random random.shuffle (lst ) 注意:shuffle( ...

  8. 机器学习入门02 - 深入了解 (Descending into ML)

    原文链接:https://developers.google.com/machine-learning/crash-course/descending-into-ml/ 线性回归是一种找到最适合一组点 ...

  9. Lombok的@Data、@Setter、@Getter注解没反应问题解决

    在用@Data注解时,没有生成setter/getter方法.百度了一堆都没解决方法,后来用Google查了一下解决了~~~ 使用IDEA需要安装Lombok插件,我这里已经下载好,如果没下载安装点击 ...

  10. 记一次 net 使用 data.oracleclient 使用错误OCIEnvCreate 失败, 返回代码为-1

    前提: 公司除了领导和开发人员具有管理员权限,其他人员使用的都是域账号. 过程: 应要求开发一个 winfrom项目,使用data.oracleclient  本地开发,调试无误,放到服务器共享域用户 ...