久芯网

在使用STM32H7系列芯片时,在用户代码内增加了开启读保护的代码,有设置了通过指令触发解除读保护的代码,再触发解除读保护指令后,使用ST-link查看读保护未

avatar huiyi 提问时间: 2023-06-30 13:31:36 / 未解决

接触读保护的代码如下:

void Flash_DisableReadProtection(void)

{ FLASH_OBProgramInitTypeDef OBInit;

HAL_FLASHEx_OBGetConfig(&OBInit);

if(OBInit.RDPLevel == OB_RDP_LEVEL_1)

{ OBInit.OptionType = OPTIONBYTE_RDP;

OBInit.RDPLevel = OB_RDP_LEVEL_0;

// OBInit.WRPState = OB_WRPSTATE_DISABLE;

HAL_FLASH_Unlock(); HAL_FLASH_OB_Unlock(); if(HAL_FLASHEx_OBProgram(&OBInit)!=HAL_OK)

{

HAL_FLASH_OB_Launch();

HAL_FLASH_OB_Lock();

HAL_FLASH_Lock();

return; }

HAL_FLASH_OB_Launch();

HAL_FLASH_OB_Lock();

HAL_FLASH_Lock(); }

return; }各位帮忙看看什么问题


如需获得 STM32H7 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

3个回答
  • avatar butterflyspring
    回答时间: 2023-06-30 13:58:20

    一般来说,RDP LEVE1 改到 RDP LEVE0 会引起芯片擦除

  • avatar huiyi
    回答时间: 2023-06-30 14:30:34
    butterflyspring 发表于 2023-6-1 11:08
    一般来说,RDP LEVE1 改到 RDP LEVE0 会引起芯片擦除

    RDP_LEVE1改到RDP_LEVE0会全片擦除,这个我也通过手册了解了。但是在通过这个代码后,用ST-link查看时,读保护没有解除,这可能是什么原因导致?

  • avatar xmshao
    回答时间: 2023-06-30 15:00:25

    通过用户代码开启RDP保护功能正常操作,但在代码里做读保护解除就有点另类了。 你通过用户代码来解除读保护 导致用户代码都完蛋了,解除的意义是什么呢? 毕竟读保护对用户自身代码是没有妨碍的。 你现在是好奇或纠结的是为何代码里做过解除操作后仍是读保护状态,这个不好说。 个人观点是或不是读保护状态 已经不重要了。可能是因为用户代码只运行一部分 就被干掉了。下面部分来自H7系列参考手册的文字供你参考。 When Level 1 is active, programming the protection option byte (RDP) to Level 0causes the Flash memory and the backup SRAM to be mass-erased. As a result the user code area is cleared before the read protection is removed.

会员中心 微信客服
客服
回到顶部