首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置PCROP STM32H7 (STM32H743)时出错

设置PCROP STM32H7 (STM32H743)时出错
EN

Stack Overflow用户
提问于 2022-03-17 09:29:20
回答 1查看 306关注 0票数 2

目标

我试图在我的STM32H743VI微控制器上设置一个PCROP区域,但是在执行HAL_FLASH_OB_Launch()时,我得到了错误代码HAL_FLASH_ERROR_OB_CHANGE,并且没有设置PCROP区域。

我使用的代码的相关部分应该是以下部分

我的代码

代码语言:javascript
运行
复制
    #include "stm32h7xx_hal.h"

    FLASH_OBProgramInitTypeDef OBInit;
    HAL_FLASHEx_OBGetConfig(&OBInit);

    HAL_FLASH_Unlock();
    HAL_FLASH_OB_Unlock();

    // program OB
    OBInit.OptionType       = OPTIONBYTE_PCROP;
    OBInit.PCROPStartAddr   = 0x8030000;
    OBInit.PCROPEndAddr     = 0x8031000;
    OBInit.PCROPConfig      = OB_PCROP_RDP_ERASE;
    OBInit.Banks            = FLASH_BANK_1; // (1, 2 oder BOTH)
    HAL_FLASHEx_OBProgram(&OBInit);

    /* write Option Bytes */
    if (HAL_FLASH_OB_Launch() != HAL_OK) {
        // Error handling
        while (1)
        {
        }
    }

    HAL_FLASH_OB_Lock();
    HAL_FLASH_Lock();

该代码主要是受youtube视频“安全Part3 - STM32安全特性- 07 - PCROP实验室”(由STMicroelectronics编写)以及我必须更改RDP级别的工作代码的启发。

设置

我的秘密函数在预期的地址范围内,我是通过在Flash.Id文件中添加内存区域来实现的

代码语言:javascript
运行
复制
MEMORY
{
    [...]
    PCROP   (x)     : ORIGIN = 0x08030000,  LENGTH = 16K
}

并相应地将函数文件放入该部分。

代码语言:javascript
运行
复制
SECTIONS
{
    [...]
    .PCROPed :
    {
        . = ALIGN(4);
        *led_blinking.o (.text .text*)
        . = ALIGN(4);
    } > PCROP
    [...]
}

我为我保存秘密函数的文件设置了标志-mslow flash-data。我这样做并没有真正理解为什么,遵循视频中的教程(见上文)。

我试过的

我用我的J-跟踪调试器调试了我的程序,似乎我正在成功地执行STM32H743/753参考手册(第159页)中描述的选项字节修改序列。

保护整个Flashpage (start 0x080020000,end 0x0803FFFF)也不起作用,尽管我并不认为它会产生影响。

我还尝试了PCROPConfig的另一个选项,即OB_PCROP_RDP_NOT_ERASE选项。

HAL_FLASHEx_OBProgram(& ObInit )按预期工作,ObInit配置被正确地设置为_FLASH->PRAR_PRG1 1寄存器。对于我的代码,寄存器的内容是0x80880080。

我确实断开和重新连接的微控制器从电源和调试器,以防止我没有正确的POR。

我检查了勘误表,但没有一个勘误表适用于我的问题。

编辑

我在“我的代码”部分更改了PCROP保护的区域。我这样做了,因为我的代码通常是功能性的,我发现保护第一个flash页面中的区域不是个好主意!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-18 14:20:37

嗯,到目前为止代码看起来还不错。

确定在再次设置PCROP之前已禁用PCROP吗?

检查是否从其他地方设置了PRAR_CUR1。尽管设置了PCROP,但在尝试设置时,PCROP将引发失败。

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

https://stackoverflow.com/questions/71509895

复制
相关文章

相似问题

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