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读保护允许
以下摘自论坛:
http://www.openedv.com/posts/list/9353.htm
(1)设置读保护
int main(void)
{
....
if(FLASH_GetReadOutProtectionStatus() != SET)
{
//FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE);
}
......
while(1)
{
.....
}
}
读保护后无法使用j-link将程序读出,当然也无法在线仿真了
这个写到程序当中并执行过后,使用j-link就不能‘读出’程序了,就是‘读保护’了!我已经试过了,没有使用此程序可以读出下载到芯片中的程序,但是如果使用了此程序就无法读出程序了。
但是也无法再次烧写新的程序到芯片中了(要测试请慎重!!!!!!)
可以再主程序当中设置一按键专门清除“读保护”,一旦按下按键则清除“读保护”时芯片可以重新被烧写。(我没有怎么做现在后悔死了!)
方法二:补救的方法,专门写一个清除“读保护”程序,使用RAM中运行程序的方法,运行此程序解锁“读保护”。明天再去测试下,此方法。
在主程序中,通过一个按键,写入取消“读保护”
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
使用j-link,可以正常读写程序和在线调试。
如果没有在主程序中有写这条指令,此芯片就无法再次烧写程序(可以擦出但是擦出后还是无法烧写程序)。
只有通过将此取消“读保护”程序,烧写到RAM中运行后,才能取消“读保护”(要尝试的请慎重!!!别救不会来就糟糕了)
关键字:STM32 内部Flash 保护措施
引用地址:
STM32对内部Flash的保护措施
推荐阅读最新更新时间:2024-03-16 14:34
STM32单片机的PSAM卡驱动模块设计
引言 刷卡消费随着人们生活水平的提高已经成为常用的支付方式之一。为了保证刷卡消费的安全性,将PSAM卡内嵌于各种终端刷卡设备中。PSAM(Purchase SecureAccess Module,销售点终端安全存取模块),由IC卡发行主管部门或者应用主管机构发行,是可以用于对IC卡进行脱机消费交易认证的安全认证卡,主要应用于商用POS、网点终端、直连终端等设备上,支持多级发卡机制,适用于多应用的环境,符合识别卡、带触点的集成电路卡标准、ISO/IEC 7816—1/2/3/4以及《中国人民银行PSAM卡规范》。 1 PSAM卡简介 PSAM卡是接触式CPU卡的一种。CPU卡也称智能卡,卡内集成电路带有微处理CPU,存储单元
[单片机]
基于STM32的家庭服务机器人系统设计
引言 随着人工智能和传感器技术的发展,机器人已从工厂的结构化环境进入人们的日常生活环境,机器人不仅能自主完成工作,还能与人共同协作完成任务或在人的指导下完成任务。家庭服务机器人是智能家居系统的一个重要组成部分,在生活中的作用越来越重要。当前,大部分的家庭服务机器人不具备行走功能或只具有简单的避障能力,机器人的研究很多依赖于仿真实现,但是现实情况和仿真结果可能大相径庭。也有一些研究将问题复杂化,反而走了更多的弯路。 针对当前家庭服务机器人的不足和现代智能服务机器人的要求,本文提出一种基于 STM32 的家庭服务机器人系统的设计方案。该方案模拟智能家居环境,简化了定位方式,有效地利用了 ZigBee 技术低成本、低功耗的特点
[单片机]
基于STM32单片机的紫外线消毒系统设计
一.系统设计 通过STM32单片机进行主控,通过设置消毒时间来控制消毒,超声波测距模块和光电开关主要起到人体检测作用,当检测达不到人体时才能进行消毒,检测到人即使在上位机端启动消毒,也不会执行消毒。 图1 系统框图 二.硬件设计 本设计所采用的STM32F103C8T6是以Cortex-3为核心的单片机,单片机上普通GPIO即可与HC-SR04超声波模块进行数据收发端进行通信,另外使用DS1302进行消毒定时,通过UART串口实现单片机和ESP8266-01S的通信。 图2 硬件电路 三.软件设计 系统在完成系统初始化后就开始通过传感器进行数据检测,检测到的数据有距离和光电识别信息,上位机端设置距离阈值,当到达消毒时间
[单片机]
STM32 串行通信 USART 程序例举
1、 串行通信 软件仿真STM32通过串口USART1发送26个英文字母 (配置寄存器) /************************************************************************************************** * 硬件平台:STM32F103VC * 学习重点:GPIOx的位绑定 * 实现功能:软件仿真,实现STM32通过USART1发送数据 * 配置寄存器实现(其中打开系统时钟和GPIO引脚的配置是通过库函数实现的,后面会具体讲解) **********************************************
[单片机]
基于STM32设计的数字电子秤
1. 项目介绍 称重计量是现在社会活动中不可缺少的部分,随着国际交流的发展,称重计量的国际间的统一显得越来越重要。 电子称重技术是现代称重计量和控制系统工程的重要基础之一。近年来,随着现代科技进步,电子称重技术取得了突飞猛进的发展,电子秤在计量领域中也占有越来越重要的地位。尤其是商用电子衡器,以其准确度高、反应灵敏、性能稳定、结构简单、环境适应性强、便于与电子计算机结合而实现称重计量与过程控制自动化等特点,而被广泛用于工商贸易、能源交通、冶金矿山、轻工食品、医药卫生、航空航天等领域。 电子秤的工作原理首先是通过称重传感器采集到被测物体的重量并将其转换成电压信号,输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放
[单片机]
stm32实际运用中遇到的问题
1.不要太相信stm32内部的IO上下拉,必要的话,在外部接上下拉电阻。 2.当把JTAG的IO口当成普通IO口来使用时,要先禁止JTAG。 即:要使用到PB3、PB4、PA13、PA14、PA15时,要先禁止JTAG。 在库函数中,调用一下函数: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关闭jtag,保留swd 在寄存器编程中,用: //JTAG模式设置,用于设置JTAG的模式 //mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭; //#define JTAG_SWD_DISABLE
[单片机]
在STM32单片机中使用SPI通信的方法
在本教程中,我们将使用 STM32F103C8 的 Blue Pill 板替换一个 Arduino 板,并将使用 SPI 总线与 Arduino 板进行通信。在这个STM32 SPI 示例中,我们将使用Arduino UNO作为 Slave,STM32F103C8 作为 Master,两个16X2 LCD 显示器分别连接在一起。两个电位器还与STM32(PA0)和Arduino(A0)相连,通过改变电位器来确定主机到从机和从机到主机的发送值(0到255)。 STM32F103C8中的SPI 比较 Arduino 和 STM32F103C8 Blue Pill 板中的 SPI 总线,STM32 有2 条 SPI 总线
[单片机]
学习单片机和STM32的一道坎
刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。 但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。串口通信介绍关于串口通信的介绍,也可以点击阅读之前发的一篇文章:STM32串口通信基本原理。串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式......这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。 如何使用串口通讯,你需要知道的几个重要的知识点: 波特
[单片机]