winterw 发表于 2024-4-25 15:45:23

请教,如何在stm32h723上修改option byte中的iwdg字段

默认情况下,option byte中的FLASH_OPTSR_FZ_IWDG_SDBY是1,想把它改成0。但是按照下面的方法没有修改成功。


void get_option_bytes(void)
{
    uint32_t val_d1 = 0;
    uint32_t val_d2 = 0;
    uint32_t val_security = 0;
    uint32_t flag = 1;
   
    FLASH_OBProgramInitTypeDef ob = {0};
   
    HAL_FLASH_Unlock();
    HAL_FLASH_OB_Unlock();
   
    HAL_FLASHEx_OBGetConfig(&ob);

    val_d1 = ob.USERConfig & FLASH_OPTSR_NRST_STBY_D1;
    val_d2 = ob.USERConfig & FLASH_OPTSR_NRST_STBY_D2;
    val_security = ob.USERConfig & FLASH_OPTSR_SECURITY;
    log(LOG_DBG, "ob.userconfig=0x%x\r\n", ob.USERConfig);
    log(LOG_DBG, "d1=0x%x\r\n", val_d1);
    log(LOG_DBG, "d2=0x%x\r\n", val_d2);
    log(LOG_DBG, "security=0x%x\r\n", val_security);

    val_d1 = ob.USERConfig & FLASH_OPTSR_NRST_STOP_D1;
    log(LOG_DBG, "stop = 0x%x\r\n", val_d1);
    val_d2 = ob.USERConfig & FLASH_OPTSR_FZ_IWDG_SDBY;
    log(LOG_DBG, "iwdg = 0x%x\r\n", val_d2);

    if(1 == flag){
      ob.OptionType = OPTIONBYTE_USER;
      ob.USERType = OB_USER_IWDG_STDBY;
      //ob.USERConfig &= (~FLASH_OPTSR_FZ_IWDG_SDBY_Msk);
      ob.USERConfig = OB_IWDG_STDBY_FREEZE;
      HAL_FLASHEx_OBProgram(&ob);
      HAL_FLASH_OB_Launch();
      log(LOG_DBG, "modified options bytes\r\n");
    }
                                             
    HAL_FLASH_OB_Lock();
    HAL_FLASH_Lock();

}

winterw 发表于 2024-4-25 15:48:13

参考代码在这里 https://blog.csdn.net/qq_41532050/article/details/132223585。 不知道option byte区域的数值用不用先擦除再写入,但是没有擦除的函数。
页: [1]
查看完整版本: 请教,如何在stm32h723上修改option byte中的iwdg字段