stm32对flash的读写保护与解除

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

 
  1. int main(void)

  2. {

  3. ...

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

  5. {

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

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

  8. }

  9. ...

  10. while(1)

  11. {

  12. ...

  13. }

  14. }

上面的代码执行后,使用j-link就不能读出程序了,实现了代码读保护。

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

5、解除读保护代码:

 
  1. void Off_Protect(void) //关闭保护

  2. {

  3. if(FLASH_GetReadOutProtectionStatus() != RESET)

  4. {

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

  6. FLASH_ReadOutProtection(DISABLE);

  7. FLASH_Lock(); //上锁

  8. }

  9. }

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

 
  1. int main(void)

  2. {

  3. Chip_Init();

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

  5. FLASH_ReadOutProtection(DISABLE);

  6. }

五、测试

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

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

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

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

转载自:STM32_读保护功能和清除读保护功能设置 - 百度文库

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32是STMicroelectronics(意法半导体)推出的一系列32位微控制器(MCU)系列产品。STM32芯片内部集成了Flash存储器,该存储器用于存储程序代码和数据。为了确保程序代码和数据的安全性,STM32提供了一种Flash保护的功能。 Flash保护使得数据或代码不被非授权访问和复制,保护了知识产权和软件的安全。在STM32芯片中,Flash保护可以通过设置相应的Flash控制寄存器来实现。 通常,Flash保护提供了两种级别:级别1和级别2。级别1可以保护程序代码、EEPROM数据和Option Bytes(包含了设备的一些基本配置)不被非法取;级别2在级别1的基础上提供了进一步的保护,可以防止任何方式的取,包括自带的调试功能以及外部编程方式。 要设置Flash保护,首先需要对Flash设备进行解锁,然后根据需求设置相应的保护级别。在解锁过程中,必须提供正确的密钥以确认授权。一旦Flash保护被设置,只有通过解密才能取该区域的数据。 需要注意的是,一旦设置了Flash保护,将无法再进行擦除或编程操作。所以在设置Flash保护之前,必须确保程序代码、数据和设备选项已经写入Flash中,并且不再需要修改。 总结来说,STM32芯片的Flash保护功能通过设置相应的寄存器来实现,以保护程序代码和数据的安全。但需要注意的是,设置Flash保护后将无法再修改Flash内容,所以在设置前需要确保Flash中的数据已经完整且不再需要修改。 ### 回答2: STM32Flash保护功能是指通过设置特定的寄存器位来保护Flash存储器中的内容,防止未经授权的取或修改。Flash保护功能可以有效保护应用程序的机密性以及保护重要代码和数据不被盗取或恶意篡改。 STM32芯片提供了多种级别的Flash保护,可以根据需要进行灵活的配置。主要有两种级别的Flash保护: 1. 全域级别的Flash保护:可以保护整个Flash存储器中的内容,使其无法被取。设置该级别的保护后,所有的Flash存储器都无法取,包括应用程序的代码和数据。只能进行写操作,但无法取其内容。 2. Bank级别的Flash保护:可以对Flash存储器的不同区域进行不同的保护设置。可以设置某些Flash存储器区域只能写入而不能取,另一些区域允许既取又写入。 使用STM32Flash保护功能需要通过编程STM32芯片的Flash保护寄存器来实现。具体的步骤包括设置保护级别、选择Flash存储器区域、设置保护位等。保护设置通常在芯片初始化之前进行,以确保代码和数据的安全性。 需要注意的是,一旦Flash保护被设置,就无法再对其进行修改或取消。因此,在设置Flash保护之前,务必仔细考虑保护级别和区域的设置,以免造成不可逆的数据丢失或功能限制。 总结起来,STM32Flash保护功能可以有效保护代码和数据的安全性,防止未经授权的取和修改。通过合理配置保护级别和区域,可以提高系统的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值