打印
[STM32F4]

STM32F407片内flash加读保护的问题

[复制链接]
8104|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楼

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

        //FLASH_OB_WRPConfig();
        FLASH_OB_RDPConfig(OB_RDP_Level_1);
        //FLASH_OB_UserConfig();
        //FLASH_OB_BORConfig();

        printf("protection done\n");
        FLASH_OB_Launch();
        FLASH_OB_Lock();
        FLASH_Lock();
    }
#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 | 只看该作者

解决了就好;

使用特权

评论回复
5
xurisheng0416| | 2016-5-5 10:49 | 只看该作者
如何解除读保护?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

47

主题

302

帖子

1

粉丝