历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2020年01月23日 | stm32对flash的读写保护与解除

2020-01-23 来源:eefocus

一、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、设置读保护的代码:


int main(void)

{

    ...

    

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

    { 

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

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

    }

 

    ...

 

    while(1)

    {

        ...

    }

}


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


5、解除读保护代码:


void Off_Protect(void) //关闭保护

if(FLASH_GetReadOutProtectionStatus() != RESET)

{

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

FLASH_ReadOutProtection(DISABLE);

FLASH_Lock();   //上锁 

}


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


int main(void)

{

    Chip_Init();

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

FLASH_ReadOutProtection(DISABLE);

}


五、测试

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

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

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

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

推荐阅读

史海拾趣

EPSON公司的发展小趣事

近年来,EPSON积极响应数字化时代的趋势,不断进行技术革新和数字化转型。公司加大了对人工智能、物联网等前沿技术的研发投入,推出了一系列智能化、数字化的电子产品和解决方案。这些创新产品不仅满足了客户日益多样化的需求,还进一步巩固了EPSON在电子行业的领先地位。同时,EPSON还积极推动数字化转型在内部管理、供应链等方面的应用,以提高企业的运营效率和市场竞争力。

光磊(GL)公司的发展小趣事

EPSON始终将品质视为企业发展的生命线。公司建立了严格的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。同时,EPSON还积极引进先进的生产设备和检测技术,不断提高产品的品质和性能。这种对品质的执着追求使得EPSON的产品在市场上赢得了良好的口碑和信誉,逐渐建立了起强大的品牌形象。

ESS [ESS Technology,Inc]公司的发展小趣事

随着公司规模的不断扩大和市场份额的增加,ESS开始在全球范围内扩张其业务。ESS的分支机构遍布美国各地,同时也在中国、日本、韩国等地设立了海外机构。这些海外机构不仅有助于ESS更好地了解当地市场需求和竞争态势,还为公司在全球范围内推广其产品和服务提供了有力支持。ESS的全球战略布局为其在竞争激烈的半导体芯片市场中保持领先地位提供了有力保障。

依必安派特(ebmpapst)公司的发展小趣事

在快速发展的过程中,依必安派特也面临着一些挑战。其中之一就是仿冒产品的泛滥。为了维护品牌形象和客户利益,依必安派特积极打击仿冒产品。例如,在2023年,依必安派特和地方政府联手突击了一家位于广东的仿冒产品工厂,揭示了其造假行为。这一行动不仅保护了依必安派特的品牌声誉和客户信任,也为中国市场的公平竞争环境做出了贡献。

Entegris公司的发展小趣事

随着半导体材料开发成本的提高,产业链开始发生变革。Entegris通过与其他公司的合作与并购,积极适应这一变革。例如,与Versum Materials的合并就是Entegris在产业链变革中做出的重要决策之一。通过这一合并,Entegris能够更好地整合资源,提升市场竞争力。

以上是关于Entegris公司在电子行业发展的5个故事概述。这些故事涵盖了Entegris在合并、知识产权保护、技术创新、纯度控制以及产业链变革等方面的关键事实。

台湾固锝(GD)公司的发展小趣事
确保电源电压稳定且符合放大器芯片的供电要求。

问答坊 | AI 解惑

ARM的指令手册(中文)

分享一下 不知道有需要的没…

查看全部问答>

电子元件模特秀剧场版

应wangjiafu1985要求,将所有上传了:) 爱因迪生:首先让我采访下这位长的像炮管似的重量级的兄弟。请问先生是叫什么电阻? 选手(瓮声瓮气):我是波纹电阻。 爱因迪生:还有这位呢?外面都是铝壳。 选手:所以偶叫铝壳电阻。 爱因迪生 ...…

查看全部问答>

如何实现WINCE 启动画面(开机logo)? (PXA300+ Monahans L )

如题CPU 是PXA300 BSP Monahans L 现在没有启动画面,要实现启动画面,下载内核时的提示画面,都是静态的不需要动画.或者只显示一些提示语类似\"OS image downloading...\". 虽然看到很多人在网上问这个问题了,但有些地方还不清楚,所以再问一下. 有 ...…

查看全部问答>

如何获取串口线中DCD线上的中断

如题,要获取DCD线上的电平变化的中断…

查看全部问答>

求助:能否删除用户模式,使得一个ARM处理器能正常应用,分析适用场合与优缺点

求助:     能否删除用户模式,使得一个ARM处理器能正常应用,分析适用场合与优缺点,,请高手指点一二。。。。。。    谢谢 …

查看全部问答>

我装了VXWORKS FOR PENTIUM但是使用VxSim时报错,帮忙看看!!!

我装了VXWORKS FOR PENTIUM但是使用VxSim时报错,帮忙看看!!! 系统WINXP,CPU ATHLON XP-M 1.6G 运行VxSim,起先CPU占用率100%,几秒钟后报 --------------------------- Tornado --------------------------- error : image specified ca ...…

查看全部问答>

单片机小精灵1.3完美破解版

看了这么久的论坛,也下了不少大家常用的软件,推荐一款自己一直使用的不错软件,不知道大家用过没,貌似别人没发过吧。集合了许多常用功能:精确延时、定时/计数器、串口波特率等常用的代码生成,也可查询许多常用的寄存器…

查看全部问答>

需要一本电子版 EDA技术与verilog HDL

电子版 EDA技术与verilog HDL,不知哪位大侠有发给我一份,万分感谢。…

查看全部问答>

跪求大神解析

小弟看资料写的USART1的程序,想与上位机通信,但是无法接受数据……求大神教育 /* Includes ------------------------------------------------------------------*/ #include \"stm32f10x.h\" #include \"platform_config.h\" GPIO_InitTypeD ...…

查看全部问答>

关于在WIN7下的codewarrior

装的8.2的版本,兼容性解决,能打开,但是关闭的时候总是不能正常关闭cw,哪位大神遇到过这种情况不…

查看全部问答>