|
STM32G474xx HAL用户手册
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32g4xx_hal_flash.h 00004 * @author MCD Application Team 00005 * @brief Header file of FLASH HAL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2019 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file in 00013 * the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 ****************************************************************************** 00016 */ 00017 00018 /* Define to prevent recursive inclusion -------------------------------------*/ 00019 #ifndef STM32G4xx_HAL_FLASH_H 00020 #define STM32G4xx_HAL_FLASH_H 00021 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00026 /* Includes ------------------------------------------------------------------*/ 00027 #include "stm32g4xx_hal_def.h" 00028 00029 /** @addtogroup STM32G4xx_HAL_Driver 00030 * @{ 00031 */ 00032 00033 /** @addtogroup FLASH 00034 * @{ 00035 */ 00036 00037 /* Exported types ------------------------------------------------------------*/ 00038 /** @defgroup FLASH_Exported_Types FLASH导出的类型 00039 * @{ 00040 */ 00041 00042 /** 00043 * @brief FLASH擦除结构定义 00044 */ 00045 typedef struct 00046 { 00047 uint32_t TypeErase; /*!< 批量擦除或页擦除。 00048 该参数可以是@ref FLASH_Type_Erase的值 */ 00049 uint32_t Banks; /*!< 选择要擦除的bank。 00050 该参数必须是@ref FLASH_Banks的值 00051 (批量擦除只能使用FLASH_BANK_BOTH) */ 00052 uint32_t Page; /*!< 禁用页擦除时的初始Flash页。 00053 该参数必须是0到(bank中的最大页数-1)之间的值 00054 (例如:512KB双bank为127) */ 00055 uint32_t NbPages; /*!< 要擦除的页数。 00056 该参数必须是1到(bank中的最大页数-初始页值)之间的值*/ 00057 } FLASH_EraseInitTypeDef; 00058 00059 /** 00060 * @brief FLASH选项字节程序结构定义 00061 */ 00062 typedef struct 00063 { 00064 uint32_t OptionType; /*!< 要配置的选项字节。 00065 该参数可以是@ref FLASH_OB_Type的值的组合 */ 00066 uint32_t WRPArea; /*!< 要编程的写保护区域(用于OPTIONBYTE_WRP)。 00067 同一时间只能编程一个WRP区域。 00068 该参数可以是@ref FLASH_OB_WRP_Area的值 */ 00069 uint32_t WRPStartOffset; /*!< 写保护起始偏移量(用于OPTIONBYTE_WRP)。 00070 该参数必须是0到(bank中的最大页数-1)之间的值 */ 00071 uint32_t WRPEndOffset; /*!< 写保护结束偏移量(用于OPTIONBYTE_WRP)。 00072 该参数必须是WRRPStartOffset到(bank中的最大页数-1)之间的值 */ 00073 uint32_t RDPLevel; /*!< 设置读保护级别。(用于OPTIONBYTE_RDP)。 00074 该参数可以是@ref FLASH_OB_Read_Protection的值 */ 00075 uint32_t USERType; /*!< 要配置的用户选项字节(用于OPTIONBYTE_USER)。 00076 该参数可以是@ref FLASH_OB_USER_Type的组合 */ 00077 uint32_t USERConfig; /*!< 用户选项字节的值(用于OPTIONBYTE_USER)。 00078 该参数可以是@ref FLASH_OB_USER_BOR_LEVEL, 00079 @ref FLASH_OB_USER_nRST_STOP, @ref FLASH_OB_USER_nRST_STANDBY, 00080 @ref FLASH_OB_USER_nRST_SHUTDOWN, @ref FLASH_OB_USER_IWDG_SW, 00081 @ref FLASH_OB_USER_IWDG_STOP, @ref FLASH_OB_USER_IWDG_STANDBY, 00082 @ref FLASH_OB_USER_WWDG_SW, @ref FLASH_OB_USER_BFB2 (*), 00083 @ref FLASH_OB_USER_nBOOT1, @ref FLASH_OB_USER_SRAM_PE, 00084 @ref FLASH_OB_USER_CCMSRAM_RST的组合 00085 @note (*) 取决于设备 */ 00086 uint32_t PCROPConfig; /*!< PCROP的配置(用于OPTIONBYTE_PCROP)。 00087 该参数必须是@ref FLASH_Banks(除了FLASH_BANK_BOTH) 00088 和@ref FLASH_OB_PCROP_RDP的组合 */ 00089 uint32_t PCROPStartAddr; /*!< PCROP起始地址(用于OPTIONBYTE_PCROP)。 00090 该参数必须在bank的起始和结束之间 00091 => 注意bank交换的地址 */ 00092 uint32_t PCROPEndAddr; /*!< PCROP结束地址(用于OPTIONBYTE_PCROP)。 00093 该参数必须在PCROP起始地址和bank结束之间 */ 00094 uint32_t BootEntryPoint; /*!< 设置启动锁(用于OPTIONBYTE_BOOT_LOCK)。 00095 该参数可以是@ref FLASH_OB_Boot_Lock的值 */ 00096 uint32_t SecBank; /*!< 要编程的可保护内存区域的bank(用于OPTIONBYTE_SEC)。 00097 同一时间只能编程一个可保护内存区域。 00098 该参数可以是以下值之一: 00099 FLASH_BANK_1:bank 1中要编程的可保护内存区域 00100 FLASH_BANK_2:bank 2中要编程的可保护内存区域(*) 00101 @note (*) 取决于设备 */ 00102 uint32_t SecSize; /*!< 要编程的可保护内存区域的大小(用于OPTIONBYTE_SEC), 00103 以页数表示。可保护内存区域从bank的第一页开始。 00104 同一时间只能编程一个可保护内存区域。 00105 该参数必须是0到(bank中的最大页数-1)之间的值 */ 00106 } FLASH_OBProgramInitTypeDef; 00107 00108 /** 00109 * @brief FLASH过程结构定义 00110 */ 00111 typedef enum 00112 { 00113 FLASH_PROC_NONE = 0, 00114 FLASH_PROC_PAGE_ERASE, 00115 FLASH_PROC_MASS_ERASE, 00116 FLASH_PROC_PROGRAM, 00117 FLASH_PROC_PROGRAM_LAST 00118 } FLASH_ProcedureTypeDef; 00119 00120 /** 00121 * @brief FLASH缓存结构定义 00122 */ 00123 typedef enum 00124 { 00125 FLASH_CACHE_DISABLED = 0, 00126 FLASH_CACHE_ICACHE_ENABLED, 00127 FLASH_CACHE_DCACHE_ENABLED, 00128 FLASH_CACHE_ICACHE_DCACHE_ENABLED 00129 } FLASH_CacheTypeDef; 00130 00131 /** 00132 * @brief FLASH句柄结构定义 00133 */ 00134 typedef struct 00135 { 00136 HAL_LockTypeDef Lock; /* FLASH锁定对象 */ 00137 __IO uint32_t ErrorCode; /* FLASH错误代码 */ 00138 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /* 内部变量,用于指示中断上下文中正在进行的操作 */ 00139 __IO uint32_t Address; /* 内部变量,用于保存中断上下文中选择的编程地址 */ 00140 __IO uint32_t Bank; /* 内部变量,用于保存中断上下文中擦除期间选择的当前bank */ 00141 __IO uint32_t Page; /* 内部变量,用于定义中断上下文中正在擦除的当前页 */ 00142 __IO uint32_t NbPagesToErase; /* 内部变量,用于保存中断上下文中剩余的要擦除的页数 */ 00143 __IO FLASH_CacheTypeDef CacheToReactivate; /* 内部变量,用于指示应重新激活的缓存 */ 00144 } FLASH_ProcessType