[STM32F4] STM32F407片内flash加读保护的问题

[复制链接]
8557|4
 楼主| yan2005 发表于 2014-10-12 16:20 | 显示全部楼层 |阅读模式
代码如下:
       FlagStatus readstatus = RESET;

        // 设置片内flash读保护
        // typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
        readstatus = FLASH_OB_GetRDP();
        if(readstatus != SET)
        {
                  printf("\r\nstatus = %d, try RDP\r\n", readstatus);
                  FLASH_Unlock();
                  FLASH_OB_Unlock();
                  FLASH_OB_RDPConfig(OB_RDP_Level_1);  // 读保护
                  FLASH_OB_Lock();
                  FLASH_Lock();
                  NVIC_SystemReset(); // 重启动板子
          }
          else
                  printf("\r\nSET OK\r\n");

以上代码的目的是: 检查读保护状态,如果失败就加上读保护,然后重启;如果有读保护,就直接启动。

实际运行的时候,发现加读保护不成功,串口不停地循环打印"status = 0, try RDP"。

另外,用另外一个烧写工具直接设置读保护功能,板子启动之后却发现是可以的,串口打印“SET OK”.

不知道上述的代码和这个烧写工具到底差别在什么地方? 有了解的朋友吗?
aozima 发表于 2014-10-12 18:28 | 显示全部楼层
https://bbs.21ic.com/icview-618835-1-1.html
10楼

正确的顺序应该是:
  1. #if 1
  2.     if(SET != FLASH_OB_GetRDP())
  3.     {
  4.         printf("Flash read protection not set, protection.....\n");
  5.         FLASH_Unlock();
  6.         FLASH_OB_Unlock();

  7.         //FLASH_OB_WRPConfig();
  8.         FLASH_OB_RDPConfig(OB_RDP_Level_1);
  9.         //FLASH_OB_UserConfig();
  10.         //FLASH_OB_BORConfig();

  11.         printf("protection done\n");
  12.         FLASH_OB_Launch();
  13.         FLASH_OB_Lock();
  14.         FLASH_Lock();
  15.     }
  16. #endif /* Flash read protection */
然后系统重新上电,保护生效。
 楼主| yan2005 发表于 2014-10-13 08:49 | 显示全部楼层
aozima 发表于 2014-10-12 18:28
https://bbs.21ic.com/icview-618835-1-1.html
10楼

看来就是少了FLASH_OB_Launch();这句代码。

非常感谢!
mmuuss586 发表于 2014-10-13 20:28 | 显示全部楼层

解决了就好;
xurisheng0416 发表于 2016-5-5 10:49 | 显示全部楼层
如何解除读保护?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Activist > thinker  与大家一起进步

47

主题

302

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部