You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

371 lines
17 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f4xx_hal_pwr_ex.h
  4. * @author MCD Application Team
  5. * @version V1.5.2
  6. * @date 22-September-2016
  7. * @brief Header file of PWR HAL Extension module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32F4xx_HAL_PWR_EX_H
  39. #define __STM32F4xx_HAL_PWR_EX_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32f4xx_hal_def.h"
  45. /** @addtogroup STM32F4xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup PWREx
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /* Exported constants --------------------------------------------------------*/
  53. /** @defgroup PWREx_Exported_Constants PWREx Exported Constants
  54. * @{
  55. */
  56. #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
  57. defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
  58. /** @defgroup PWREx_Regulator_state_in_UnderDrive_mode PWREx Regulator state in UnderDrive mode
  59. * @{
  60. */
  61. #define PWR_MAINREGULATOR_UNDERDRIVE_ON PWR_CR_MRUDS
  62. #define PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON ((uint32_t)(PWR_CR_LPDS | PWR_CR_LPUDS))
  63. /**
  64. * @}
  65. */
  66. /** @defgroup PWREx_Over_Under_Drive_Flag PWREx Over Under Drive Flag
  67. * @{
  68. */
  69. #define PWR_FLAG_ODRDY PWR_CSR_ODRDY
  70. #define PWR_FLAG_ODSWRDY PWR_CSR_ODSWRDY
  71. #define PWR_FLAG_UDRDY PWR_CSR_UDSWRDY
  72. /**
  73. * @}
  74. */
  75. #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
  76. /** @defgroup PWREx_Regulator_Voltage_Scale PWREx Regulator Voltage Scale
  77. * @{
  78. */
  79. #if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)
  80. #define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK = 168 MHz. */
  81. #define PWR_REGULATOR_VOLTAGE_SCALE2 ((uint32_t)0x00000000U) /* Scale 2 mode: the maximum value of fHCLK = 144 MHz. */
  82. #else
  83. #define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK is 168 MHz. It can be extended to
  84. 180 MHz by activating the over-drive mode. */
  85. #define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_CR_VOS_1 /* Scale 2 mode: the maximum value of fHCLK is 144 MHz. It can be extended to
  86. 168 MHz by activating the over-drive mode. */
  87. #define PWR_REGULATOR_VOLTAGE_SCALE3 PWR_CR_VOS_0 /* Scale 3 mode: the maximum value of fHCLK is 120 MHz. */
  88. #endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */
  89. /**
  90. * @}
  91. */
  92. #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
  93. defined(STM32F412Rx) || defined(STM32F412Cx)
  94. /** @defgroup PWREx_WakeUp_Pins PWREx WakeUp Pins
  95. * @{
  96. */
  97. #define PWR_WAKEUP_PIN2 ((uint32_t)0x00000080U)
  98. #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
  99. defined(STM32F412Rx) || defined(STM32F412Cx)
  100. #define PWR_WAKEUP_PIN3 ((uint32_t)0x00000040U)
  101. #endif /* STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Zx || STM32F412Vx || \
  102. STM32F412Rx || STM32F412Cx */
  103. /**
  104. * @}
  105. */
  106. #endif /* STM32F410xx || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
  107. /**
  108. * @}
  109. */
  110. /* Exported macro ------------------------------------------------------------*/
  111. /** @defgroup PWREx_Exported_Constants PWREx Exported Constants
  112. * @{
  113. */
  114. #if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)
  115. /** @brief macros configure the main internal regulator output voltage.
  116. * @param __REGULATOR__: specifies the regulator output voltage to achieve
  117. * a tradeoff between performance and power consumption when the device does
  118. * not operate at the maximum frequency (refer to the datasheets for more details).
  119. * This parameter can be one of the following values:
  120. * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode
  121. * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode
  122. * @retval None
  123. */
  124. #define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \
  125. __IO uint32_t tmpreg = 0x00U; \
  126. MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \
  127. /* Delay after an RCC peripheral clock enabling */ \
  128. tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \
  129. UNUSED(tmpreg); \
  130. } while(0)
  131. #else
  132. /** @brief macros configure the main internal regulator output voltage.
  133. * @param __REGULATOR__: specifies the regulator output voltage to achieve
  134. * a tradeoff between performance and power consumption when the device does
  135. * not operate at the maximum frequency (refer to the datasheets for more details).
  136. * This parameter can be one of the following values:
  137. * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode
  138. * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode
  139. * @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode
  140. * @retval None
  141. */
  142. #define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \
  143. __IO uint32_t tmpreg = 0x00U; \
  144. MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \
  145. /* Delay after an RCC peripheral clock enabling */ \
  146. tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \
  147. UNUSED(tmpreg); \
  148. } while(0)
  149. #endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */
  150. #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
  151. defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
  152. /** @brief Macros to enable or disable the Over drive mode.
  153. * @note These macros can be used only for STM32F42xx/STM3243xx devices.
  154. */
  155. #define __HAL_PWR_OVERDRIVE_ENABLE() (*(__IO uint32_t *) CR_ODEN_BB = ENABLE)
  156. #define __HAL_PWR_OVERDRIVE_DISABLE() (*(__IO uint32_t *) CR_ODEN_BB = DISABLE)
  157. /** @brief Macros to enable or disable the Over drive switching.
  158. * @note These macros can be used only for STM32F42xx/STM3243xx devices.
  159. */
  160. #define __HAL_PWR_OVERDRIVESWITCHING_ENABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = ENABLE)
  161. #define __HAL_PWR_OVERDRIVESWITCHING_DISABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = DISABLE)
  162. /** @brief Macros to enable or disable the Under drive mode.
  163. * @note This mode is enabled only with STOP low power mode.
  164. * In this mode, the 1.2V domain is preserved in reduced leakage mode. This
  165. * mode is only available when the main regulator or the low power regulator
  166. * is in low voltage mode.
  167. * @note If the Under-drive mode was enabled, it is automatically disabled after
  168. * exiting Stop mode.
  169. * When the voltage regulator operates in Under-drive mode, an additional
  170. * startup delay is induced when waking up from Stop mode.
  171. */
  172. #define __HAL_PWR_UNDERDRIVE_ENABLE() (PWR->CR |= (uint32_t)PWR_CR_UDEN)
  173. #define __HAL_PWR_UNDERDRIVE_DISABLE() (PWR->CR &= (uint32_t)(~PWR_CR_UDEN))
  174. /** @brief Check PWR flag is set or not.
  175. * @note These macros can be used only for STM32F42xx/STM3243xx devices.
  176. * @param __FLAG__: specifies the flag to check.
  177. * This parameter can be one of the following values:
  178. * @arg PWR_FLAG_ODRDY: This flag indicates that the Over-drive mode
  179. * is ready
  180. * @arg PWR_FLAG_ODSWRDY: This flag indicates that the Over-drive mode
  181. * switching is ready
  182. * @arg PWR_FLAG_UDRDY: This flag indicates that the Under-drive mode
  183. * is enabled in Stop mode
  184. * @retval The new state of __FLAG__ (TRUE or FALSE).
  185. */
  186. #define __HAL_PWR_GET_ODRUDR_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))
  187. /** @brief Clear the Under-Drive Ready flag.
  188. * @note These macros can be used only for STM32F42xx/STM3243xx devices.
  189. */
  190. #define __HAL_PWR_CLEAR_ODRUDR_FLAG() (PWR->CSR |= PWR_FLAG_UDRDY)
  191. #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
  192. /**
  193. * @}
  194. */
  195. /* Exported functions --------------------------------------------------------*/
  196. /** @addtogroup PWREx_Exported_Functions PWREx Exported Functions
  197. * @{
  198. */
  199. /** @addtogroup PWREx_Exported_Functions_Group1
  200. * @{
  201. */
  202. void HAL_PWREx_EnableFlashPowerDown(void);
  203. void HAL_PWREx_DisableFlashPowerDown(void);
  204. HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void);
  205. HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void);
  206. uint32_t HAL_PWREx_GetVoltageRange(void);
  207. HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling);
  208. #if defined(STM32F469xx) || defined(STM32F479xx)
  209. void HAL_PWREx_EnableWakeUpPinPolarityRisingEdge(void);
  210. void HAL_PWREx_EnableWakeUpPinPolarityFallingEdge(void);
  211. #endif /* STM32F469xx || STM32F479xx */
  212. #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\
  213. defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
  214. defined(STM32F412Rx) || defined(STM32F412Cx)
  215. void HAL_PWREx_EnableMainRegulatorLowVoltage(void);
  216. void HAL_PWREx_DisableMainRegulatorLowVoltage(void);
  217. void HAL_PWREx_EnableLowRegulatorLowVoltage(void);
  218. void HAL_PWREx_DisableLowRegulatorLowVoltage(void);
  219. #endif /* STM32F410xx || STM32F401xC || STM32F401xE || STM32F411xE || STM32F412Zx || STM32F412Vx ||\
  220. STM32F412Rx || STM32F412Cx */
  221. #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\
  222. defined(STM32F469xx) || defined(STM32F479xx)
  223. HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void);
  224. HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void);
  225. HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
  226. #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
  227. /**
  228. * @}
  229. */
  230. /**
  231. * @}
  232. */
  233. /* Private types -------------------------------------------------------------*/
  234. /* Private variables ---------------------------------------------------------*/
  235. /* Private constants ---------------------------------------------------------*/
  236. /** @defgroup PWREx_Private_Constants PWREx Private Constants
  237. * @{
  238. */
  239. /** @defgroup PWREx_register_alias_address PWREx Register alias address
  240. * @{
  241. */
  242. /* ------------- PWR registers bit address in the alias region ---------------*/
  243. /* --- CR Register ---*/
  244. /* Alias word address of FPDS bit */
  245. #define FPDS_BIT_NUMBER POSITION_VAL(PWR_CR_FPDS)
  246. #define CR_FPDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (FPDS_BIT_NUMBER * 4U))
  247. /* Alias word address of ODEN bit */
  248. #define ODEN_BIT_NUMBER POSITION_VAL(PWR_CR_ODEN)
  249. #define CR_ODEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODEN_BIT_NUMBER * 4U))
  250. /* Alias word address of ODSWEN bit */
  251. #define ODSWEN_BIT_NUMBER POSITION_VAL(PWR_CR_ODSWEN)
  252. #define CR_ODSWEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODSWEN_BIT_NUMBER * 4U))
  253. /* Alias word address of MRLVDS bit */
  254. #define MRLVDS_BIT_NUMBER POSITION_VAL(PWR_CR_MRLVDS)
  255. #define CR_MRLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (MRLVDS_BIT_NUMBER * 4U))
  256. /* Alias word address of LPLVDS bit */
  257. #define LPLVDS_BIT_NUMBER POSITION_VAL(PWR_CR_LPLVDS)
  258. #define CR_LPLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPLVDS_BIT_NUMBER * 4U))
  259. /**
  260. * @}
  261. */
  262. /** @defgroup PWREx_CSR_register_alias PWRx CSR Register alias address
  263. * @{
  264. */
  265. /* --- CSR Register ---*/
  266. /* Alias word address of BRE bit */
  267. #define BRE_BIT_NUMBER POSITION_VAL(PWR_CSR_BRE)
  268. #define CSR_BRE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (BRE_BIT_NUMBER * 4U))
  269. #if defined(STM32F469xx) || defined(STM32F479xx)
  270. /* Alias word address of WUPP bit */
  271. #define WUPP_BIT_NUMBER POSITION_VAL(PWR_CSR_WUPP)
  272. #define CSR_WUPP_BB (PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (WUPP_BIT_NUMBER * 4U))
  273. #endif /* STM32F469xx || STM32F479xx */
  274. /**
  275. * @}
  276. */
  277. /**
  278. * @}
  279. */
  280. /* Private macros ------------------------------------------------------------*/
  281. /** @defgroup PWREx_Private_Macros PWREx Private Macros
  282. * @{
  283. */
  284. /** @defgroup PWREx_IS_PWR_Definitions PWREx Private macros to check input parameters
  285. * @{
  286. */
  287. #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
  288. defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
  289. #define IS_PWR_REGULATOR_UNDERDRIVE(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_UNDERDRIVE_ON) || \
  290. ((REGULATOR) == PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON))
  291. #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
  292. #if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)
  293. #define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \
  294. ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2))
  295. #else
  296. #define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \
  297. ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \
  298. ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE3))
  299. #endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */
  300. #if defined(STM32F446xx)
  301. #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2))
  302. #elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
  303. defined(STM32F412Rx) || defined(STM32F412Cx)
  304. #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) || \
  305. ((PIN) == PWR_WAKEUP_PIN3))
  306. #else
  307. #define IS_PWR_WAKEUP_PIN(PIN) ((PIN) == PWR_WAKEUP_PIN1)
  308. #endif /* STM32F446xx */
  309. /**
  310. * @}
  311. */
  312. /**
  313. * @}
  314. */
  315. /**
  316. * @}
  317. */
  318. /**
  319. * @}
  320. */
  321. #ifdef __cplusplus
  322. }
  323. #endif
  324. #endif /* __STM32F4xx_HAL_PWR_EX_H */
  325. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/