返回列表 回复 发帖

[应用程序问题] stm32 读写保护 专贴

如果在STM32上加载了Flash读保护,只有一种办法可以解必须写一个程序并使用JTAG在RAM中运行,这个程序的目的是清除Flash的读写保护,这样Flash的内容会自动被擦除,然后Flash就可以重新使用了。

下次做这样的操作时,请预置一段清除Flash的读写保护的程序,这段程序能够通过某种机制启动,这样就不会再发生这种事情。
在路上 我们一起奋斗
淘宝平台:http://shop60442272.taobao.com/
读保护解除的方式
在RAM中執行後 OK!
int main (void) {
FLASH_Status status = FLASH_COMPLETE;

  Chip_Init();

  UnlockFlash();
  status = WaitForLastOperation(10);
  FLASH->OPTKEYR = FLASH_KEY1;
  FLASH->OPTKEYR = FLASH_KEY2;

  FLASH->CR |= CR_OPTER_Set;
  FLASH->CR |= CR_STRT_Set;

  status = WaitForLastOperation(10);

  if(status == FLASH_COMPLETE)
    {
      /* if the erase operation is completed, disable the OPTER Bit */
      FLASH->CR &= CR_OPTER_Reset;

      /* Enable the Option Bytes Programming operation */
      FLASH->CR |= CR_OPTPG_Set;

      OB->RDP = RDP_Key;  
      }

      /* Wait for last operation to be completed */
      status = WaitForLastOperation(10);
   
      if(status != FLASH_BUSY)
      {
        /* if the program operation is completed, disable the OPTPG Bit */
        FLASH->CR &= CR_OPTPG_Reset;
      }
  while(1);

}
在路上 我们一起奋斗
淘宝平台:http://shop60442272.taobao.com/
可能忽略的问题

和你的程序比较了一下,原来是我没有Flash_Unlock().哈哈
现在总结一下FLASH读保护和解除读保护的步骤:
(1)设置读保护
int main(void)
{
    ....
    if(FLASH_GetReadOutProtectionStatus() != SET)
    {
        //FLASH_Unlock();不解锁FALSH也可设置读保护???
        FLASH_ReadOutProtection(ENABLE);   
    }
    ......
    while(1)
    {
       .....
     }
}
(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后
代码自己杀死了自己,哈哈!!!
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
     FLASH_Unlock();
     FLASH_ReadOutProtection(DISABLE);   
}   

※前面测试一直不能成功能解除读保护,原来是没有Unlock FLASH。

如果没有在程序中加入解除读保护代码,也不要紧,可以写段RAM中运行的程序
用于解除读保护,执行后,FLASH会自动全部擦除。代码如下:
int main(void)
{
     Chinp_Init();
     FLASH_Unlock();
     FLASH_ReadOutProtection(DISABLE);
}

※对于在RAM中运行程序,说明如下:
(1)我使用IAR + J-Link,不用把Boot0和boot1脚设置成从RAM启动也可在RAM中调试(我是设置成从FLASH启动)。
(2)在IAR环境中设置Link文件为lnkarm_ram.xcl
(3)Debuger选项Download tab中勾全部去掉。
按上面设置完成后,按Debug按钮,执行上面程序,读保护可解除。
在路上 我们一起奋斗
淘宝平台:http://shop60442272.taobao.com/
返回列表