1 /** 2 ****************************************************************************** 3 * @file stm32u5xx_hal_iwdg.h 4 * @author MCD Application Team 5 * @brief Header file of IWDG HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2021 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32U5xx_HAL_IWDG_H 21 #define STM32U5xx_HAL_IWDG_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32u5xx_hal_def.h" 29 30 /** @addtogroup STM32U5xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @defgroup IWDG IWDG 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup IWDG_Exported_Types IWDG Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief IWDG Init structure definition 45 */ 46 typedef struct 47 { 48 uint32_t Prescaler; /*!< Select the prescaler of the IWDG. 49 This parameter can be a value of @ref IWDG_Prescaler */ 50 51 uint32_t Reload; /*!< Specifies the IWDG down-counter reload value. 52 This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */ 53 54 uint32_t Window; /*!< Specifies the window value to be compared to the down-counter. 55 This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */ 56 57 uint32_t EWI; /*!< Specifies if IWDG Early Wakeup Interrupt is enable or not and the comparator value. 58 This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF 59 value 0 means that EWI is disabled */ 60 } IWDG_InitTypeDef; 61 62 /** 63 * @brief IWDG Handle Structure definition 64 */ 65 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1) 66 typedef struct __IWDG_HandleTypeDef 67 #else 68 typedef struct 69 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */ 70 { 71 IWDG_TypeDef *Instance; /*!< Register base address */ 72 73 IWDG_InitTypeDef Init; /*!< IWDG required parameters */ 74 75 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1) 76 void (* EwiCallback)(struct __IWDG_HandleTypeDef *hiwdg); /*!< IWDG Early WakeUp Interrupt callback */ 77 void (* MspInitCallback)(struct __IWDG_HandleTypeDef *hiwdg); /*!< IWDG Msp Init callback */ 78 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */ 79 } IWDG_HandleTypeDef; 80 81 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1) 82 /** 83 * @brief HAL IWDG common Callback ID enumeration definition 84 */ 85 typedef enum 86 { 87 HAL_IWDG_EWI_CB_ID = 0x00U, /*!< IWDG EWI callback ID */ 88 HAL_IWDG_MSPINIT_CB_ID = 0x01U, /*!< IWDG MspInit callback ID */ 89 } HAL_IWDG_CallbackIDTypeDef; 90 91 /** 92 * @brief HAL IWDG Callback pointer definition 93 */ 94 typedef void (*pIWDG_CallbackTypeDef)(IWDG_HandleTypeDef *hppp); /*!< pointer to a IWDG common callback functions */ 95 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */ 96 97 98 /** 99 * @} 100 */ 101 102 /* Exported constants --------------------------------------------------------*/ 103 /** @defgroup IWDG_Exported_Constants IWDG Exported Constants 104 * @{ 105 */ 106 107 /** @defgroup IWDG_Prescaler IWDG Prescaler 108 * @{ 109 */ 110 #define IWDG_PRESCALER_4 0x00000000u /*!< IWDG prescaler set to 4 */ 111 #define IWDG_PRESCALER_8 IWDG_PR_PR_0 /*!< IWDG prescaler set to 8 */ 112 #define IWDG_PRESCALER_16 IWDG_PR_PR_1 /*!< IWDG prescaler set to 16 */ 113 #define IWDG_PRESCALER_32 (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 32 */ 114 #define IWDG_PRESCALER_64 IWDG_PR_PR_2 /*!< IWDG prescaler set to 64 */ 115 #define IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 128 */ 116 #define IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< IWDG prescaler set to 256 */ 117 #define IWDG_PRESCALER_512 (IWDG_PR_PR_2 | IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 512 */ 118 #define IWDG_PRESCALER_1024 IWDG_PR_PR_3 /*!< IWDG prescaler set to 1024 */ 119 /** 120 * @} 121 */ 122 123 /** @defgroup IWDG_Window_option IWDG Window option 124 * @{ 125 */ 126 #define IWDG_WINDOW_DISABLE IWDG_WINR_WIN 127 /** 128 * @} 129 */ 130 131 /** @defgroup IWDG_EWI_Mode IWDG Early Wakeup Interrupt Mode 132 * @{ 133 */ 134 #define IWDG_EWI_DISABLE 0x00000000u /*!< EWI Disable */ 135 /** 136 * @} 137 */ 138 139 /** 140 * @} 141 */ 142 143 /* Exported macros -----------------------------------------------------------*/ 144 /** @defgroup IWDG_Exported_Macros IWDG Exported Macros 145 * @{ 146 */ 147 148 /** 149 * @brief Enable the IWDG peripheral. 150 * @param __HANDLE__ IWDG handle 151 * @retval None 152 */ 153 #define __HAL_IWDG_START(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE) 154 155 /** 156 * @brief Reload IWDG counter with value defined in the reload register 157 * (write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers disabled). 158 * @param __HANDLE__ IWDG handle 159 * @retval None 160 */ 161 #define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD) 162 163 /** 164 * @} 165 */ 166 167 /* Exported functions --------------------------------------------------------*/ 168 /** @defgroup IWDG_Exported_Functions IWDG Exported Functions 169 * @{ 170 */ 171 172 /** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions 173 * @{ 174 */ 175 /* Initialization/Start functions ********************************************/ 176 HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg); 177 void HAL_IWDG_MspInit(IWDG_HandleTypeDef *hiwdg); 178 /* Callbacks Register/UnRegister functions ***********************************/ 179 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1) 180 HAL_StatusTypeDef HAL_IWDG_RegisterCallback(IWDG_HandleTypeDef *hiwdg, HAL_IWDG_CallbackIDTypeDef CallbackID, 181 pIWDG_CallbackTypeDef pCallback); 182 HAL_StatusTypeDef HAL_IWDG_UnRegisterCallback(IWDG_HandleTypeDef *hiwdg, HAL_IWDG_CallbackIDTypeDef CallbackID); 183 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */ 184 /** 185 * @} 186 */ 187 188 /** @defgroup IWDG_Exported_Functions_Group2 IO operation functions 189 * @{ 190 */ 191 /* I/O operation functions ****************************************************/ 192 HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg); 193 void HAL_IWDG_IRQHandler(IWDG_HandleTypeDef *hiwdg); 194 void HAL_IWDG_EarlyWakeupCallback(IWDG_HandleTypeDef *hiwdg); 195 /** 196 * @} 197 */ 198 199 /** 200 * @} 201 */ 202 203 /* Private constants ---------------------------------------------------------*/ 204 /** @defgroup IWDG_Private_Constants IWDG Private Constants 205 * @{ 206 */ 207 208 /** 209 * @brief IWDG Key Register BitMask 210 */ 211 #define IWDG_KEY_RELOAD 0x0000AAAAu /*!< IWDG Reload Counter Enable */ 212 #define IWDG_KEY_ENABLE 0x0000CCCCu /*!< IWDG Peripheral Enable */ 213 #define IWDG_KEY_WRITE_ACCESS_ENABLE 0x00005555u /*!< IWDG KR Write Access Enable */ 214 #define IWDG_KEY_WRITE_ACCESS_DISABLE 0x00000000u /*!< IWDG KR Write Access Disable */ 215 216 /** 217 * @} 218 */ 219 220 /* Private macros ------------------------------------------------------------*/ 221 /** @defgroup IWDG_Private_Macros IWDG Private Macros 222 * @{ 223 */ 224 225 /** 226 * @brief Enable write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers. 227 * @param __HANDLE__ IWDG handle 228 * @retval None 229 */ 230 #define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE) 231 232 /** 233 * @brief Disable write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers. 234 * @param __HANDLE__ IWDG handle 235 * @retval None 236 */ 237 #define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE) 238 239 /** 240 * @brief Check IWDG prescaler value. 241 * @param __PRESCALER__ IWDG prescaler value 242 * @retval None 243 */ 244 #define IS_IWDG_PRESCALER(__PRESCALER__) (((__PRESCALER__) == IWDG_PRESCALER_4) || \ 245 ((__PRESCALER__) == IWDG_PRESCALER_8) || \ 246 ((__PRESCALER__) == IWDG_PRESCALER_16) || \ 247 ((__PRESCALER__) == IWDG_PRESCALER_32) || \ 248 ((__PRESCALER__) == IWDG_PRESCALER_64) || \ 249 ((__PRESCALER__) == IWDG_PRESCALER_128)|| \ 250 ((__PRESCALER__) == IWDG_PRESCALER_256)|| \ 251 ((__PRESCALER__) == IWDG_PRESCALER_512)|| \ 252 ((__PRESCALER__) == IWDG_PRESCALER_1024)) 253 254 /** 255 * @brief Check IWDG reload value. 256 * @param __RELOAD__ IWDG reload value 257 * @retval None 258 */ 259 #define IS_IWDG_RELOAD(__RELOAD__) ((__RELOAD__) <= IWDG_RLR_RL) 260 261 /** 262 * @brief Check IWDG window value. 263 * @param __WINDOW__ IWDG window value 264 * @retval None 265 */ 266 #define IS_IWDG_WINDOW(__WINDOW__) ((__WINDOW__) <= IWDG_WINR_WIN) 267 268 /** 269 * @brief Check IWDG ewi value. 270 * @param __EWI__ IWDG ewi value 271 * @retval None 272 */ 273 #define IS_IWDG_EWI(__EWI__) ((__EWI__) <= IWDG_EWCR_EWIT) 274 275 /** 276 * @} 277 */ 278 279 /** 280 * @} 281 */ 282 283 /** 284 * @} 285 */ 286 287 288 #ifdef __cplusplus 289 } 290 #endif 291 292 #endif /* STM32U5xx_HAL_IWDG_H */ 293