/** ****************************************************************************** * @file py32f0xx_ll_flash.h * @author MCU Application Team * @brief Header file of FLASH LL module. ****************************************************************************** * @attention * *

© Copyright (c) 2023 Puya Semiconductor Co. * All rights reserved.

* * This software component is licensed by Puya under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** * @attention * *

© Copyright (c) 2016 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef PY32F0XX_LL_FLASH_H #define PY32F0XX_LL_FLASH_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "py32f0xx.h" /** @addtogroup PY32F0xx_LL_Driver * @{ */ #if defined (FLASH) /** @defgroup FLASH_LL FLASH * @{ */ /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Constants FLASH Exported Constants * @{ */ /** @defgroup FLASH_LL_EC_BOR_LEVEL BOR Level * @{ */ #define LL_FLASH_BOR_LEV0 (0x00000000) /*!< BOR Reset threshold levels for 1.7V - 1.8V VDD power supply */ #define LL_FLASH_BOR_LEV1 ( FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 1.9V - 2.0V VDD power supply */ #define LL_FLASH_BOR_LEV2 ( FLASH_OPTR_BOR_LEV_1 ) /*!< BOR Reset threshold levels for 2.1V - 2.2V VDD power supply */ #define LL_FLASH_BOR_LEV3 ( FLASH_OPTR_BOR_LEV_1 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 2.3V - 2.4V VDD power supply */ #define LL_FLASH_BOR_LEV4 (FLASH_OPTR_BOR_LEV_2 ) /*!< BOR Reset threshold levels for 2.5V - 2.6V VDD power supply */ #define LL_FLASH_BOR_LEV5 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 2.7V - 2.8V VDD power supply */ #define LL_FLASH_BOR_LEV6 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_1 ) /*!< BOR Reset threshold levels for 2.9V - 3.0V VDD power supply */ #define LL_FLASH_BOR_LEV7 (FLASH_OPTR_BOR_LEV_2 | FLASH_OPTR_BOR_LEV_1 | FLASH_OPTR_BOR_LEV_0) /*!< BOR Reset threshold levels for 3.1V - 3.2V VDD power supply */ /** * @} */ /** @defgroup FLASH_LL_EC_BOR_ENABLE BOR Enable * @{ */ #define LL_FLASH_BOR_DISABLE (0x00000000U) /*!< BOR Reset Disable */ #define LL_FLASH_BOR_ENABLE (FLASH_OPTR_BOR_EN) /*!< BOR Reset Enable */ /** * @} */ /** @defgroup FLASH_LL_EC_nBOOT1 nBOOT1 Set * @{ */ #define LL_FLASH_NBOOT1_CLR (0x00000000U) #define LL_FLASH_NBOOT1_SET (FLASH_OPTR_nBOOT1) /** * @} */ /** @defgroup FLASH_LL_EC_NRST Nrst Mode * @{ */ #define LL_FLASH_NRST_MODE_RESET (0x00000000U) /*!< PF2:NRST */ #define LL_FLASH_NRST_MODE_GPIO (FLASH_OPTR_NRST_MODE) /*!< PF2:GPIO */ /** * @} */ #ifdef FLASH_OPTR_WWDG_SW /** @defgroup FLASH_LL_EC_WWDGMODE WWDG Mode * @{ */ #define LL_FLASH_WWDG_MODE_HW (0x00000000U) /*!< Hardware WWDG selected */ #define LL_FLASH_WWDG_MODE_SW (FLASH_OPTR_WWDG_SW) /*!< Software WWDG selected */ /** * @} */ #endif /** @defgroup FLASH_LL_EC_IWDGMODE IWDG Mode * @{ */ #define LL_FLASH_IWDG_MODE_HW (0x00000000U) /*!< Hardware IWDG selected */ #define LL_FLASH_IWDG_MODE_SW (FLASH_OPTR_IWDG_SW) /*!< Software IWDG selected */ /** * @} */ /** @defgroup FLASH_LL_EC_RDP RDP Mode * @{ */ #define LL_FLASH_RDP_LEVEL_0 ((uint8_t)0xAAU) #define LL_FLASH_RDP_LEVEL_1 ((uint8_t)0x55U) /** * @} */ /** @defgroup FLASH_LL_EC_WRP Write Protection * @{ */ #define LL_FLASH_WRP_DISABLE ((uint32_t)0x00000000) /* Write protection disable */ #define LL_FLASH_WRP_SECTOR_0 ((uint32_t)FLASH_WRPR_WRP_0) /* Write protection of Sector0 */ #define LL_FLASH_WRP_SECTOR_1 ((uint32_t)FLASH_WRPR_WRP_1) /* Write protection of Sector1 */ #define LL_FLASH_WRP_SECTOR_2 ((uint32_t)FLASH_WRPR_WRP_2) /* Write protection of Sector2 */ #define LL_FLASH_WRP_SECTOR_3 ((uint32_t)FLASH_WRPR_WRP_3) /* Write protection of Sector3 */ #define LL_FLASH_WRP_SECTOR_4 ((uint32_t)FLASH_WRPR_WRP_4) /* Write protection of Sector4 */ #if !defined (PY32F002APRE) #define LL_FLASH_WRP_SECTOR_5 ((uint32_t)FLASH_WRPR_WRP_5) /* Write protection of Sector5 */ #define LL_FLASH_WRP_SECTOR_6 ((uint32_t)FLASH_WRPR_WRP_6) /* Write protection of Sector6 */ #define LL_FLASH_WRP_SECTOR_7 ((uint32_t)FLASH_WRPR_WRP_7) /* Write protection of Sector7 */ #define LL_FLASH_WRP_SECTOR_8 ((uint32_t)FLASH_WRPR_WRP_8) /* Write protection of Sector8 */ #define LL_FLASH_WRP_SECTOR_9 ((uint32_t)FLASH_WRPR_WRP_9) /* Write protection of Sector9 */ #define LL_FLASH_WRP_SECTOR_10 ((uint32_t)FLASH_WRPR_WRP_10) /* Write protection of Sector10 */ #define LL_FLASH_WRP_SECTOR_11 ((uint32_t)FLASH_WRPR_WRP_11) /* Write protection of Sector11 */ #define LL_FLASH_WRP_SECTOR_12 ((uint32_t)FLASH_WRPR_WRP_12) /* Write protection of Sector12 */ #define LL_FLASH_WRP_SECTOR_13 ((uint32_t)FLASH_WRPR_WRP_13) /* Write protection of Sector13 */ #define LL_FLASH_WRP_SECTOR_14 ((uint32_t)FLASH_WRPR_WRP_14) /* Write protection of Sector14 */ #define LL_FLASH_WRP_SECTOR_15 ((uint32_t)FLASH_WRPR_WRP_15) /* Write protection of Sector15 */ #endif #define LL_FLASH_WRP_Pages0to31 ((uint32_t)FLASH_WRPR_WRP_0) /* Write protection from page0 to page31 */ #define LL_FLASH_WRP_Pages32to63 ((uint32_t)FLASH_WRPR_WRP_1) /* Write protection from page32 to page63 */ #define LL_FLASH_WRP_Pages64to95 ((uint32_t)FLASH_WRPR_WRP_2) /* Write protection from page64 to page95 */ #define LL_FLASH_WRP_Pages96to127 ((uint32_t)FLASH_WRPR_WRP_3) /* Write protection from page96 to page127 */ #define LL_FLASH_WRP_Pages128to159 ((uint32_t)FLASH_WRPR_WRP_4) /* Write protection from page128 to page159 */ #if !defined (PY32F002APRE) #define LL_FLASH_WRP_Pages160to191 ((uint32_t)FLASH_WRPR_WRP_5) /* Write protection from page160 to page191 */ #define LL_FLASH_WRP_Pages192to223 ((uint32_t)FLASH_WRPR_WRP_6) /* Write protection from page192 to page223 */ #define LL_FLASH_WRP_Pages224to255 ((uint32_t)FLASH_WRPR_WRP_7) /* Write protection from page224 to page255 */ #define LL_FLASH_WRP_Pages256to287 ((uint32_t)FLASH_WRPR_WRP_8) /* Write protection from page256 to page287 */ #define LL_FLASH_WRP_Pages288to319 ((uint32_t)FLASH_WRPR_WRP_9) /* Write protection from page288 to page319 */ #define LL_FLASH_WRP_Pages320to351 ((uint32_t)FLASH_WRPR_WRP_10) /* Write protection from page320 to page351 */ #define LL_FLASH_WRP_Pages352to383 ((uint32_t)FLASH_WRPR_WRP_11) /* Write protection from page352 to page383 */ #define LL_FLASH_WRP_Pages384to415 ((uint32_t)FLASH_WRPR_WRP_12) /* Write protection from page384 to page415 */ #define LL_FLASH_WRP_Pages416to447 ((uint32_t)FLASH_WRPR_WRP_13) /* Write protection from page416 to page447 */ #define LL_FLASH_WRP_Pages448to479 ((uint32_t)FLASH_WRPR_WRP_14) /* Write protection from page448 to page479 */ #define LL_FLASH_WRP_Pages480to511 ((uint32_t)FLASH_WRPR_WRP_15) /* Write protection from page480 to page511 */ #endif #if !defined (PY32F002APRE) #define LL_FLASH_WRP_AllPages ((uint32_t)0x000000FFU) /*!< Write protection of all Sectors */ #else #define LL_FLASH_WRP_AllPages ((uint32_t)0x0000001FU) /*!< Write protection of all Sectors */ #endif /** * @} */ /** @defgroup FLASH_LL_EC_SDK SDK Address * @{ */ #define LL_FLASH_SDKSTARTADDRESS_0X08000000 (0x00000000) #define LL_FLASH_SDKSTARTADDRESS_0X08000800 ( FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08001000 ( FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X08001800 ( FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08002000 ( FLASH_SDKR_SDK_STRT_2 ) #define LL_FLASH_SDKSTARTADDRESS_0X08002800 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08003000 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X08003800 ( FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08004000 ( FLASH_SDKR_SDK_STRT_3 ) #define LL_FLASH_SDKSTARTADDRESS_0X08004800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08005000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X08005800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08006000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | ) #define LL_FLASH_SDKSTARTADDRESS_0X08006800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08007000 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X08007800 ( FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08008000 (FLASH_SDKR_SDK_STRT_4 ) #define LL_FLASH_SDKSTARTADDRESS_0X08008800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X08009000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X08009800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800A000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800A800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800B000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800B800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800C000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800C800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800D000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800D800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800E000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800E800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKSTARTADDRESS_0X0800F000 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 ) #define LL_FLASH_SDKSTARTADDRESS_0X0800F800 (FLASH_SDKR_SDK_STRT_4 | FLASH_SDKR_SDK_STRT_3 | FLASH_SDKR_SDK_STRT_2 | FLASH_SDKR_SDK_STRT_1 | FLASH_SDKR_SDK_STRT_0) #define LL_FLASH_SDKENDADDRESS_0X080007FF (0x00000000) #define LL_FLASH_SDKENDADDRESS_0X08000FFF ( FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080017FF ( FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X08001FFF ( FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080027FF ( FLASH_SDKR_SDK_END_2 ) #define LL_FLASH_SDKENDADDRESS_0X08002FFF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080037FF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X08003FFF ( FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080047FF ( FLASH_SDKR_SDK_END_3 ) #define LL_FLASH_SDKENDADDRESS_0X08004FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080057FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X08005FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080067FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | ) #define LL_FLASH_SDKENDADDRESS_0X08006FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080077FF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X08007FFF ( FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080087FF (FLASH_SDKR_SDK_END_4 ) #define LL_FLASH_SDKENDADDRESS_0X08008FFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X080097FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X08009FFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800A7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 ) #define LL_FLASH_SDKENDADDRESS_0X0800AFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800B7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X0800BFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800C7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 ) #define LL_FLASH_SDKENDADDRESS_0X0800CFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800D7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X0800DFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800E7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 ) #define LL_FLASH_SDKENDADDRESS_0X0800EFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_0) #define LL_FLASH_SDKENDADDRESS_0X0800F7FF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 ) #define LL_FLASH_SDKENDADDRESS_0X0800FFFF (FLASH_SDKR_SDK_END_4 | FLASH_SDKR_SDK_END_3 | FLASH_SDKR_SDK_END_2 | FLASH_SDKR_SDK_END_1 | FLASH_SDKR_SDK_END_0) /** * @} */ /** @defgroup FLASH_LL_EC_KEY Key Value * @{ */ #define LL_FLASH_KEY1 (FLASH_KEY1) #define LL_FLASH_KEY2 (FLASH_KEY2) /** * @} */ /** @defgroup FLASH_LL_EC_OPTKEY Optkey Value * @{ */ #define LL_FLASH_OPTKEY1 (FLASH_OPTKEY1) #define LL_FLASH_OPTKEY2 (FLASH_OPTKEY2) /** * @} */ /** * @} */ #if !defined (PY32F002APRE) #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_4M() \ do { \ FLASH->TS0 = (*(uint32_t *)(0x1FFF0F1C))&0xFF; \ FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F1C))>>16)&0x1FF; \ FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F1C))>>8)&0xFF; \ FLASH->TS2P = (*(uint32_t *)(0x1FFF0F20))&0xFF; \ FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F20))>>16)&0x7FF; \ FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F24))&0x1FFFF; \ FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F28))&0x1FFFF; \ FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F2C))&0xFFFF; \ FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F2C))>>16)&0xFFF; \ } while(0U) #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_16M() \ do { \ FLASH->TS0 = (*(uint32_t *)(0x1FFF0F44))&0xFF; \ FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F44))>>16)&0x1FF; \ FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F44))>>8)&0xFF; \ FLASH->TS2P = (*(uint32_t *)(0x1FFF0F48))&0xFF; \ FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F48))>>16)&0x7FF; \ FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F4C))&0x1FFFF; \ FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F50))&0x1FFFF; \ FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F54))&0xFFFF; \ FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F54))>>16)&0xFFF; \ } while(0U) #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_22P12M() \ do { \ FLASH->TS0 = (*(uint32_t *)(0x1FFF0F58))&0xFF; \ FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F58))>>16)&0x1FF; \ FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F58))>>8)&0xFF; \ FLASH->TS2P = (*(uint32_t *)(0x1FFF0F5C))&0xFF; \ FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F5C))>>16)&0x7FF; \ FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F60))&0x1FFFF; \ FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F64))&0x1FFFF; \ FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F68))&0xFFFF; \ FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F68))>>16)&0xFFF; \ } while(0U) #endif #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_8M() \ do { \ FLASH->TS0 = (*(uint32_t *)(0x1FFF0F30))&0xFF; \ FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F30))>>16)&0x1FF; \ FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F30))>>8)&0xFF; \ FLASH->TS2P = (*(uint32_t *)(0x1FFF0F34))&0xFF; \ FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F34))>>16)&0x7FF; \ FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F38))&0x1FFFF; \ FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F3C))&0x1FFFF; \ FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F40))&0xFFFF; \ FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F40))>>16)&0xFFF; \ } while(0U) #define LL_FLASH_TIMMING_SEQUENCE_CONFIG_24M() \ do { \ FLASH->TS0 = (*(uint32_t *)(0x1FFF0F6C))&0xFF; \ FLASH->TS1 = ((*(uint32_t *)(0x1FFF0F6C))>>16)&0x1FF; \ FLASH->TS3 = ((*(uint32_t *)(0x1FFF0F6C))>>8)&0xFF; \ FLASH->TS2P = (*(uint32_t *)(0x1FFF0F70))&0xFF; \ FLASH->TPS3 = ((*(uint32_t *)(0x1FFF0F70))>>16)&0x7FF; \ FLASH->PERTPE = (*(uint32_t *)(0x1FFF0F74))&0x1FFFF; \ FLASH->SMERTPE = (*(uint32_t *)(0x1FFF0F78))&0x1FFFF; \ FLASH->PRGTPE = (*(uint32_t *)(0x1FFF0F7C))&0xFFFF; \ FLASH->PRETPE = ((*(uint32_t *)(0x1FFF0F7C))>>16)&0xFFF; \ } while(0U) /* Exported macro ------------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Macros FLASH Exported Macros * @{ */ /** @defgroup FLASH_LL_EM_WRITE_READ Common Write and read registers Macros * @{ */ /** * @brief Write a value in FLASH register * @param __INSTANCE__ FLASH Instance * @param __REG__ Register to be written * @param __VALUE__ Value to be written in the register * @retval None */ #define LL_FLASH_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) /** * @brief Read a value in FLASH register * @param __INSTANCE__ FLASH Instance * @param __REG__ Register to be read * @retval Register value */ #define LL_FLASH_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) /** * @} */ /** * @} */ /* Exported functions --------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Functions FLASH Exported Functions * @{ */ /** @defgroup FLASH_LL_EF_FLAG_Management Flag Management * @{ */ /** * @brief Indicate the status of End of operation flag. * @rmtoll SR EOP LL_FLASH_IsActiveFlag_EOP * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_EOP(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->SR, FLASH_SR_EOP) == (FLASH_SR_EOP)); } /** * @brief Indicate the status of WRPERR flag. * @rmtoll SR WPRERR LL_FLASH_IsActiveFlag_WRPERR * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_WRPERR(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->SR, FLASH_SR_WRPERR) == (FLASH_SR_WRPERR)); } /** * @brief Indicate the status of OPTVERR flag. * @rmtoll SR OPTVERR LL_FLASH_IsActiveFlag_OPTVERR * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_OPTVERR(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->SR, FLASH_SR_OPTVERR) == (FLASH_SR_OPTVERR)); } /** * @brief Indicate the status of BUSY flag. * @rmtoll SR BSY LL_FLASH_IsActiveFlag_BUSY * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsActiveFlag_BUSY(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->SR, FLASH_SR_BSY) == (FLASH_SR_BSY)); } /** * @brief Clear End of operation flag. * @rmtoll SR EOP LL_FLASH_ClearFlag_EOP * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_ClearFlag_EOP(FLASH_TypeDef *FLASHx) { WRITE_REG(FLASHx->SR, FLASH_SR_EOP); } /** * @brief Clear WRPERR flag. * @rmtoll SR WRPERR LL_FLASH_ClearFlag_WRPERR * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_ClearFlag_WRPERR(FLASH_TypeDef *FLASHx) { WRITE_REG(FLASHx->SR, FLASH_SR_WRPERR); } /** * @brief Clear OPTVERR flag. * @rmtoll SR OPTVERR LL_FLASH_ClearFlag_OPTVERR * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_ClearFlag_OPTVERR(FLASH_TypeDef *FLASHx) { WRITE_REG(FLASHx->SR, FLASH_SR_OPTVERR); } /** * @} */ /** @defgroup FLASH_LL_EF_ERASE_Management Erase Management * @{ */ /** * @brief Enable Page Program * @rmtoll CR PG LL_FLASH_EnablePageProgram * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_EnablePageProgram(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_PG); } /** * @brief Enable Mass Erase * @rmtoll CR MER LL_FLASH_EnableMassErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_EnableMassErase(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_MER); } /** * @brief Enable Page Erase * @rmtoll CR PER LL_FLASH_EnablePageErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_EnablePageErase(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_PER); } /** * @brief Enable Sector Erase * @rmtoll CR SER LL_FLASH_EnableSectorErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_EnableSectorErase(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_SER); } /** * @brief Disable Page Program * @rmtoll CR PG LL_FLASH_DisablePageProgram * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_DisablePageProgram(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_PG); } /** * @brief Disable Mass Erase * @rmtoll CR MER LL_FLASH_DisableMassErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_DisableMassErase(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_MER); } /** * @brief Disable Page Erase * @rmtoll CR PER LL_FLASH_DisablePageErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_DisablePageErase(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_PER); } /** * @brief Disable Sector Erase * @rmtoll CR SER LL_FLASH_DisableSectorErase * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_DisableSectorErase(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_SER); } /** * @brief Check if Page Program is enabled * @rmtoll CR PG LL_FLASH_IsEnabledPageProgram * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageProgram(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_PG) == (FLASH_CR_PG)) ? 1UL : 0UL); } /** * @brief Check if Mass erase is enabled * @rmtoll CR MER LL_FLASH_IsEnabledMassErase * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledMassErase(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_MER) == (FLASH_CR_MER)) ? 1UL : 0UL); } /** * @brief Check if Page erase is enabled * @rmtoll CR PER LL_FLASH_IsEnabledPageErase * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageErase(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_PER) == (FLASH_CR_PER)) ? 1UL : 0UL); } /** * @brief Check if Sector Erase is enabled * @rmtoll CR SER LL_FLASH_IsEnabledSectorErase * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledSectorErase(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_SER) == (FLASH_CR_SER)) ? 1UL : 0UL); } /** * @brief Set the Erase Address * @rmtoll LL_FLASH_SetEraseAddress * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_SetEraseAddress(FLASH_TypeDef *FLASHx,uint32_t address) { *(__IO uint32_t *)(address) = 0xFFFFFFFF; } /** * @} */ /** @defgroup FLASH_LL_EF_Lock_Management Lock Management * @{ */ /** * @brief Unlock the Flash * @rmtoll KEYR KEYR LL_FLASH_Unlock * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_Unlock(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->KEYR, LL_FLASH_KEY1); SET_BIT(FLASHx->KEYR, LL_FLASH_KEY2); } /** * @brief Unlock the Option * @rmtoll OPTKEYR OPTKEYR LL_FLASH_OBUnlock * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_OBUnlock(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->OPTKEYR, LL_FLASH_OPTKEY1); SET_BIT(FLASHx->OPTKEYR, LL_FLASH_OPTKEY2); } /** * @brief Lock the Flash * @rmtoll CR LOCK LL_FLASH_Lock * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_Lock(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_LOCK); } /** * @brief Lock the Option * @rmtoll CR OPTLOCK LL_FLASH_OBLock * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_OBLock(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_OPTLOCK); } /** * @brief Check if Flash is locked * @rmtoll CR LOCK LL_FLASH_IsLocked * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsLocked(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_LOCK) == (FLASH_CR_LOCK)) ? 1UL : 0UL); } /** * @brief Check if Option is locked * @rmtoll CR OPTLOCK LL_FLASH_IsOBLocked * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsOBLocked(FLASH_TypeDef *FLASHx) { return ((READ_BIT(FLASHx->CR, FLASH_CR_OPTLOCK) == (FLASH_CR_OPTLOCK)) ? 1UL : 0UL); } /** * @} */ /** @defgroup FLASH_LL_EF_LAUNCH_Management Launch Management * @{ */ /** * @brief Force the Option byte loading * @rmtoll CR OBL_LAUNCH LL_FLASH_Launch * @param FLASHx FLASH Instance * @retval None */ __STATIC_INLINE void LL_FLASH_Launch(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_OBL_LAUNCH); } /** * @} */ /** @defgroup FLASH_LL_EF_IT_Management Interrupt Management * @{ */ /** * @brief Enable Error interrupts. * @rmtoll CR ERRIR LL_FLASH_EnableIT_ERR * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_EnableIT_ERR(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_ERRIE); } /** * @brief Enable End of operation interrupts. * @rmtoll CR EOPIE LL_FLASH_EnableIT_EOP * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_EnableIT_EOP(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_EOPIE); } /** * @brief Disable Error interrupts. * @rmtoll CR ERRIE LL_FLASH_DisableIT_ERR * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_DisableIT_ERR(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_ERRIE); } /** * @brief Disable End of operation interrupts. * @rmtoll CR EOPIE LL_FLASH_DisableIT_EOP * @param FLASHx FLASH Instance. * @retval None */ __STATIC_INLINE void LL_FLASH_DisableIT_EOP(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_EOPIE); } /** * @brief Check if Error interrupts are enabled or disabled. * @rmtoll CR ERRIE LL_FLASH_IsEnabledIT_ERR * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledIT_ERR(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASH->CR, FLASH_CR_ERRIE) == (FLASH_CR_ERRIE)); } /** * @brief Check if End of operation interrupts are enabled or disabled. * @rmtoll CR EOPIE LL_FLASH_IsEnabledIT_EOP * @param FLASHx FLASH Instance. * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledIT_EOP(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASH->CR, FLASH_CR_EOPIE) == (FLASH_CR_EOPIE)); } /** * @} */ /** @defgroup FLASH_LL_EF_PROGRAM_Management Program Management * @{ */ /** * @brief Enable Page Program Start * @rmtoll CR PGSTRT LL_FLASH_EnablePageProgramStart * @param FLASHx FLASH Instance * @retval None. */ __STATIC_INLINE void LL_FLASH_EnablePageProgramStart(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_PGSTRT); } /** * @brief Enable Option Program Start * @rmtoll CR OPTSTRT LL_FLASH_EnableOptionProgramStart * @param FLASHx FLASH Instance * @retval None. */ __STATIC_INLINE void LL_FLASH_EnableOptionProgramStart(FLASH_TypeDef *FLASHx) { SET_BIT(FLASHx->CR, FLASH_CR_OPTSTRT); } /** * @brief Disable Page Program start * @rmtoll CR PGSTRT LL_FLASH_DisablePageProgramStart * @param FLASHx FLASH Instance * @retval None. */ __STATIC_INLINE void LL_FLASH_DisablePageProgramStart(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_PGSTRT); } /** * @brief Disable Option Program start * @rmtoll CR OPTSTRT LL_FLASH_DisableOptionProgramStart * @param FLASHx FLASH Instance * @retval None. */ __STATIC_INLINE void LL_FLASH_DisableOptionProgramStart(FLASH_TypeDef *FLASHx) { CLEAR_BIT(FLASHx->CR, FLASH_CR_OPTSTRT); } /** * @brief Check if Page Program Start is enabled * @rmtoll CR PGSTRT LL_FLASH_IsEnabledPageProgramStart * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledPageProgramStart(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->CR, FLASH_CR_PGSTRT) == (FLASH_CR_PGSTRT)); } /** * @brief Check if Option program Start is enabled * @rmtoll CR OPTSTRT LL_FLASH_IsEnabledOptionProgramStart * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledOptionProgramStart(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->CR, FLASH_CR_OPTSTRT) == (FLASH_CR_OPTSTRT)); } /** * @brief Trigger the Option Program * @param FLASHx FLASH Instance * @retval None. */ __STATIC_INLINE void LL_FLASH_TriggerOptionProgramStart(FLASH_TypeDef *FLASHx) { *((__IO uint32_t *)(0x40022080))=0xff; } /** * @brief Program the page * @rmtoll CR PGSTRT LL_FLASH_PageProgram * @param FLASHx FLASH Instance * @param Address Program Address * @param DataAddress Data Address * @retval None */ __STATIC_INLINE void LL_FLASH_PageProgram(FLASH_TypeDef *FLASHx,uint32_t Address, uint32_t * DataAddress) { uint8_t index=0; uint32_t dest = Address; uint32_t * src = DataAddress; uint32_t primask_bit; /* Enter critical section */ primask_bit = __get_PRIMASK(); __disable_irq(); /* 32 words*/ while(index<32U) { *(uint32_t *)dest = *src; src += 1U; dest += 4U; index++; if(index==31) { LL_FLASH_EnablePageProgramStart(FLASHx); } } /* Exit critical section: restore previous priority mask */ __set_PRIMASK(primask_bit); } /** * @} */ /** @defgroup FLASH_LL_EF_BOR_Management Bor Management * @{ */ /** * @brief Check if BOR is enabled * @rmtoll OPTR BOR_EN LL_FLASH_IsEnabledBOR * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_IsEnabledBOR(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_BOR_EN) == (FLASH_OPTR_BOR_EN)); } /** * @brief Get the BOR Level * @rmtoll OPTR BOR_LEV LL_FLASH_GetBORLevel * @param FLASHx FLASH Instance * @retval Returned value can be one of the following values: * @arg @ref LL_FLASH_BOR_LEV0 * @arg @ref LL_FLASH_BOR_LEV1 * @arg @ref LL_FLASH_BOR_LEV2 * @arg @ref LL_FLASH_BOR_LEV3 * @arg @ref LL_FLASH_BOR_LEV4 * @arg @ref LL_FLASH_BOR_LEV5 * @arg @ref LL_FLASH_BOR_LEV6 * @arg @ref LL_FLASH_BOR_LEV7 */ __STATIC_INLINE uint32_t LL_FLASH_GetBORLevel(FLASH_TypeDef *FLASHx) { return READ_BIT(FLASHx->OPTR, FLASH_OPTR_BOR_LEV); } /** * @brief Get nBOOT1 Mode * @rmtoll OPTR nBOOT1 LL_FLASH_GetnBOOT1Mode * @param FLASHx FLASH Instance * @retval Returned value can be one of the following values: * @arg @ref LL_FLASH_NBOOT1_CLR * @arg @ref LL_FLASH_NBOOT1_SET */ __STATIC_INLINE uint32_t LL_FLASH_GetnBOOT1Mode(FLASH_TypeDef *FLASHx) { return READ_BIT(FLASHx->OPTR, FLASH_OPTR_nBOOT1); } /** * @brief Get NRST Mode * @rmtoll OPTR NRST_MODE LL_FLASH_GetNrstMode * @param FLASHx FLASH Instance * @retval Returned value can be one of the following values: * @arg @ref LL_FLASH_NRST_MODE_RESET * @arg @ref LL_FLASH_NRST_MODE_GPIO */ __STATIC_INLINE uint32_t LL_FLASH_GetNrstMode(FLASH_TypeDef *FLASHx) { return READ_BIT(FLASHx->OPTR, FLASH_OPTR_NRST_MODE); } #ifdef FLASH_OPTR_WWDG_SW /** * @brief Get WWDG SW Mode * @rmtoll OPTR WWDG_SW LL_FLASH_GetWWDGSWMode * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_GetWWDGSWMode(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_WWDG_SW) == (FLASH_OPTR_WWDG_SW)); } #endif /** * @brief Get IWDG SW Mode * @rmtoll OPTR IWDG_SW LL_FLASH_GetIWDGSWMode * @param FLASHx FLASH Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_FLASH_GetIWDGSWMode(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_IWDG_SW) != (FLASH_OPTR_IWDG_SW)); } /** * @} */ /** @defgroup FLASH_LL_EF_SDK_Management SDK Management * @{ */ /** * @brief Set SDK Address * @rmtoll SDKR SDK_STRT LL_FLASH_SetSDKAddress * @rmtoll SDKR SDK_END LL_FLASH_SetSDKAddress * @param FLASHx FLASH Instance * @param SDKStartAddress This parameter can be one of the following values: * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F800 * @param SDKEndAddress This parameter can be one of the following values: * @arg @ref LL_FLASH_SDKENDADDRESS_0X080007FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08000FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080017FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08001FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080027FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08002FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080037FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08003FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080047FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08004FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080057FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08005FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080067FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08006FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080077FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08007FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080087FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08008FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080097FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08009FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800A7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800AFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800B7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800BFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800C7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800CFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800D7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800DFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800E7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800EFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800F7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800FFFF * @retval None. */ __STATIC_INLINE void LL_FLASH_SetSDKAddress(FLASH_TypeDef *FLASHx,uint32_t SDKStartAddress,uint32_t SDKEndAddress) { MODIFY_REG(FLASHx->SDKR, FLASH_SDKR_SDK_STRT | FLASH_SDKR_SDK_END , SDKStartAddress | SDKEndAddress); } /** * @brief Get SDK Start Address * @rmtoll SDKR SDK_STRT LL_FLASH_GetSDKStartAddress * @param FLASHx FLASH Instance * @retval Returned value can be a one of the following values: * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08000800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08001800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08002800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08003800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08004800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08005800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08006800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08007800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08008800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X08009800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800A800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800B800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800C800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800D800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800E800 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F000 * @arg @ref LL_FLASH_SDKSTARTADDRESS_0X0800F800 * @retval None */ __STATIC_INLINE uint32_t LL_FLASH_GetSDKStartAddress(FLASH_TypeDef *FLASHx) { return READ_BIT(FLASHx->SDKR, FLASH_SDKR_SDK_STRT); } /** * @brief Get SDK End Address * @rmtoll SDKR SDK_END LL_FLASH_GetSDKEndAddress * @param FLASHx FLASH Instance * @retval Returned value can be a one of the following values: * @arg @ref LL_FLASH_SDKENDADDRESS_0X080007FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08000FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080017FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08001FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080027FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08002FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080037FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08003FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080047FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08004FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080057FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08005FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080067FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08006FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080077FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08007FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080087FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08008FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X080097FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X08009FFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800A7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800AFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800B7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800BFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800C7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800CFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800D7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800DFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800E7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800EFFF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800F7FF * @arg @ref LL_FLASH_SDKENDADDRESS_0X0800FFFF * @retval None */ __STATIC_INLINE uint32_t LL_FLASH_GetSDKEndAddress(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->SDKR, FLASH_SDKR_SDK_END)); } /** * @} */ /** @defgroup FLASH_LL_EF_WRP_Management WRP Management * @{ */ /** * @brief Set WRP Address * @note Depending on devices and packages, some Sectors may not be available. * Refer to device datasheet for Sectors availability. * @rmtoll WRPR WRP LL_FLASH_SetWRPRAddress * @param FLASHx FLASH Instance * @param Address This parameter can be a combination of the following values: * @arg @ref LL_FLASH_WRP_DISABLE * @arg @ref LL_FLASH_WRP_SECTOR_0 * @arg @ref LL_FLASH_WRP_SECTOR_1 * @arg @ref LL_FLASH_WRP_SECTOR_2 * @arg @ref LL_FLASH_WRP_SECTOR_3 * @arg @ref LL_FLASH_WRP_SECTOR_4 * @arg @ref LL_FLASH_WRP_SECTOR_5 * @arg @ref LL_FLASH_WRP_SECTOR_6 * @arg @ref LL_FLASH_WRP_SECTOR_7 * @arg @ref LL_FLASH_WRP_SECTOR_8 * @arg @ref LL_FLASH_WRP_SECTOR_9 * @arg @ref LL_FLASH_WRP_SECTOR_10 * @arg @ref LL_FLASH_WRP_SECTOR_11 * @arg @ref LL_FLASH_WRP_SECTOR_12 * @arg @ref LL_FLASH_WRP_SECTOR_13 * @arg @ref LL_FLASH_WRP_SECTOR_14 * @arg @ref LL_FLASH_WRP_SECTOR_15 * @arg @ref LL_FLASH_WRP_Pages0to31 * @arg @ref LL_FLASH_WRP_Pages32to63 * @arg @ref LL_FLASH_WRP_Pages64to95 * @arg @ref LL_FLASH_WRP_Pages96to127 * @arg @ref LL_FLASH_WRP_Pages128to159 * @arg @ref LL_FLASH_WRP_Pages160to191 * @arg @ref LL_FLASH_WRP_Pages192to223 * @arg @ref LL_FLASH_WRP_Pages224to255 * @arg @ref LL_FLASH_WRP_Pages256to287 * @arg @ref LL_FLASH_WRP_Pages288to319 * @arg @ref LL_FLASH_WRP_Pages320to351 * @arg @ref LL_FLASH_WRP_Pages352to383 * @arg @ref LL_FLASH_WRP_Pages384to415 * @arg @ref LL_FLASH_WRP_Pages416to447 * @arg @ref LL_FLASH_WRP_Pages448to479 * @arg @ref LL_FLASH_WRP_Pages480to511 * @arg @ref LL_FLASH_WRP_AllPages * @retval None */ __STATIC_INLINE void LL_FLASH_SetWRPAddress(FLASH_TypeDef *FLASHx,uint32_t Address) { MODIFY_REG(FLASHx->WRPR, FLASH_WRPR_WRP , ((~(Address)) & FLASH_WRPR_WRP)); } /** * @brief Get WRP Address * @note Depending on devices and packages, some Sectors may not be available. * Refer to device datasheet for Sectors availability. * @rmtoll WRPR WRP LL_FLASH_GetWRPAddress * @param FLASHx FLASH Instance * @retval Returned value can be a combination of the following values: * @arg @ref LL_FLASH_WRP_DISABLE * @arg @ref LL_FLASH_WRP_SECTOR_0 * @arg @ref LL_FLASH_WRP_SECTOR_1 * @arg @ref LL_FLASH_WRP_SECTOR_2 * @arg @ref LL_FLASH_WRP_SECTOR_3 * @arg @ref LL_FLASH_WRP_SECTOR_4 * @arg @ref LL_FLASH_WRP_SECTOR_5 * @arg @ref LL_FLASH_WRP_SECTOR_6 * @arg @ref LL_FLASH_WRP_SECTOR_7 * @arg @ref LL_FLASH_WRP_SECTOR_8 * @arg @ref LL_FLASH_WRP_SECTOR_9 * @arg @ref LL_FLASH_WRP_SECTOR_10 * @arg @ref LL_FLASH_WRP_SECTOR_11 * @arg @ref LL_FLASH_WRP_SECTOR_12 * @arg @ref LL_FLASH_WRP_SECTOR_13 * @arg @ref LL_FLASH_WRP_SECTOR_14 * @arg @ref LL_FLASH_WRP_SECTOR_15 * @arg @ref LL_FLASH_WRP_Pages0to31 * @arg @ref LL_FLASH_WRP_Pages32to63 * @arg @ref LL_FLASH_WRP_Pages64to95 * @arg @ref LL_FLASH_WRP_Pages96to127 * @arg @ref LL_FLASH_WRP_Pages128to159 * @arg @ref LL_FLASH_WRP_Pages160to191 * @arg @ref LL_FLASH_WRP_Pages192to223 * @arg @ref LL_FLASH_WRP_Pages224to255 * @arg @ref LL_FLASH_WRP_Pages256to287 * @arg @ref LL_FLASH_WRP_Pages288to319 * @arg @ref LL_FLASH_WRP_Pages320to351 * @arg @ref LL_FLASH_WRP_Pages352to383 * @arg @ref LL_FLASH_WRP_Pages384to415 * @arg @ref LL_FLASH_WRP_Pages416to447 * @arg @ref LL_FLASH_WRP_Pages448to479 * @arg @ref LL_FLASH_WRP_Pages480to511 * @arg @ref LL_FLASH_WRP_AllPages */ __STATIC_INLINE uint32_t LL_FLASH_GetWRPAddress(FLASH_TypeDef *FLASHx) { return ((~(READ_BIT(FLASHx->WRPR, FLASH_WRPR_WRP))) & FLASH_WRPR_WRP); } /** * @} */ /** @defgroup FLASH_LL_EF_OPTR_Management OPTR Management * @{ */ #ifdef FLASH_OPTR_WWDG_SW /** * @brief Set Optr * @rmtoll OPTR BOR_EN LL_FLASH_SetOPTR * @rmtoll OPTR BOR_LEV LL_FLASH_SetOPTR * @rmtoll OPTR nBOOT1 LL_FLASH_SetOPTR * @rmtoll OPTR IWDG_SW LL_FLASH_SetOPTR * @rmtoll OPTR WWDG_SW LL_FLASH_SetOPTR * @rmtoll OPTR NRST_MODE LL_FLASH_SetOPTR * @rmtoll OPTR RDP LL_FLASH_SetOPTR * @param FLASHx FLASH Instance * @param BOREnable This parameter can be one of the following values: * @arg @ref LL_FLASH_BOR_ENABLE * @arg @ref LL_FLASH_BOR_DISABLE * @param BORLevel This parameter can be one of the following values: * @arg @ref LL_FLASH_BOR_LEV0 * @arg @ref LL_FLASH_BOR_LEV1 * @arg @ref LL_FLASH_BOR_LEV2 * @arg @ref LL_FLASH_BOR_LEV3 * @arg @ref LL_FLASH_BOR_LEV4 * @arg @ref LL_FLASH_BOR_LEV5 * @arg @ref LL_FLASH_BOR_LEV6 * @arg @ref LL_FLASH_BOR_LEV7 * @param nBOOT1Mode This parameter can be one of the following values:LL_FLASH_NBOOT1_RST * @arg @ref LL_FLASH_NBOOT1_CLR * @arg @ref LL_FLASH_NBOOT1_SET * @param IWDGMode This parameter can be one of the following values: * @arg @ref LL_FLASH_IWDG_MODE_HW * @arg @ref LL_FLASH_IWDG_MODE_SW * @param WWDGMode This parameter can be one of the following values: * @arg @ref LL_FLASH_WWDG_MODE_HW * @arg @ref LL_FLASH_WWDG_MODE_SW * @param NrstMode This parameter can be one of the following values: * @arg @ref LL_FLASH_NRST_MODE_RESET * @arg @ref LL_FLASH_NRST_MODE_GPIO * @param RDPLevel This parameter can be one of the following values: * @arg @ref LL_FLASH_RDP_LEVEL_0 * @arg @ref LL_FLASH_RDP_LEVEL_1 * @retval None */ __STATIC_INLINE void LL_FLASH_SetOPTR(FLASH_TypeDef *FLASHx, \ uint32_t BOREnable, uint32_t BORLevel, uint32_t nBOOT1Mode, \ uint32_t IWDGMode, uint32_t WWDGMode, uint32_t NrstMode, \ uint32_t RDPLevel) { MODIFY_REG(FLASHx->OPTR, (FLASH_OPTR_BOR_EN | FLASH_OPTR_BOR_LEV | FLASH_OPTR_nBOOT1 | FLASH_OPTR_IWDG_SW | \ FLASH_OPTR_WWDG_SW | FLASH_OPTR_NRST_MODE | FLASH_OPTR_RDP), \ (BOREnable | BORLevel | nBOOT1Mode | WWDGMode | IWDGMode | NrstMode | RDPLevel)); } #else /** * @brief Set Optr * @rmtoll OPTR BOR_EN LL_FLASH_SetOPTR * @rmtoll OPTR BOR_LEV LL_FLASH_SetOPTR * @rmtoll OPTR nBOOT1 LL_FLASH_SetOPTR * @rmtoll OPTR IWDG_SW LL_FLASH_SetOPTR * @rmtoll OPTR NRST_MODE LL_FLASH_SetOPTR * @rmtoll OPTR RDP LL_FLASH_SetOPTR * @param FLASHx FLASH Instance * @param BOREnable This parameter can be one of the following values: * @arg @ref LL_FLASH_BOR_ENABLE * @arg @ref LL_FLASH_BOR_DISABLE * @param BORLevel This parameter can be one of the following values: * @arg @ref LL_FLASH_BOR_LEV0 * @arg @ref LL_FLASH_BOR_LEV1 * @arg @ref LL_FLASH_BOR_LEV2 * @arg @ref LL_FLASH_BOR_LEV3 * @arg @ref LL_FLASH_BOR_LEV4 * @arg @ref LL_FLASH_BOR_LEV5 * @arg @ref LL_FLASH_BOR_LEV6 * @arg @ref LL_FLASH_BOR_LEV7 * @param nBOOT1Mode This parameter can be one of the following values:LL_FLASH_NBOOT1_RST * @arg @ref LL_FLASH_NBOOT1_CLR * @arg @ref LL_FLASH_NBOOT1_SET * @param IWDGMode This parameter can be one of the following values: * @arg @ref LL_FLASH_IWDG_MODE_HW * @arg @ref LL_FLASH_IWDG_MODE_SW * @param NrstMode This parameter can be one of the following values: * @arg @ref LL_FLASH_NRST_MODE_RESET * @arg @ref LL_FLASH_NRST_MODE_GPIO * @param RDPLevel This parameter can be one of the following values: * @arg @ref LL_FLASH_RDP_LEVEL_0 * @arg @ref LL_FLASH_RDP_LEVEL_1 * @retval None */ __STATIC_INLINE void LL_FLASH_SetOPTR(FLASH_TypeDef *FLASHx, \ uint32_t BOREnable, uint32_t BORLevel, uint32_t nBOOT1Mode, \ uint32_t IWDGMode, uint32_t NrstMode, uint32_t RDPLevel) { MODIFY_REG(FLASHx->OPTR, (FLASH_OPTR_BOR_EN | FLASH_OPTR_BOR_LEV | FLASH_OPTR_nBOOT1 | \ FLASH_OPTR_IWDG_SW | FLASH_OPTR_NRST_MODE | FLASH_OPTR_RDP), \ (BOREnable | BORLevel | nBOOT1Mode | IWDGMode | NrstMode | RDPLevel)); } #endif /** * @brief Get RDP Level * @rmtoll OPTR RDP LL_FLASH_GetRDP * @param FLASHx FLASH Instance * @retval Returned value can be a combination of the following values: * @arg @ref LL_FLASH_RDP_LEVEL_0 * @arg @ref LL_FLASH_RDP_LEVEL_1 */ __STATIC_INLINE uint32_t LL_FLASH_GetRDP(FLASH_TypeDef *FLASHx) { return (READ_BIT(FLASHx->OPTR, FLASH_OPTR_RDP)); } /** * @} */ /** * @} */ /** * @} */ #endif /* defined (FLASH) */ /** * @} */ #ifdef __cplusplus } #endif #endif /* PY32F0xx_LL_FLASH_H */ /************************ (C) COPYRIGHT Puya *****END OF FILE****/