1 /** 2 ****************************************************************************** 3 * @file stm32f0xx_hal_pwr_ex.h 4 * @author MCD Application Team 5 * @brief Header file of PWR HAL Extension module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2016 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 __STM32F0xx_HAL_PWR_EX_H 21 #define __STM32F0xx_HAL_PWR_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32f0xx_hal_def.h" 29 30 /** @addtogroup STM32F0xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup PWREx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 40 /** @defgroup PWREx_Exported_Types PWREx Exported Types 41 * @{ 42 */ 43 44 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 45 defined (STM32F071xB) || defined (STM32F072xB) || \ 46 defined (STM32F091xC) 47 48 /** 49 * @brief PWR PVD configuration structure definition 50 */ 51 typedef struct 52 { 53 uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level 54 This parameter can be a value of @ref PWREx_PVD_detection_level */ 55 56 uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. 57 This parameter can be a value of @ref PWREx_PVD_Mode */ 58 }PWR_PVDTypeDef; 59 60 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 61 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 62 /* defined (STM32F091xC) */ 63 /** 64 * @} 65 */ 66 /* Exported constants --------------------------------------------------------*/ 67 68 /** @defgroup PWREx_Exported_Constants PWREx Exported Constants 69 * @{ 70 */ 71 72 73 /** @defgroup PWREx_WakeUp_Pins PWREx Wakeup Pins 74 * @{ 75 */ 76 #if defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 77 defined (STM32F091xC) || defined (STM32F098xx) 78 #define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) 79 #define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) 80 #define PWR_WAKEUP_PIN3 ((uint32_t)PWR_CSR_EWUP3) 81 #define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) 82 #define PWR_WAKEUP_PIN5 ((uint32_t)PWR_CSR_EWUP5) 83 #define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) 84 #define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) 85 #define PWR_WAKEUP_PIN8 ((uint32_t)PWR_CSR_EWUP8) 86 87 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ 88 ((PIN) == PWR_WAKEUP_PIN2) || \ 89 ((PIN) == PWR_WAKEUP_PIN3) || \ 90 ((PIN) == PWR_WAKEUP_PIN4) || \ 91 ((PIN) == PWR_WAKEUP_PIN5) || \ 92 ((PIN) == PWR_WAKEUP_PIN6) || \ 93 ((PIN) == PWR_WAKEUP_PIN7) || \ 94 ((PIN) == PWR_WAKEUP_PIN8)) 95 96 #elif defined(STM32F030xC) || defined (STM32F070xB) 97 #define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) 98 #define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) 99 #define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) 100 #define PWR_WAKEUP_PIN5 ((uint32_t)PWR_CSR_EWUP5) 101 #define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) 102 #define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) 103 104 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ 105 ((PIN) == PWR_WAKEUP_PIN2) || \ 106 ((PIN) == PWR_WAKEUP_PIN4) || \ 107 ((PIN) == PWR_WAKEUP_PIN5) || \ 108 ((PIN) == PWR_WAKEUP_PIN6) || \ 109 ((PIN) == PWR_WAKEUP_PIN7)) 110 111 #elif defined(STM32F042x6) || defined (STM32F048xx) 112 #define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) 113 #define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) 114 #define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) 115 #define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) 116 #define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) 117 118 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ 119 ((PIN) == PWR_WAKEUP_PIN2) || \ 120 ((PIN) == PWR_WAKEUP_PIN4) || \ 121 ((PIN) == PWR_WAKEUP_PIN6) || \ 122 ((PIN) == PWR_WAKEUP_PIN7)) 123 124 #else 125 #define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) 126 #define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) 127 128 129 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ 130 ((PIN) == PWR_WAKEUP_PIN2)) 131 132 #endif 133 134 /** 135 * @} 136 */ 137 138 /** @defgroup PWREx_EXTI_Line PWREx EXTI Line 139 * @{ 140 */ 141 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 142 defined (STM32F071xB) || defined (STM32F072xB) || \ 143 defined (STM32F091xC) 144 145 #define PWR_EXTI_LINE_PVD ((uint32_t)EXTI_IMR_MR16) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ 146 147 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 148 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 149 /* defined (STM32F091xC) */ 150 151 #if defined (STM32F042x6) || defined (STM32F048xx) || \ 152 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 153 defined (STM32F091xC) || defined (STM32F098xx) 154 155 #define PWR_EXTI_LINE_VDDIO2 ((uint32_t)EXTI_IMR_MR31) /*!< External interrupt line 31 Connected to the Vddio2 Monitor EXTI Line */ 156 157 #endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\ 158 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 159 defined (STM32F091xC) || defined (STM32F098xx) ||*/ 160 /** 161 * @} 162 */ 163 164 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 165 defined (STM32F071xB) || defined (STM32F072xB) || \ 166 defined (STM32F091xC) 167 /** @defgroup PWREx_PVD_detection_level PWREx PVD detection level 168 * @{ 169 */ 170 #define PWR_PVDLEVEL_0 PWR_CR_PLS_LEV0 171 #define PWR_PVDLEVEL_1 PWR_CR_PLS_LEV1 172 #define PWR_PVDLEVEL_2 PWR_CR_PLS_LEV2 173 #define PWR_PVDLEVEL_3 PWR_CR_PLS_LEV3 174 #define PWR_PVDLEVEL_4 PWR_CR_PLS_LEV4 175 #define PWR_PVDLEVEL_5 PWR_CR_PLS_LEV5 176 #define PWR_PVDLEVEL_6 PWR_CR_PLS_LEV6 177 #define PWR_PVDLEVEL_7 PWR_CR_PLS_LEV7 178 #define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ 179 ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ 180 ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ 181 ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) 182 /** 183 * @} 184 */ 185 186 /** @defgroup PWREx_PVD_Mode PWREx PVD Mode 187 * @{ 188 */ 189 #define PWR_PVD_MODE_NORMAL (0x00000000U) /*!< basic mode is used */ 190 #define PWR_PVD_MODE_IT_RISING (0x00010001U) /*!< External Interrupt Mode with Rising edge trigger detection */ 191 #define PWR_PVD_MODE_IT_FALLING (0x00010002U) /*!< External Interrupt Mode with Falling edge trigger detection */ 192 #define PWR_PVD_MODE_IT_RISING_FALLING (0x00010003U) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 193 #define PWR_PVD_MODE_EVENT_RISING (0x00020001U) /*!< Event Mode with Rising edge trigger detection */ 194 #define PWR_PVD_MODE_EVENT_FALLING (0x00020002U) /*!< Event Mode with Falling edge trigger detection */ 195 #define PWR_PVD_MODE_EVENT_RISING_FALLING (0x00020003U) /*!< Event Mode with Rising/Falling edge trigger detection */ 196 197 #define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ 198 ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ 199 ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ 200 ((MODE) == PWR_PVD_MODE_NORMAL)) 201 /** 202 * @} 203 */ 204 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 205 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 206 /* defined (STM32F091xC) */ 207 208 /** @defgroup PWREx_Flag PWREx Flag 209 * @{ 210 */ 211 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 212 defined (STM32F071xB) || defined (STM32F072xB) || \ 213 defined (STM32F091xC) 214 215 #define PWR_FLAG_WU PWR_CSR_WUF 216 #define PWR_FLAG_SB PWR_CSR_SBF 217 #define PWR_FLAG_PVDO PWR_CSR_PVDO 218 #define PWR_FLAG_VREFINTRDY PWR_CSR_VREFINTRDYF 219 #elif defined (STM32F070x6) || defined (STM32F070xB) || defined (STM32F030xC) 220 #define PWR_FLAG_WU PWR_CSR_WUF 221 #define PWR_FLAG_SB PWR_CSR_SBF 222 #define PWR_FLAG_VREFINTRDY PWR_CSR_VREFINTRDYF 223 #else 224 #define PWR_FLAG_WU PWR_CSR_WUF 225 #define PWR_FLAG_SB PWR_CSR_SBF 226 227 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 228 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 229 /* defined (STM32F091xC) */ 230 /** 231 * @} 232 */ 233 234 /** 235 * @} 236 */ 237 238 /* Exported macro ------------------------------------------------------------*/ 239 /** @defgroup PWREx_Exported_Macros PWREx Exported Macros 240 * @{ 241 */ 242 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 243 defined (STM32F071xB) || defined (STM32F072xB) || \ 244 defined (STM32F091xC) 245 /** 246 * @brief Enable interrupt on PVD Exti Line 16. 247 * @retval None. 248 */ 249 #define __HAL_PWR_PVD_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_PVD)) 250 251 /** 252 * @brief Disable interrupt on PVD Exti Line 16. 253 * @retval None. 254 */ 255 #define __HAL_PWR_PVD_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD)) 256 257 /** 258 * @brief Enable event on PVD Exti Line 16. 259 * @retval None. 260 */ 261 #define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() (EXTI->EMR |= (PWR_EXTI_LINE_PVD)) 262 263 /** 264 * @brief Disable event on PVD Exti Line 16. 265 * @retval None. 266 */ 267 #define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD)) 268 269 /** 270 * @brief Disable the PVD Extended Interrupt Rising Trigger. 271 * @retval None. 272 */ 273 #define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) 274 275 /** 276 * @brief Disable the PVD Extended Interrupt Falling Trigger. 277 * @retval None. 278 */ 279 #define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) 280 281 /** 282 * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. 283 * @retval None 284 */ 285 #define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); 286 287 288 /** 289 * @brief PVD EXTI line configuration: set falling edge trigger. 290 * @retval None. 291 */ 292 #define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (PWR_EXTI_LINE_PVD) 293 294 /** 295 * @brief PVD EXTI line configuration: set rising edge trigger. 296 * @retval None. 297 */ 298 #define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() EXTI->RTSR |= (PWR_EXTI_LINE_PVD) 299 300 /** 301 * @brief Enable the PVD Extended Interrupt Rising & Falling Trigger. 302 * @retval None 303 */ 304 #define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); 305 306 /** 307 * @brief Check whether the specified PVD EXTI interrupt flag is set or not. 308 * @retval EXTI PVD Line Status. 309 */ 310 #define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) 311 312 /** 313 * @brief Clear the PVD EXTI flag. 314 * @retval None. 315 */ 316 #define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) 317 318 /** 319 * @brief Generate a Software interrupt on selected EXTI line. 320 * @retval None. 321 */ 322 #define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD)) 323 324 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 325 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 326 /* defined (STM32F091xC) */ 327 328 329 #if defined (STM32F042x6) || defined (STM32F048xx) || \ 330 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 331 defined (STM32F091xC) || defined (STM32F098xx) 332 /** 333 * @brief Enable interrupt on Vddio2 Monitor Exti Line 31. 334 * @retval None. 335 */ 336 #define __HAL_PWR_VDDIO2_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_VDDIO2)) 337 338 /** 339 * @brief Disable interrupt on Vddio2 Monitor Exti Line 31. 340 * @retval None. 341 */ 342 #define __HAL_PWR_VDDIO2_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_VDDIO2)) 343 344 /** 345 * @brief Vddio2 Monitor EXTI line configuration: clear falling edge and rising edge trigger. 346 * @retval None. 347 */ 348 #define __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE() \ 349 do{ \ 350 EXTI->FTSR &= ~(PWR_EXTI_LINE_VDDIO2); \ 351 EXTI->RTSR &= ~(PWR_EXTI_LINE_VDDIO2); \ 352 } while(0) 353 354 /** 355 * @brief Vddio2 Monitor EXTI line configuration: set falling edge trigger. 356 * @retval None. 357 */ 358 #define __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (PWR_EXTI_LINE_VDDIO2) 359 360 /** 361 * @brief Check whether the specified VDDIO2 monitor EXTI interrupt flag is set or not. 362 * @retval EXTI VDDIO2 Monitor Line Status. 363 */ 364 #define __HAL_PWR_VDDIO2_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_VDDIO2)) 365 366 /** 367 * @brief Clear the VDDIO2 Monitor EXTI flag. 368 * @retval None. 369 */ 370 #define __HAL_PWR_VDDIO2_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_VDDIO2)) 371 372 /** 373 * @brief Generate a Software interrupt on selected EXTI line. 374 * @retval None. 375 */ 376 #define __HAL_PWR_VDDIO2_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_VDDIO2)) 377 378 379 #endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\ 380 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 381 defined (STM32F091xC) || defined (STM32F098xx) */ 382 383 /** 384 * @} 385 */ 386 387 /* Exported functions --------------------------------------------------------*/ 388 389 /** @addtogroup PWREx_Exported_Functions PWREx Exported Functions 390 * @{ 391 */ 392 393 /** @addtogroup PWREx_Exported_Functions_Group1 394 * @{ 395 */ 396 /* I/O operation functions ***************************************************/ 397 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 398 defined (STM32F071xB) || defined (STM32F072xB) || \ 399 defined (STM32F091xC) 400 void HAL_PWR_PVD_IRQHandler(void); 401 void HAL_PWR_PVDCallback(void); 402 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 403 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 404 /* defined (STM32F091xC) */ 405 406 #if defined (STM32F042x6) || defined (STM32F048xx) || \ 407 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 408 defined (STM32F091xC) || defined (STM32F098xx) 409 void HAL_PWREx_Vddio2Monitor_IRQHandler(void); 410 void HAL_PWREx_Vddio2MonitorCallback(void); 411 #endif /* defined (STM32F042x6) || defined (STM32F048xx) || \ 412 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 413 defined (STM32F091xC) || defined (STM32F098xx) */ 414 415 /* Peripheral Control functions **********************************************/ 416 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ 417 defined (STM32F071xB) || defined (STM32F072xB) || \ 418 defined (STM32F091xC) 419 void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); 420 void HAL_PWR_EnablePVD(void); 421 void HAL_PWR_DisablePVD(void); 422 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ 423 /* defined (STM32F071xB) || defined (STM32F072xB) || */ 424 /* defined (STM32F091xC) */ 425 426 #if defined (STM32F042x6) || defined (STM32F048xx) || \ 427 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 428 defined (STM32F091xC) || defined (STM32F098xx) 429 void HAL_PWREx_EnableVddio2Monitor(void); 430 void HAL_PWREx_DisableVddio2Monitor(void); 431 #endif /* defined (STM32F042x6) || defined (STM32F048xx) || \ 432 defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ 433 defined (STM32F091xC) || defined (STM32F098xx) */ 434 435 /** 436 * @} 437 */ 438 439 /** 440 * @} 441 */ 442 443 /** 444 * @} 445 */ 446 447 /** 448 * @} 449 */ 450 451 #ifdef __cplusplus 452 } 453 #endif 454 455 #endif /* __STM32F0xx_HAL_PWR_EX_H */ 456