
前言 STM32 PCROP 专有代码读出保护,将某个区域设置为仅允许执行,可防止代码被非法读出与修改。ST 网站提供了免费的PCROP 参考代码,但是例程中仅仅提供了用代码设置 PCROP。为方便利用 PCROP 进行知识产权保护的开发和部署,这篇文章提供了方法, 可在 RDP 级别设置为 1 或者 0 时,使用代码清除 PCROP。 ST 网站上的 PCROP 参考代码 学习使用 PCROP,可从 ST 网站下载文档以及参考代码。文档里有一步一步的详细说明。参考代码则实现了,如何设置编译开发环境去掉文字库(Literal pool),以避免受保护区域需要被读访问;参考代码也实现了如何利用代码使能 PCROP 保护以及如何导出接口符号供二次开发使用。你可以编译运行 PCROP 参考代码。一旦下载到开发板并运行后,扇区 2 会自动被设置成 PCROP 保护。你将无法再次下载 代码到该扇区,也无法读出该扇区的内容。若想通过 STLink 工具解除 PCROP 保护,则会导致整个 Flash 被擦除。 使用代码清除 PCROP 在熟悉 ST 网站上的 PCROP 参考代码基础之上,我们将讨论如何使用代码清除 PCROP。 1. 原理 根据用户手册,要想清除 PCROP 保护,读保护 RDP 级别必须从 1 设置成 0。也就是说,即使当前 RDP 级别为 0,我们也要使用代码将其设置成 1。然后,同时关掉 PCROP 和将 RDP 设置成 0。这也说明,尽管是清除 PCROP 保护,我们的代码必须加入 RDP 的设置函数, 而不能仅仅修改参考代码中的 PCROP_Enable 的状态字段使其变成 PCROP_Disable。 ![]() 2. 材料准备 开发板: STM32F429I-Discovery 开发工具:STM32Cube_FW_F4_V1.15.0 STM32CubeExpansion_AN4701_F4_V1.0.0(从 ST 网站下载的参考代码) STM32 STLink IAR/Keil 注:也可以选择其他支持 PCROP 的 STM32 系列并选择相应的开发板与固件库。 3. 代码 设置 RDP 到级别 1 该函数在 RDP 级别为 0 时,若需要清除 PCROP, 必须被使用。
设置 RDP 到级别 0 在清除 PCROP 保护的代码里不会直接调用这个函数。参考手册提到,PCROP 的清除必须与 RDP 从 1 到 0 同时发生,而下列 RDP_Disable 函数则是完整独立的,无法与 PCROP 的 Option bytes 同时操作。不过,这个代码的中间部分,也就是实际功能部分,将在清除 PCROP 时被重用。
清除 PCROP 下述代码清除 PCROP, 它基于参考代码中的 PCROP_Enable 函数改写而成。首先,它通过 RDP_Enable 将 RDP 设置成 1。注意实验中不要将 RDP 设置成为 2,否则所有的 Option bytes 将不再被允许修改。然后将 RDP 和 PCROP 都设置完毕,调用一次 HAL_FLASH_OB_Launch 达到同时将 RDP 设置成 1 并清除 PCROP 保护。
4.运行 在主函数中,调用 PCROP_Disable 可解除 PCROP 保护。RDP_Enable 后需要关闭电源,重新启动,然后系统正常运行解除 PCROP 保护。解除保护后,可通过 STLink 确认 PCROP Option bytes 已恢复,同时也可以看到整个 Flash 内容已被擦除。 结论 本文讨论了完全使用代码控制 PCROP 的设置与清除。它可以使用在 PCROP 代码保护的开发与部署阶段。 |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化