74 #ifdef HAL_FLASH_MODULE_ENABLED 85 static HAL_StatusTypeDef
FLASH_OB_WRPConfig(uint32_t WRPArea, uint32_t WRPStartOffset, uint32_t WRDPEndOffset);
88 static HAL_StatusTypeDef
FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCROPStartAddr, uint32_t PCROPEndAddr);
89 static void FLASH_OB_GetWRP(uint32_t WRPArea, uint32_t * WRPStartOffset, uint32_t * WRDPEndOffset);
92 static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PCROPStartAddr, uint32_t * PCROPEndAddr);
129 HAL_StatusTypeDef status;
136 assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));
146 if(READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != 0U)
149 __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
151 if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
154 __HAL_FLASH_DATA_CACHE_DISABLE();
162 else if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
165 __HAL_FLASH_DATA_CACHE_DISABLE();
173 if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE)
181 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 182 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 183 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 185 CLEAR_BIT(FLASH->CR, (FLASH_CR_MER1 | FLASH_CR_MER2));
194 *PageError = 0xFFFFFFFFU;
196 for(page_index = pEraseInit->Page; page_index < (pEraseInit->Page + pEraseInit->NbPages); page_index++)
204 CLEAR_BIT(FLASH->CR, (FLASH_CR_PER | FLASH_CR_PNB));
209 *PageError = page_index;
234 HAL_StatusTypeDef status =
HAL_OK;
240 assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));
245 if(READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != 0U)
248 __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
250 if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
253 __HAL_FLASH_DATA_CACHE_DISABLE();
261 else if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
264 __HAL_FLASH_DATA_CACHE_DISABLE();
273 __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR);
277 if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE)
306 HAL_StatusTypeDef status =
HAL_OK;
317 if((pOBInit->
OptionType & OPTIONBYTE_WRP) != 0U)
328 if((pOBInit->
OptionType & OPTIONBYTE_RDP) != 0U)
338 if((pOBInit->
OptionType & OPTIONBYTE_USER) != 0U)
348 if((pOBInit->
OptionType & OPTIONBYTE_PCROP) != 0U)
377 pOBInit->
OptionType = (OPTIONBYTE_RDP | OPTIONBYTE_USER);
379 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 380 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 381 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 382 if((pOBInit->
WRPArea == OB_WRPAREA_BANK1_AREAA) || (pOBInit->
WRPArea == OB_WRPAREA_BANK1_AREAB) ||
383 (pOBInit->
WRPArea == OB_WRPAREA_BANK2_AREAA) || (pOBInit->
WRPArea == OB_WRPAREA_BANK2_AREAB))
385 if((pOBInit->
WRPArea == OB_WRPAREA_BANK1_AREAA) || (pOBInit->
WRPArea == OB_WRPAREA_BANK1_AREAB))
399 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 400 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 401 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 417 #if defined (FLASH_CFGR_LVEN) 448 HAL_StatusTypeDef status;
465 MODIFY_REG(FLASH->CFGR, FLASH_CFGR_LVEN, ConfigLVE);
468 if (READ_BIT(FLASH->CFGR, FLASH_CFGR_LVEN) != ConfigLVE)
511 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 512 if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) != 0U)
519 if((Banks & FLASH_BANK_1) != 0U)
521 SET_BIT(FLASH->CR, FLASH_CR_MER1);
524 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 525 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 526 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 528 if((Banks & FLASH_BANK_2) != 0U)
530 SET_BIT(FLASH->CR, FLASH_CR_MER2);
534 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 537 SET_BIT(FLASH->CR, (FLASH_CR_MER1 | FLASH_CR_MER2));
542 SET_BIT(FLASH->CR, FLASH_CR_STRT);
560 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 561 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 562 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 563 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 564 if(READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == 0U)
573 if((Banks & FLASH_BANK_1) != 0U)
579 SET_BIT(FLASH->CR, FLASH_CR_BKER);
588 MODIFY_REG(FLASH->CR, FLASH_CR_PNB, ((Page & 0xFFU) << FLASH_CR_PNB_Pos));
589 SET_BIT(FLASH->CR, FLASH_CR_PER);
590 SET_BIT(FLASH->CR, FLASH_CR_STRT);
606 __HAL_FLASH_INSTRUCTION_CACHE_RESET();
608 __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
616 __HAL_FLASH_DATA_CACHE_RESET();
618 __HAL_FLASH_DATA_CACHE_ENABLE();
652 static HAL_StatusTypeDef
FLASH_OB_WRPConfig(uint32_t WRPArea, uint32_t WRPStartOffset, uint32_t WRDPEndOffset)
654 HAL_StatusTypeDef status;
667 if(WRPArea == OB_WRPAREA_BANK1_AREAA)
669 MODIFY_REG(FLASH->WRP1AR, (FLASH_WRP1AR_WRP1A_STRT | FLASH_WRP1AR_WRP1A_END),
670 (WRPStartOffset | (WRDPEndOffset << 16)));
672 else if(WRPArea == OB_WRPAREA_BANK1_AREAB)
674 MODIFY_REG(FLASH->WRP1BR, (FLASH_WRP1BR_WRP1B_STRT | FLASH_WRP1BR_WRP1B_END),
675 (WRPStartOffset | (WRDPEndOffset << 16)));
677 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 678 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 679 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 680 else if(WRPArea == OB_WRPAREA_BANK2_AREAA)
682 MODIFY_REG(FLASH->WRP2AR, (FLASH_WRP2AR_WRP2A_STRT | FLASH_WRP2AR_WRP2A_END),
683 (WRPStartOffset | (WRDPEndOffset << 16)));
685 else if(WRPArea == OB_WRPAREA_BANK2_AREAB)
687 MODIFY_REG(FLASH->WRP2BR, (FLASH_WRP2BR_WRP2B_STRT | FLASH_WRP2BR_WRP2B_END),
688 (WRPStartOffset | (WRDPEndOffset << 16)));
697 SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
729 HAL_StatusTypeDef status;
740 MODIFY_REG(FLASH->OPTR, FLASH_OPTR_RDP, RDPLevel);
743 SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
773 uint32_t optr_reg_val = 0;
774 uint32_t optr_reg_mask = 0;
775 HAL_StatusTypeDef status;
785 if((UserType & OB_USER_BOR_LEV) != 0U)
788 assert_param(IS_OB_USER_BOR_LEVEL(UserConfig & FLASH_OPTR_BOR_LEV));
791 optr_reg_val |= (UserConfig & FLASH_OPTR_BOR_LEV);
792 optr_reg_mask |= FLASH_OPTR_BOR_LEV;
795 if((UserType & OB_USER_nRST_STOP) != 0U)
798 assert_param(IS_OB_USER_STOP(UserConfig & FLASH_OPTR_nRST_STOP));
801 optr_reg_val |= (UserConfig & FLASH_OPTR_nRST_STOP);
802 optr_reg_mask |= FLASH_OPTR_nRST_STOP;
805 if((UserType & OB_USER_nRST_STDBY) != 0U)
808 assert_param(IS_OB_USER_STANDBY(UserConfig & FLASH_OPTR_nRST_STDBY));
811 optr_reg_val |= (UserConfig & FLASH_OPTR_nRST_STDBY);
812 optr_reg_mask |= FLASH_OPTR_nRST_STDBY;
815 if((UserType & OB_USER_nRST_SHDW) != 0U)
818 assert_param(IS_OB_USER_SHUTDOWN(UserConfig & FLASH_OPTR_nRST_SHDW));
821 optr_reg_val |= (UserConfig & FLASH_OPTR_nRST_SHDW);
822 optr_reg_mask |= FLASH_OPTR_nRST_SHDW;
825 if((UserType & OB_USER_IWDG_SW) != 0U)
828 assert_param(IS_OB_USER_IWDG(UserConfig & FLASH_OPTR_IWDG_SW));
831 optr_reg_val |= (UserConfig & FLASH_OPTR_IWDG_SW);
832 optr_reg_mask |= FLASH_OPTR_IWDG_SW;
835 if((UserType & OB_USER_IWDG_STOP) != 0U)
838 assert_param(IS_OB_USER_IWDG_STOP(UserConfig & FLASH_OPTR_IWDG_STOP));
841 optr_reg_val |= (UserConfig & FLASH_OPTR_IWDG_STOP);
842 optr_reg_mask |= FLASH_OPTR_IWDG_STOP;
845 if((UserType & OB_USER_IWDG_STDBY) != 0U)
848 assert_param(IS_OB_USER_IWDG_STDBY(UserConfig & FLASH_OPTR_IWDG_STDBY));
851 optr_reg_val |= (UserConfig & FLASH_OPTR_IWDG_STDBY);
852 optr_reg_mask |= FLASH_OPTR_IWDG_STDBY;
855 if((UserType & OB_USER_WWDG_SW) != 0U)
858 assert_param(IS_OB_USER_WWDG(UserConfig & FLASH_OPTR_WWDG_SW));
861 optr_reg_val |= (UserConfig & FLASH_OPTR_WWDG_SW);
862 optr_reg_mask |= FLASH_OPTR_WWDG_SW;
865 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 866 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 867 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 868 if((UserType & OB_USER_BFB2) != 0U)
871 assert_param(IS_OB_USER_BFB2(UserConfig & FLASH_OPTR_BFB2));
874 optr_reg_val |= (UserConfig & FLASH_OPTR_BFB2);
875 optr_reg_mask |= FLASH_OPTR_BFB2;
878 if((UserType & OB_USER_DUALBANK) != 0U)
880 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 882 assert_param(IS_OB_USER_DUALBANK(UserConfig & FLASH_OPTR_DB1M));
885 optr_reg_val |= (UserConfig & FLASH_OPTR_DB1M);
886 optr_reg_mask |= FLASH_OPTR_DB1M;
889 assert_param(IS_OB_USER_DUALBANK(UserConfig & FLASH_OPTR_DUALBANK));
892 optr_reg_val |= (UserConfig & FLASH_OPTR_DUALBANK);
893 optr_reg_mask |= FLASH_OPTR_DUALBANK;
898 if((UserType & OB_USER_nBOOT1) != 0U)
901 assert_param(IS_OB_USER_BOOT1(UserConfig & FLASH_OPTR_nBOOT1));
904 optr_reg_val |= (UserConfig & FLASH_OPTR_nBOOT1);
905 optr_reg_mask |= FLASH_OPTR_nBOOT1;
908 if((UserType & OB_USER_SRAM2_PE) != 0U)
911 assert_param(IS_OB_USER_SRAM2_PARITY(UserConfig & FLASH_OPTR_SRAM2_PE));
914 optr_reg_val |= (UserConfig & FLASH_OPTR_SRAM2_PE);
915 optr_reg_mask |= FLASH_OPTR_SRAM2_PE;
918 if((UserType & OB_USER_SRAM2_RST) != 0U)
921 assert_param(IS_OB_USER_SRAM2_RST(UserConfig & FLASH_OPTR_SRAM2_RST));
924 optr_reg_val |= (UserConfig & FLASH_OPTR_SRAM2_RST);
925 optr_reg_mask |= FLASH_OPTR_SRAM2_RST;
928 #if defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || \ 929 defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ 930 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 931 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 932 if((UserType & OB_USER_nSWBOOT0) != 0U)
935 assert_param(IS_OB_USER_SWBOOT0(UserConfig & FLASH_OPTR_nSWBOOT0));
938 optr_reg_val |= (UserConfig & FLASH_OPTR_nSWBOOT0);
939 optr_reg_mask |= FLASH_OPTR_nSWBOOT0;
942 if((UserType & OB_USER_nBOOT0) != 0U)
945 assert_param(IS_OB_USER_BOOT0(UserConfig & FLASH_OPTR_nBOOT0));
948 optr_reg_val |= (UserConfig & FLASH_OPTR_nBOOT0);
949 optr_reg_mask |= FLASH_OPTR_nBOOT0;
954 MODIFY_REG(FLASH->OPTR, optr_reg_mask, optr_reg_val);
957 SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
989 static HAL_StatusTypeDef
FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCROPStartAddr, uint32_t PCROPEndAddr)
991 HAL_StatusTypeDef status;
994 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 995 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 996 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1001 assert_param(IS_FLASH_BANK_EXCLUSIVE(PCROPConfig & FLASH_BANK_BOTH));
1002 assert_param(IS_OB_PCROP_RDP(PCROPConfig & FLASH_PCROP1ER_PCROP_RDP));
1003 assert_param(IS_FLASH_MAIN_MEM_ADDRESS(PCROPStartAddr));
1011 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1012 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1013 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1015 if (READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE) == 0U)
1017 bank1_addr = FLASH_BASE;
1018 bank2_addr = FLASH_BASE + FLASH_BANK_SIZE;
1022 bank1_addr = FLASH_BASE + FLASH_BANK_SIZE;
1023 bank2_addr = FLASH_BASE;
1026 bank1_addr = FLASH_BASE;
1029 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1030 if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == 0U)
1033 if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_1)
1035 reg_value = ((PCROPStartAddr - FLASH_BASE) >> 4);
1036 MODIFY_REG(FLASH->PCROP1SR, FLASH_PCROP1SR_PCROP1_STRT, reg_value);
1038 reg_value = ((PCROPEndAddr - FLASH_BASE) >> 4);
1039 MODIFY_REG(FLASH->PCROP1ER, FLASH_PCROP1ER_PCROP1_END, reg_value);
1041 else if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_2)
1043 reg_value = ((PCROPStartAddr - FLASH_BASE) >> 4);
1044 MODIFY_REG(FLASH->PCROP2SR, FLASH_PCROP2SR_PCROP2_STRT, reg_value);
1046 reg_value = ((PCROPEndAddr - FLASH_BASE) >> 4);
1047 MODIFY_REG(FLASH->PCROP2ER, FLASH_PCROP2ER_PCROP2_END, reg_value);
1058 if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_1)
1060 reg_value = ((PCROPStartAddr - bank1_addr) >> 3);
1061 MODIFY_REG(FLASH->PCROP1SR, FLASH_PCROP1SR_PCROP1_STRT, reg_value);
1063 reg_value = ((PCROPEndAddr - bank1_addr) >> 3);
1064 MODIFY_REG(FLASH->PCROP1ER, FLASH_PCROP1ER_PCROP1_END, reg_value);
1066 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1067 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1068 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1069 else if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_2)
1071 reg_value = ((PCROPStartAddr - bank2_addr) >> 3);
1072 MODIFY_REG(FLASH->PCROP2SR, FLASH_PCROP2SR_PCROP2_STRT, reg_value);
1074 reg_value = ((PCROPEndAddr - bank2_addr) >> 3);
1075 MODIFY_REG(FLASH->PCROP2ER, FLASH_PCROP2ER_PCROP2_END, reg_value);
1084 MODIFY_REG(FLASH->PCROP1ER, FLASH_PCROP1ER_PCROP_RDP, (PCROPConfig & FLASH_PCROP1ER_PCROP_RDP));
1087 SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
1117 static void FLASH_OB_GetWRP(uint32_t WRPArea, uint32_t * WRPStartOffset, uint32_t * WRDPEndOffset)
1120 if(WRPArea == OB_WRPAREA_BANK1_AREAA)
1122 *WRPStartOffset = READ_BIT(FLASH->WRP1AR, FLASH_WRP1AR_WRP1A_STRT);
1123 *WRDPEndOffset = (READ_BIT(FLASH->WRP1AR, FLASH_WRP1AR_WRP1A_END) >> 16);
1125 else if(WRPArea == OB_WRPAREA_BANK1_AREAB)
1127 *WRPStartOffset = READ_BIT(FLASH->WRP1BR, FLASH_WRP1BR_WRP1B_STRT);
1128 *WRDPEndOffset = (READ_BIT(FLASH->WRP1BR, FLASH_WRP1BR_WRP1B_END) >> 16);
1130 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1131 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1132 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1133 else if(WRPArea == OB_WRPAREA_BANK2_AREAA)
1135 *WRPStartOffset = READ_BIT(FLASH->WRP2AR, FLASH_WRP2AR_WRP2A_STRT);
1136 *WRDPEndOffset = (READ_BIT(FLASH->WRP2AR, FLASH_WRP2AR_WRP2A_END) >> 16);
1138 else if(WRPArea == OB_WRPAREA_BANK2_AREAB)
1140 *WRPStartOffset = READ_BIT(FLASH->WRP2BR, FLASH_WRP2BR_WRP2B_STRT);
1141 *WRDPEndOffset = (READ_BIT(FLASH->WRP2BR, FLASH_WRP2BR_WRP2B_END) >> 16);
1160 uint32_t rdp_level = READ_BIT(FLASH->OPTR, FLASH_OPTR_RDP);
1162 if ((rdp_level != OB_RDP_LEVEL_0) && (rdp_level != OB_RDP_LEVEL_2))
1164 return (OB_RDP_LEVEL_1);
1168 return (READ_BIT(FLASH->OPTR, FLASH_OPTR_RDP));
1186 uint32_t user_config = READ_REG(FLASH->OPTR);
1207 static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PCROPStartAddr, uint32_t * PCROPEndAddr)
1210 uint32_t bank1_addr;
1211 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1212 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1213 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1214 uint32_t bank2_addr;
1217 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1218 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1219 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1221 if (READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE) == 0U)
1223 bank1_addr = FLASH_BASE;
1224 bank2_addr = FLASH_BASE + FLASH_BANK_SIZE;
1228 bank1_addr = FLASH_BASE + FLASH_BANK_SIZE;
1229 bank2_addr = FLASH_BASE;
1232 bank1_addr = FLASH_BASE;
1235 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1236 if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == 0U)
1238 if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_1)
1240 reg_value = (READ_REG(FLASH->PCROP1SR) & FLASH_PCROP1SR_PCROP1_STRT);
1241 *PCROPStartAddr = (reg_value << 4) + FLASH_BASE;
1243 reg_value = (READ_REG(FLASH->PCROP1ER) & FLASH_PCROP1ER_PCROP1_END);
1244 *PCROPEndAddr = (reg_value << 4) + FLASH_BASE + 0xFU;
1246 else if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_2)
1248 reg_value = (READ_REG(FLASH->PCROP2SR) & FLASH_PCROP2SR_PCROP2_STRT);
1249 *PCROPStartAddr = (reg_value << 4) + FLASH_BASE;
1251 reg_value = (READ_REG(FLASH->PCROP2ER) & FLASH_PCROP2ER_PCROP2_END);
1252 *PCROPEndAddr = (reg_value << 4) + FLASH_BASE + 0xFU;;
1262 if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_1)
1264 reg_value = (READ_REG(FLASH->PCROP1SR) & FLASH_PCROP1SR_PCROP1_STRT);
1265 *PCROPStartAddr = (reg_value << 3) + bank1_addr;
1267 reg_value = (READ_REG(FLASH->PCROP1ER) & FLASH_PCROP1ER_PCROP1_END);
1268 *PCROPEndAddr = (reg_value << 3) + bank1_addr + 0x7U;
1270 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 1271 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1272 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 1273 else if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_2)
1275 reg_value = (READ_REG(FLASH->PCROP2SR) & FLASH_PCROP2SR_PCROP2_STRT);
1276 *PCROPStartAddr = (reg_value << 3) + bank2_addr;
1278 reg_value = (READ_REG(FLASH->PCROP2ER) & FLASH_PCROP2ER_PCROP2_END);
1279 *PCROPEndAddr = (reg_value << 3) + bank2_addr + 0x7U;
1288 *PCROPConfig |= (READ_REG(FLASH->PCROP1ER) & FLASH_PCROP1ER_PCROP_RDP);
HAL_StatusTypeDef HAL_FLASHEx_ConfigLVEPin(uint32_t ConfigLVE)
Configuration of the LVE pin of the Flash (managed by power controller or forced to low in order to u...
__IO FLASH_ProcedureTypeDef ProcedureOnGoing
static uint32_t FLASH_OB_GetRDP(void)
Return the FLASH Read Protection level.
__IO uint32_t NbPagesToErase
This file contains all the functions prototypes for the HAL module driver.
void FLASH_PageErase(uint32_t Page, uint32_t Banks)
Erase the specified FLASH memory page.
FLASH_CacheTypeDef
FLASH Cache structure definition.
static HAL_StatusTypeDef FLASH_OB_UserConfig(uint32_t UserType, uint32_t UserConfig)
Program the FLASH User Option Byte.
static void FLASH_OB_GetWRP(uint32_t WRPArea, uint32_t *WRPStartOffset, uint32_t *WRDPEndOffset)
Return the FLASH Write Protection Option Bytes value.
static HAL_StatusTypeDef FLASH_OB_WRPConfig(uint32_t WRPArea, uint32_t WRPStartOffset, uint32_t WRDPEndOffset)
Configure the write protection of the desired pages.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void FLASH_FlushCaches(void)
Flush the instruction and data caches.
void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit)
Get the Option bytes configuration.
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
Wait for a FLASH operation to complete.
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError)
Perform a mass erase or erase the specified FLASH memory pages.
FLASH_ProcessTypeDef pFlash
Variable used for Program/Erase sectors under interruption.
FLASH Option Bytes Program structure definition.
static uint32_t FLASH_OB_GetUser(void)
Return the FLASH User Option Byte value.
static HAL_StatusTypeDef FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCROPStartAddr, uint32_t PCROPEndAddr)
Configure the Proprietary code readout protection of the desired addresses.
uint32_t HAL_PWREx_GetVoltageRange(void)
Return Voltage Scaling Range.
static HAL_StatusTypeDef FLASH_OB_RDPConfig(uint32_t RDPLevel)
Set the read protection level.
__IO FLASH_CacheTypeDef CacheToReactivate
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit)
Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled.
static void FLASH_OB_GetPCROP(uint32_t *PCROPConfig, uint32_t *PCROPStartAddr, uint32_t *PCROPEndAddr)
Return the FLASH Write Protection Option Bytes value.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
static void FLASH_MassErase(uint32_t Banks)
Mass erase of FLASH memory.
HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit)
Program Option bytes.