STM32寫選項字節(option bytes)的正確姿勢


STM32 的 Flash information block 部分,包含有特殊的選項字節,可以用於系統配置等信息, 其中還有兩個有效字節(實際四個字節,兩個是校驗字節)的用戶自定義數據字節。

在嘗試寫入用戶自定義字節時,我遇到了寫入錯誤,但是比對用戶手冊,已經完成了應有的步驟。

后來通過對比系統庫的 example 中的 Flash 相關例子,看到正確的寫字節方式,還應該包含有“擦除”和對原有inform 的“復制”和再“寫入”,代碼如下。

HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
FLASH_OBProgramInitTypeDef obData;
HAL_FLASHEx_OBGetConfig(&obData);
HAL_FLASHEx_OBErase();
obData.DATAAddress = OB_DATA_ADDRESS_DATA0;
obData.DATAData = 0xAE;  //自定義數據
obData.OptionType = OPTIONBYTE_DATA;
if ( (ret = HAL_FLASHEx_OBProgram(&obData)) != HAL_OK){
        extern FLASH_ProcessTypeDef pFlash;
        char tmp[50] = {0};        
        sprintf(tmp, "write optby fail for %x, %08x", ret, pFlash.ErrorCode);
        debug(tmp, strlen(tmp));
        return -1;
}
obData.DATAAddress = OB_DATA_ADDRESS_DATA1;
obData.DATAData = 0xC9;  //自定義數據
if ((ret = HAL_FLASHEx_OBProgram(&obData)) != HAL_OK){
        char tmp[50] = {0};
        sprintf(tmp, "write optby fail for %x", ret);
        debug(tmp, strlen(tmp));
        return -1;
}

當然,也可以使用工具,更加便利。
比如 mcpisp。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM