0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的Flash写了保护怎么办?

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2022-04-02 15:55 次阅读

关于STM32对内部Flash的保护

为了防止对Flash的非法访问,所有STM32的芯片都提供对Flash的保护,具体分为写保护和读保护。

如果对Flash设置了写保护,那就无法对Flash进行编程和擦除。在开发STM32的时候,如果出现这种情况,通常仿真器都支持对Flash进行解锁,像jlink,stlink等仿真器都支持这个功能。

在使用MDK进行调试的时候,可能会遇到如下图所示的报错信息,这时候就要排查Flash是不是被保护起来了。

f4b3f78e-b019-11ec-aa7f-dac502259ad0.png

读保护即大家通常说的“加密”,是作用于整个Flash存储区域,相关文章:STM32等单片机程序加密的方法一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:

  • 通过调试器(JTAG或SWD)

  • RAM中启动并执行的程序

写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志,读与写设置的效果见下表:

f4c95912-b019-11ec-aa7f-dac502259ad0.png

当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:

  • 调试执行程序时

  • 从RAM启动并执行程序时

STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码
Flash保护的相关函数

FLASH_Unlock();   //Flash解锁 FLASH_ReadOutProtection(DISABLE);  //Flash读保护禁止   FLASH_ReadOutProtection(ENABLE);   //Flash读保护允许

STM32如何设置读保护和解除读保护?

读保护设置后将不能读出Flash中的内容。

如何设置读保护

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

int main(void){  ...if (FLASH_GetReadOutProtectionStatus()!=SET)//检查设置读保护与否  {    FLASH_Unlock();         //写保护时可以不用这句话,可用可不用    FLASH_ReadOutProtection(ENABLE);     //设置读保护  }  ...while(1)  {    ...  }}

上面的代码执行后,使用j-link就不能读出程序了,实现了代码读保护。需要注意的是,芯片读保护后无法再次烧写新的程序到Flash中,必须要解除读保护才可以。但是当解除读保护的时候STM32会自动擦除整个Flash,起到保护数据的作用。

通过代码解除Flash保护

解除读保护可以设置在按键里面,方便实现解锁,也可以设置在命令中。如下是解除读保护代码:

f4dd8cb6-b019-11ec-aa7f-dac502259ad0.png

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

注意:执行后,Flash会自动全部擦除。


	
int main(void){Chip_Init();  FLASH_Unlock(); //不解锁FALSH也可设置读保护,可用可不用  FLASH_ReadOutProtection(DISABLE);}

通过ST-LinkUtility来解除Flash保护

在STLink连接目标板的情况下打开程序烧写软件ST-Link Utility,在菜单栏的Target下选择connect,因为这时候Flash已经被锁住了,能看到如下图所示的错误提示。

f4ef2930-b019-11ec-aa7f-dac502259ad0.png

下面来操作如何解除Flash保护。

请确保当前已经正确接了STLink和目标板,在菜单栏Target里打开Option Bytes...选项,发现在这里Read Out Protection选项是Enable,这个表示无法通过SWD读取STM32内部Flash的程序。

f5093122-b019-11ec-aa7f-dac502259ad0.png

将Read Out Protection选项设置为Disable,并点击Apply。

这时候Flash已经成功解锁了,跟上文提到的解除Flash保护的结果一样,内部Flash已经被擦除了,如下图红框中所示。

f51b3f8e-b019-11ec-aa7f-dac502259ad0.png

完成以上步骤之后,在菜单栏Target下选择Disconnect断开与目标板连接。

重新进入MDK,可以正常对目标板烧写程序了。

通过ST-LinkUtility来设置Flash保护

f536c650-b019-11ec-aa7f-dac502259ad0.png

在菜单栏Target里打开Option Bytes...选项,可以看到下面有Flash sector protection选项。选择Select all之后,发现所有Page的Protection项都已经变成Write Protection了,只要选择Apply选项就可以对Flash进行写保护,如上图所示。


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1635

    浏览量

    148020
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    355996
  • 调试器
    +关注

    关注

    1

    文章

    305

    浏览量

    23739

原文标题:STM32的Flash写了保护怎么办?

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    信号噪声太大怎么办

    我用一个TMR磁场传感器,后面接一个仪表放大器,测出来的信号的噪声特别大,如图所示。这种情况怎么办
    发表于 09-06 11:09

    ddos造成服务器瘫痪后怎么办

    在服务器遭受DDoS攻击后,应立即采取相应措施,包括加强服务器安全、使用CDN和DDoS防御服务来减轻攻击的影响。rak小编为您整理发布ddos造成服务器瘫痪后怎么办
    的头像 发表于 08-15 10:08 290次阅读

    大电流一体成型电感有噪音怎么办

    电子发烧友网站提供《大电流一体成型电感有噪音怎么办.docx》资料免费下载
    发表于 07-30 12:30 0次下载

    求助,关于STM32F302_FLASH保护的问题求解

    查看好些STM32F302资料,想通过FLASH保护来实现加密功能,添加以下代码后,没能实现预期功能: #define OB_RDP_Level_0((uint8_t)0xAA) #define
    发表于 05-08 06:26

    工控主板发生故障该怎么办

    工控主板发生故障该怎么办?前几天有个客户问了我这个问题,大部分情况下出现的故障并不可怕,主要是用户粗心大意造成的。那今天小编就来讲解一下工控主板一般会出现故障的主要原因及判断方法:
    的头像 发表于 04-11 18:19 879次阅读

    电容负极熔断怎么办

    在现代科技发展的时代,电容器在各个领域都扮演着重要的角色。然而,由于各种原因,电容器的负极可能会发生熔断的情况。那么,当电容器的负极熔断时,我们应该怎么办呢?
    的头像 发表于 04-10 14:15 524次阅读
    电容负极熔断<b class='flag-5'>怎么办</b>

    STM32GPIO口如果既要输入又要输出怎么办STM32 GPIO口8种模式如何准确的分析?

    STM32GPIO口如果既要输入又要输出怎么办STM32 GPIO口8种模式如何准 确的分析?
    发表于 04-08 08:27

    STM32MP135 linux SPI多字节时钟连续没有间隔怎么办

    使用STM32MP135作为SPI主机通讯时,由于SPI从设备速度慢,数据字节之间的时钟间隔要大于等于半个时钟周期;尝试设置struct spi_ioc_transfer-&gt;word_delay_usecs参数发现没有时钟间隔,应该怎么办? 正常时序图 有
    发表于 03-07 06:14

    怎样判断欠压保护器坏了怎么办

    判断欠压保护器坏了怎么办 欠压保护器是一种用于保护电气设备免受欠电压损害的重要装置。当电网电压低于设定值时,欠压保护器会自动切断电源,以防止
    的头像 发表于 02-26 10:55 3851次阅读

    rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办

    已经成功编写了外部flash下载算法,程序也能下载进去,但是不能进行调试怎么办? 我想放在内部flash调试,但是发现已经下载不到内部了。 更改了.lds文件ROM地址,关闭dow
    发表于 02-20 07:24

    UCB states切为CONFIRMATION状态后,该UCB区域就不能被擦写了怎么办

    芯片手册中UCB states有四个状态UNLOCKED, CONFIRMATION, ERASED, ERRORED。我发现切为CONFIRMATION状态后,该UCB区域就不能被擦写了,这该怎么办
    发表于 02-01 08:15

    stm32 flash写数据怎么存储的

    stm32 flash写数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。在本文中,我将详细介绍
    的头像 发表于 01-31 15:46 2400次阅读

    修复辊压机轴承位磨损怎么办

    电子发烧友网站提供《修复辊压机轴承位磨损怎么办.docx》资料免费下载
    发表于 01-23 09:52 0次下载

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法  在现代社会中,WiFi已经成为了我们生活中必不可少的一部分。然而,有时我们可能会遇到WiFi无法访问互联网的问题,这给我们的学习
    的头像 发表于 01-17 11:17 3.4w次阅读

    风机轴磨损怎么办

    电子发烧友网站提供《风机轴磨损怎么办.docx》资料免费下载
    发表于 01-07 11:04 0次下载