对芯片启动读保护,实现加密(详解)

文章正文
发布时间:2024-09-08 12:06

启动读保护后,用户就不能再读写程序了.


所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空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()函数,便可以取消保护了

关键字: 引用地址:STM32-对芯片启动读保护,实现加密(详解)

上一篇:STM32-正弦波可调(50HZ~20KHZ可调、峰峰值0~3.3V可调)
下一篇:STM32-嵌入式学习笔记02-中断应用概述

推荐阅读最新更新时间:2024-09-04 23:16

STM32输出调试信息-printf重定向到串口

在STM32调试过程中常常需要将调试信息输出到串口,然后通过串口助手查看输出的调试信息。一般来说,串口输出的是指定长度的十六进制字节,对于想打印的调试信息来 说,略显灵活性不足。这时候如果可以将printf重定向到串口输出,则能很好的解决这个问题。 关于printf重定向的方法有很多种,这里只讨论一种我认为相对简单实用的方法。其主要方法步骤如下: 1、配置STM32的串口,确保STM32能输出数据到串口调试助手。 void USART5_Init(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;

[单片机]

STM32 关于ADC采交直流问题探讨

前沿 关于STM32采样问题,相信很多人曾遇到过这样的问题,无论是关于ADC底层相关的配置还是ADC采样方案的抉择,或者是ADC软硬件滤波算法,这里博主就自己曾做过的训练题为引申,探讨ADC采样过程中的问题。 1.ADC的认识 1.1 ADC初始化参数 /* Exported types ------------------------------------------------------------*/ /** * @brief ADC Init structure definition */ typedef struct { uint32_t ADC_Resolution;

[单片机]

STM32 关于ADC采交直流问题探讨

基于STM32和S3C6410的无线节水滴灌自动控制系统

为实现实时适量的精准滴灌,本文提出了一种基于S3C6410和STM32的无线节水滴灌自动控制系统的设计方案。该方案利用ZigBee无线传感器网络的自组网特点,采用星型网络拓扑结构,实时监控多块田地的土壤温湿度变化,通过反馈传感信号,对滴灌动作进行精准判断和控制。田间试验期间测得土壤湿度最小值为30%,最大值为70%,处于理想范围内。实验结果表明,该方案所设计的系统能够实现滴灌自动控制,且性能良好,具有灵活性强、安全可靠、低功耗、低成本。 0 引言 随着人口的增长和农业的发展,随着全球变暖造成的干旱问题日益严重,世界水资源的需求量越来越大,水资源紧缺已成为全世界人民共同关注的问题。滴灌技术是通过干管、支管和毛管上的滴头,在低

[单片机]

基于STM32和S3C6410的无线节水滴灌自动控制系统

STM32中IO模式

在STM32中选用IO模式 (1) 浮空输入_IN_FLOATING 浮空输入,可以做KEY识别,RX1 (2)带上拉输入_IPU IO内部上拉电阻输入 (3)带下拉输入_IPD IO内部下拉电阻输入 (4) 模拟输入_AIN 应用ADC模拟输入,或者低功耗下省电 (5)开漏输出_OUT_OD IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 (6)推挽输出_OUT_PP IO输出0-接GND, IO输出1 -接VCC,读输入值是未知

[单片机]

解析STM32的库函数

意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的

[单片机]

STM32 复用时钟开启情况

简介:本文介绍了STM32的复用时钟在什么时候需要开启,什么时候可以不开启。 首先为什么要开启时钟? 答:因为要对寄存器进行读写!而在STM32中对寄存器的读写都是要打开寄存器对应的时钟才可以的【就像人一样,有了跳动的脉搏手臂才能有能量才能进行各种动作】。 然后就什么时候AFIO时钟开启(所有时钟都是这样)就清楚了:当需要对“AFIO时钟管理的寄存器”进行读写时AFIO时钟打开!当然不对“AFIO时钟管理的寄存器”读写时也可以打开AFIO时钟,此时只是白白增加能耗、写无用代码(白白浪费程序存储器空间)而已! 接下来:跟AFIO相关的寄存器有哪些呢? 答:根据《STM32中文参考手册_V10》有:①事件控制寄存器

[单片机]

11-固件库点亮LED

固件库点亮LED 前提条件 建立一个固件库工程模板可以参考以下博客 https://blog.csdn.net/cainaiolin/article/details/52012786 硬件基础 我的开发板上面一共有三个led灯 我选择点亮PB5这个灯 话不多说看代码:新建一个文件名字为“bsp_led.h” BoardSupport Packet 的缩写(板级支持包) 多用在用户自己定义的文件中 #ifndef __BSP_LED_H #define __BSP_LED_H //R红色的灯 /*-----LED 灯的 GPIO 端口、GPIO 引脚号以及 GPIO 端口时钟----*/ #define LED1_

[单片机]

11-固件库点亮LED

stm32单片机入门c语言解析

关于学习stm32单片机建议 推荐学习书籍: 《STM32F103xxx参考手册》不需要全部阅读——没有时间的。建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。 《STM32固件库使用手册》主要是为了简化编程 学习思路(仅供参考) 步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM(MDK)、ISP(如果需要从串口下载的话)。 步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个L

[单片机]