any012 发表于 2016-12-26 14:31:08

STM32F103,HAL库如何设置flash写保护?

本帖最后由 any012 于 2016-12-26 16:19 编辑

cube自带的例程里有个工程是关于flash写保护的。
但是看不懂啊。
节选了开头的一部分,想请大家帮分析下。
<div>int main(void)
{
...

/* Get pages write protection status ****************************************/
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);

#ifdef WRITE_PROTECTION_DISABLE
/* Check if desired pages are already write protected ***********************/
if((OptionsBytesStruct.WRPPage & FLASH_PAGE_TO_BE_PROTECTED) != FLASH_PAGE_TO_BE_PROTECTED)
{...}
#elif defined WRITE_PROTECTION_ENABLE
/* Check if desired pages are not yet write protected ***********************/
if(((~OptionsBytesStruct.WRPPage) & FLASH_PAGE_TO_BE_PROTECTED )!= FLASH_PAGE_TO_BE_PROTECTED)
{...}
#endif /* WRITE_PROTECTION_DISABLE */</div><div>}

</div>
#ifdef WRITE_PROTECTION_DISABLE
if((OptionsBytesStruct.WRPPage & FLASH_PAGE_TO_BE_PROTECTED) != FLASH_PAGE_TO_BE_PROTECTED)
{...}
#elif defined WRITE_PROTECTION_ENABLE
if(((~OptionsBytesStruct.WRPPage) & FLASH_PAGE_TO_BE_PROTECTED )!= FLASH_PAGE_TO_BE_PROTECTED)
{...}
#endif /* WRITE_PROTECTION_DISABLE */


这几个条件编译,第一句,是先判断是否定义了写保护功能,如果没有的话,执行第一个条件编译,如果设置了的话,执行第二个条件编译?
根据是否定义了WRITE_PROTECTION_DISABLE这个宏,先使能写保护,或者禁止写保护。
那么接下来这些:
if ((OptionsBytesStruct.WRPPage & FLASH_PAGE_TO_BE_PROTECTED) != 0x00)
{
    HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
    ...
    }

是先擦出有写保护的页,再写入?
那么为什么不是写入数据后,再使能写保护呢?







any012 发表于 2016-12-27 10:00:35

本帖最后由 any012 于 2016-12-27 10:03 编辑

在阿莫论坛搜到了相关办法:

    FLASH_OBProgramInitTypeDef OBInit;
    __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
    HAL_FLASHEx_OBGetConfig(&OBInit);
    if(OBInit.RDPLevel == RESET)
    {
      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();


这个是读保护的,写保护和这个类似。
在程序里加上这部分后,利用串口下载到单片机里,再次下载时,提示需要移除保护。
但,我如何知道是写保护起作用了还是读保护起作用了?

andypanfan 发表于 2016-12-27 09:04:03

:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol
页: [1]
查看完整版本: STM32F103,HAL库如何设置flash写保护?