STM32 Flash读保护设置和解除方法,保护代码不被读出。

这篇具有很好参考价值的文章主要介绍了STM32 Flash读保护设置和解除方法,保护代码不被读出。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:本文记录 关于 STM32 的 Flash 读保护的设置和解除方法,可以简单的保护 Flash 中的代码不被读出,这个方法能防止通过调试工具读出MCU内部程序,但不清楚专业搞破解的是否有手段读出设置了读保护的程序,为了代码更安全还是建议根据 MCU ID 增加软件加密,或者使用其他加密方式。

测试平台:测试环境是 STM32G474 , 其他 STM32 系列的类似,可以 CV 过去试试。

1.设置和解除读保护的代码:

/**
 * @brief  设置 Flash 读保护.
 * @param  [in] state:  true: 使能读保护, false: 关闭读保护.
 * @retval true:  设置成功.
 * @retval false: 设置失败.
 */
bool SetFlashReadProtection(bool state)
{
    FLASH_OBProgramInitTypeDef OptionsBytesStruct = { 0 };
    HAL_StatusTypeDef err;
    HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
    printf("HAL_FLASHEx_OBGetConfig():OptionsBytesStruct.RDPLevel = %02X \r\n", OptionsBytesStruct.RDPLevel);

    if (((state == true) && (OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0))
            || ((state == false) && (OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_1)))
    {
        OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
        if (state == true)
        {
            OptionsBytesStruct.RDPLevel = OB_RDP_LEVEL_1;
        }
        else
        {
            OptionsBytesStruct.RDPLevel = OB_RDP_LEVEL_0;
        }

        err = HAL_FLASH_Unlock();
        err |= HAL_FLASH_OB_Unlock();
        err |= HAL_FLASHEx_OBProgram(&OptionsBytesStruct);

        if (err == HAL_OK)
        {
            HAL_FLASH_OB_Launch();
            HAL_FLASH_OB_Lock();
            HAL_FLASH_Lock();
        }
        else
        {
            printf("flash lock false \r\n");
            return false;
        }

        printf("HAL_FLASHEx_OBGetConfig():OptionsBytesStruct.RDPLevel = %02X \r\n", OptionsBytesStruct.RDPLevel);
    }
    else
    {

    }
    printf("flash lock true \r\n");
    return true;
}

2.关闭调试接口代码

注意:HAL_FLASHEx_DisableDebugger(); 调用后 SWD 接口会被关闭,ST-LINK 等调试工具无法通过 SWD 连接 MCU,也无法使用 STM32 ST-LINK Utility 软件 通过 ST-LINK 连接MCU解除读保护。

JTAG:接口未测试

HAL_FLASHEx_DisableDebugger();  //禁用调试接口,锁后调试接口不能再使用,SWD口禁用。
HAL_FLASHEx_EnableDebugger();   //启用调试接口

3.读保护解除

3.1 通过 ST-LINK Utility 软件 和 ST-LINK 连接MCU解除读保护

添加读保护后无法读出 Flash 中的数据

stm32防止程序被读取,STM32,stm32,嵌入式硬件,单片机

解除读保护流程

stm32防止程序被读取,STM32,stm32,嵌入式硬件,单片机

Read Out Protection : 改为 Level 0 ,调整为  Level 0 后 Flash 中的程序会被自动擦除。

注意:千万不要改为 Level 2 ,改成Level 2 后 MCU 将会被彻底锁死,相当于熔断保护,无法通过软件再恢复。

stm32防止程序被读取,STM32,stm32,嵌入式硬件,单片机

3.2 通过 软件 解除

如果程序分 bootloader 和 app ,bootloader 中设置了读保护或者关闭调试接口,那可以通过专用的app去解除保护, app 中调分别调用文章来源地址https://www.toymoban.com/news/detail-823717.html

SetFlashReadProtection(false);//解除读保护
HAL_FLASHEx_EnableDebugger(); //启用调试接口

到了这里,关于STM32 Flash读保护设置和解除方法,保护代码不被读出。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32读写内部Flash(介绍+附代码)

            内部Flash读写详解 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般

    2024年02月15日
    浏览(39)
  • 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB,即0x80000 地址区间为0x8000000~0x0807FFFF IRAM1为片上数据存储器,即片上集成的SRAM存储器,对该处理器RAM大小为64KB,即0x10000 地址区间为0x20000000~0x20010000 这里问

    2024年01月16日
    浏览(51)
  • (超详细)STM32芯片Flash读写操作讲解和代码(寄存器版本)

    关于Flash,官方的解释为:Flash为32位宽的存储单元,可用于存储代码和数据常量。Flash模块位于微控制器内存映射中的特定基址……。而对于我们来说,只要知道Flash闪存区是一个掉电后也不会清除的数据存储地。(相信大家对于Flash闪存也有着一定 的了解了,我也不多说废话

    2023年04月19日
    浏览(48)
  • STM32CubeMX v6.9.0 BUG:FLASH_LATENCY设置错误导致初始化失败

    今天在调试外设功能时,发现设置了使用外部时钟之后程序运行异常,进行追踪调试并与先前可以正常运行的项目进行对比之后发现这个问题可能是由于新版本的STM32CubeMX配置生成代码时的BUG引起的。 MCU: STM32H750VBT6 STM32CubeIDE: Version: 1.13.0 Build: 17399_20230707_0829 (UTC) STM32CubeMX: v

    2024年02月15日
    浏览(55)
  • 【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

    在嵌入式系统开发中,使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间,以存储程序代码、配置数据等。W25Q64 是一款常见的 SPI Flash 存储器,具有64Mb容量和SPI接口。本文将介绍如何使用 STM32 CubeMX 结合 SPI 库与 W25Q64 SPI Flash 进行集成,以便在 STM32 微控制器上

    2024年02月22日
    浏览(48)
  • 3种方法解除RAR压缩文件的密码保护

    RAR是我们常见的压缩包文件格式,对于重要的文件,还可以添加密码保护。 那后期不需要保护了,是否可以解除密码呢?这时就要分情况了,在记得密码和忘记密码的不同情况下,用的方法也不同。 下面来具体说说,方法1和2对应记得密码的情况,方法3对应忘记密码的情况

    2024年02月02日
    浏览(40)
  • STM32 keil5 报错:flash download failed-cortex M3解决方法

    错误回顾 解决方法 

    2024年01月16日
    浏览(63)
  • 【STM32】STM32学习笔记-FLASH闪存(48)

    STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程 读写FLASH的用途: 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程(IAP),实现程序的自我更新 在线编

    2024年03月16日
    浏览(51)
  • STM32笔记 Flash

    笔记来源于江科协议的视频 芯片采用与stm32F103C8T6 •STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程,系统存储器里面存储的是BootLoader,是不允许修改的。 •读写FLASH的用途: 利

    2024年01月18日
    浏览(42)
  • STM32内部Flash

    目录 一、内部Flash简介 二、内部Flash构成 1. 主存储器 2. 系统存储区 3. 选项字节 三、内部Flash写入过程 1. 解锁 2. 页擦除 3. 写入数据 四、工程空间分布 某工程的ROM存储器分布映像: 1. 程序ROM的加载与执行空间 2. ROM空间分布表         STM32芯片内部有一个Flash存储器,主要

    2024年02月19日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包