本帖最后由 killalljp 于 2018-8-23 17:16 编辑
最近用到要在STM32F103VBT6程序中使用HAL库加入FLASH读保护功能,网上找了一下多多少少都有点问题
最后奉献已验证代码
- /****************************************************************
- * Function: Flash_EnableReadProtection
- * Description: Enable the read protection of user flash area.
- * Input: NONE
- * Output: NONE
- * Return: NONE
- *****************************************************************/
- void Flash_EnableReadProtection(void)
- {
- FLASH_OBProgramInitTypeDef OBInit;
-
- __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
-
- HAL_FLASHEx_OBGetConfig(&OBInit);
- if(OBInit.RDPLevel == OB_RDP_LEVEL_0)
- {
- OBInit.OptionType = OPTIONBYTE_RDP;
- OBInit.RDPLevel = OB_RDP_LEVEL_1;
- HAL_FLASH_Unlock();
- HAL_FLASH_OB_Unlock();
- HAL_FLASHEx_OBProgram(&OBInit);
- HAL_FLASH_OB_Lock();
- HAL_FLASH_Lock();
- }
- __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
- }
- /****************************************************************
- * Function: Flash_DisableReadProtection
- * Description: Disable the read protection of user flash area.
- * Input: NONE
- * Output: NONE
- * Return: NONE
- *****************************************************************/
- void Flash_DisableReadProtection(void)
- {
- FLASH_OBProgramInitTypeDef OBInit;
-
- __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
-
- HAL_FLASHEx_OBGetConfig(&OBInit);
- if(OBInit.RDPLevel == OB_RDP_LEVEL_0)
- {
- OBInit.OptionType = OPTIONBYTE_RDP;
- OBInit.RDPLevel = OB_RDP_LEVEL_1;
- HAL_FLASH_Unlock();
- HAL_FLASH_OB_Unlock();
- HAL_FLASHEx_OBProgram(&OBInit);
- HAL_FLASH_OB_Lock();
- HAL_FLASH_Lock();
- }
- __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
- }
|