STM32/STM8技术论坛
直播中

yzz

未满1年用户 7经验值
擅长:控制/MCU
私信 关注
[问答]

STM32F429IGT6如何修改OPTCR

为什么STM32F429IGT6有的OPTCR是0x0FFFAAED,有的是0x4FFFAAFD。 0x4FFFAAFD的这个怎么重新配置成0x0FFFAAED?

回帖(1)

王秀兰

前天 18:21
STM32F429IGT6是一款基于ARM Cortex-M4内核的高性能微控制器,其内部包含一个选项字节(Option Bytes,简称OPTCR)寄存器,用于存储一些配置信息,如启动模式、看门狗配置等。不同的OPTCR值可能表示不同的配置,因此需要根据具体需求进行修改。

要将STM32F429IGT6的OPTCR从0x4FFFAAFD修改为0x0FFFAAED,可以按照以下步骤进行操作:

1. 确保微控制器处于调试模式:在修改OPTCR之前,需要确保微控制器处于调试模式。这可以通过使用JTAG或SWD接口连接调试器来实现。

2. 打开FLASH解锁序列:在修改OPTCR之前,需要先解锁FLASH。可以通过以下代码实现:

```c
void FLASH_Unlock(void) {
    HAL_FLASH_Unlock();
    HAL_FLASH_OB_Unlock();
}
```

3. 清除OPTCR寄存器:在修改OPTCR之前,需要先清除寄存器中的值。可以通过以下代码实现:

```c
void Clear_OPTCR(void) {
    HAL_FLASHEx_OBClear();
}
```

4. 修改OPTCR寄存器:将OPTCR寄存器的值修改为0x0FFFAAED。可以通过以下代码实现:

```c
void Set_OPTCR(uint32_t OBInit) {
    HAL_FLASHEx_OBProgram(FLASH_TYPEER_OPTIONBYTE, OBInit);
}
```

将以上代码组合在一起,实现修改OPTCR的完整过程:

```c
#include "stm32f4xx_hal.h"

void FLASH_Unlock(void) {
    HAL_FLASH_Unlock();
    HAL_FLASH_OB_Unlock();
}

void Clear_OPTCR(void) {
    HAL_FLASHEx_OBClear();
}

void Set_OPTCR(uint32_t OBInit) {
    HAL_FLASHEx_OBProgram(FLASH_TYPEER_OPTIONBYTE, OBInit);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();

    FLASH_Unlock();
    Clear_OPTCR();
    Set_OPTCR(0x0FFFAAED);

    while(1) {
        // 其他代码
    }
}
```

5. 重新锁定FLASH:在修改OPTCR之后,需要重新锁定FLASH。可以通过以下代码实现:

```c
void FLASH_Lock(void) {
    HAL_FLASH_OB_Launch();
    HAL_FLASH_Lock();
}
```

将以上代码添加到main函数中,实现重新锁定FLASH:

```c
int main(void) {
    HAL_Init();
    SystemClock_Config();

    FLASH_Unlock();
    Clear_OPTCR();
    Set_OPTCR(0x0FFFAAED);
    FLASH_Lock();

    while(1) {
        // 其他代码
    }
}
```

6. 重新启动微控制器:在修改OPTCR之后,需要重新启动微控制器以使新的配置生效。可以通过以下代码实现:

```c
void NVIC_SystemReset(void) {
    NVIC_SystemReset();
}
```

将以上代码添加到main函数中,实现重新启动微控制器:

```c
int main(void) {
    HAL_Init();
    SystemClock_Config();

    FLASH_Unlock();
    Clear_OPTCR();
    Set_OPTCR(0x0FFFAAED);
    FLASH_Lock();
    NVIC_SystemReset();

    while(1) {
        // 其他代码
    }
}
```

通过以上步骤,可以将STM32F429IGT6的OPTCR从0x4FFFAAFD修改为0x0FFFAAED。需要注意的是,在修改OPTCR之前,请确保了解不同OPTCR值的含义,以免对微控制器造成不可逆的损害。
1 举报
  • yzz: 为什么我的库里没有这个函数 HAL_FLASHEx_OBProgram(FLASH_TYPEER_OPTIONBYTE, OBInit);

更多回帖

发帖
×
20
完善资料,
赚取积分