找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2246|回复: 0
收起左侧

STM32对芯片启动读保护,实现加密(详解)

[复制链接]
ID:346927 发表于 2021-5-27 15:03 | 显示全部楼层 |阅读模式
STM32可以对存储在flash上的程序进行读保护.
•    启动读保护后,用户就不能再读写程序了.
•    所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序

头文件位于:#include "stm32f10x_flash.h"

启动保护,用在main()函数初始化时调用:

void Set_Protect(void) //启动保护
{
  if(FLASH_GetReadOutProtectionStatus() != SET)
  {
    FLASH_Unlock(); //解锁  
    FLASH_ReadOutProtection(ENABLE);
    FLASH_Lock();//上锁
  }
}

注意:
当代码第一次调用Set_Protect()函数启动读保护时。
期间不能再次调用Off_Protect()函数关闭读保护,需要重新断电才能关闭读保护(因为Flash状态启动读保护后,不能立即设置Status=1)

关闭读保护,在串口接收某个有效数据或按下某个按键时,调用:

void Off_Protect(void) //关闭保护
{
  if(FLASH_GetReadOutProtectionStatus() != RESET)
  {
    FLASH_Unlock(); //不解锁FALSH也可设置读保护
    FLASH_ReadOutProtection(DISABLE);
    FLASH_Lock();//上锁
  }
}


运行测试
1.第一步,下载程序
51hei.png
2.下载成功后,再次烧写程序,校验是否启动读保护(因为启动读保护后,不能进行读写程序了)
   51hei.png
3.通过ST-LINK Utility工具尝试连接芯片,发现确实不能读数据了
51hei.png
然后只要代码调用Off_Protect()函数,便可以取消保护了

oid SysLockProtectedProc(u8 nType)
{
        //设置读保护:
        if (nType == 0x01)
        {
                if (FLASH_OB_GetRDP() != SET)
                {
                        FLASH_Unlock();

                        FLASH_OB_Unlock();

                        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);

                        FLASH_OB_RDPConfig(OB_RDP_Level_1);
                        FLASH_OB_Lock();
                }
        }
        //解除读保护
        else
        {
                if (FLASH_OB_GetRDP()  != RESET)
                {
                        FLASH_Unlock();

                        FLASH_OB_Unlock();

                        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);

                        FLASH_OB_RDPConfig(OB_RDP_Level_0);
                        FLASH_OB_Lock();
                }
        }
}

上面这个函数可以实现读保护,下载完程序后要断电,在上电。这样就无法下载和调试。需要用STVP全片擦除。或者事先写好解除保护的程序。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表