在程序中,修改STM32G0B1RB的Option Byte

關鍵字 :option byte

1. 首先通過STM32G0系列的參考手冊RM0444,找到關於Option Byte的介紹





2. 在MDK的程序中讀到關於FLASH_OPTR寄存器的默認值是,FLASH_OPTR = 0xFFDFFEAA = 0b1111 1111 1101 1111 1111 1110 1010 1010,第17位為1,後面會對第17位進行修改




3. 通過HAL庫stm32g0xx_hal_flash.c中的HAL_FLASHEx_OBProgram(),對要修改的Option Byte進行配置;調用 HAL_FLASH_OB_Launch(),加載內容

void Config_Option_Bytes(void)
{
// FLASH_OBProgramInitTypeDef OptionsBytesStruct;

HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);//讀取系統Option Byte配置

if (( OptionsBytesStruct.USERConfig & FLASH_OPTR_IWDG_STOP ) != 0) //檢查標誌位是否被置1
{

OptionsBytesStruct.OptionType = OPTIONBYTE_USER;//
OptionsBytesStruct.USERType = OB_USER_IWDG_STOP ;//過濾選項
OptionsBytesStruct.USERConfig &= (~(FLASH_OPTR_IWDG_STOP )); //標誌位置1
// |= ((FLASH_OPTR_IWDG_STOP ));//=1 標誌位置1
// &= (~(FLASH_OPTR_IWDG_STOP ));//=0 標誌位置0


if (HAL_FLASH_Unlock() != HAL_OK) //解鎖flash
{
NVIC_SystemReset();
}
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);//

if (HAL_FLASH_OB_Unlock() != HAL_OK) //解鎖Option Byte
{
NVIC_SystemReset();
}

if (HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK) //寫入配置
{
NVIC_SystemReset();
}

HAL_FLASH_OB_Launch(); //加載配置,此處會造成系統重啟
// HAL_FLASH_OB_Lock();
// HAL_FLASH_Lock();
}
}​


4.修改過後,通過軟體MDK,觀察FLASH_OPTR寄存器數值,FLASH_OPTR = 0xFFDDFEAA




5.FLASH_OPTR = 0xFFDDFEAA = 0b1111 1111 1101 1101 1111 1110 1010 1010,中的第17位被修改為0,修改成功


6. 官方不建議通過程序方式修改,操作錯誤會造成晶片鎖死,推薦客戶使用STM32CubeProg軟體,更加簡單安全



7. 需要注意,在通過MDK仿真接入到板子的時候會出現FLASH_SR狀態寄存器報錯誤,在仿真狀態下需要軟體重啟就可以解決了,不接入仿真器的時候,沒有發現這個問題

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論