首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读出保护的STM32F2去除

读出保护的STM32F2去除
EN

Stack Overflow用户
提问于 2014-02-04 14:56:25
回答 2查看 14.5K关注 0票数 3

STM32F2 micro-controller内置了防止使用调试接口读取应用程序代码的功能。它工作良好,通过将读保护(RDP)级别配置为'1' (!0xAA || !0xCC) or '2' (0xCC which is irreversible)非常容易完成。除了试图关闭它是我遇到问题的地方。

将RDP级别降回0时的预期行为:

  • 芯片将执行一次大规模闪存擦除。
  • 然后清除保护标志。
  • 系统复位

除了电源循环之后,闪光灯已经被成功地擦除,但是保护标志保持在级别'1‘(0x55)上,保持调试接口禁用。从而阻止我编写任何新的应用程序代码。不过,可以摆弄调试器,并手动将标志强制到0级(0xAA)。

有没有人在STM32F2xx系列中遇到过同样或类似的问题,可以帮助我解决这个问题?我正在使用STM32标准外围驱动程序来编程闪存。

启用

代码语言:javascript
运行
复制
// Enable read out protection
FLASH_OB_Unlock();
FLASH_OB_RDPConfig(OB_RDP_Level_1);
FLASH_OB_Launch();
FLASH_OB_Lock();

// Restart platform
NVIC_SystemReset();

禁用

代码语言:javascript
运行
复制
// Disable read out protection
FLASH_OB_Unlock();
FLASH_OB_RDPConfig(OB_RDP_Level_0);
FLASH_OB_Launch();
FLASH_OB_Lock();

// Restart platform
NVIC_SystemReset();
EN

回答 2

Stack Overflow用户

发布于 2014-07-07 17:05:35

这是因为在清除保护标志之前,和中间的大量闪存擦除,你重新启动芯片。

恢复芯片的唯一方法是使用系统引导加载程序。

强制boot0引脚为1,并强制boot1引脚在启动时为0,启动引导加载程序,然后连接USB并与DFU编程器编程。您可以下载DFU程序员这里

票数 2
EN

Stack Overflow用户

发布于 2016-12-12 18:15:01

我按照以下方式使用了这个库(没有FLASH_Unlock();,它就无法工作):

代码语言:javascript
运行
复制
// Flash Readout Protection Level 1
if (FLASH_OB_GetRDP() != SET) {
    FLASH_Unlock();                           // this line is critical!
    FLASH_OB_Unlock();
    FLASH_OB_RDPConfig(OB_RDP_Level_1);
    FLASH_OB_Launch();                        // Option Bytes programming
    FLASH_OB_Lock();
    FLASH_Lock();
}

不需要NVIC_SystemReset();

STM32 ST-LINK实用程序CLI中,检查功能对我来说最有效:

代码语言:javascript
运行
复制
> "C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -c SWD -rOB
STM32 ST-LINK CLI v3.0.0.0
STM32 ST-LINK Command Line Interface

ST-LINK SN : 51FF6D064989525019422287
ST-LINK Firmware version : V2J27S0
Connected via SWD.
SWD Frequency = 4000K.
Target voltage = 2.9 V.
Connection mode : Normal.
Device ID:0x422
Device flash Size : 256 Kbytes
Device family :STM32F302xB-xC/F303xB-xC/F358xx

Option bytes:
RDP         : Level 1
IWDG_SW     : 1
nRST_STOP   : 1
nRST_STDBY  : 1
nBoot1      : 1
VDDA        : 1
Data0       : 0xFF
Data1       : 0xFF
nSRAM_Parity: 1
WRP         : 0xFFFFFFFF

不是真正的解决方案,但我希望这能节省一些时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21555798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档