stm32f10x_pwr.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:11k
源码类别:

uCOS

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : stm32f10x_pwr.c
  3. * Author             : MCD Application Team
  4. * Version            : V2.0.2
  5. * Date               : 07/11/2008
  6. * Description        : This file provides all the PWR firmware functions.
  7. ********************************************************************************
  8. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  9. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  10. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  11. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  12. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  13. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  14. *******************************************************************************/
  15. /* Includes ------------------------------------------------------------------*/
  16. #include "stm32f10x_pwr.h"
  17. #include "stm32f10x_rcc.h"
  18. /* Private typedef -----------------------------------------------------------*/
  19. /* Private define ------------------------------------------------------------*/
  20. /* --------- PWR registers bit address in the alias region ---------- */
  21. #define PWR_OFFSET               (PWR_BASE - PERIPH_BASE)
  22. /* --- CR Register ---*/
  23. /* Alias word address of DBP bit */
  24. #define CR_OFFSET                (PWR_OFFSET + 0x00)
  25. #define DBP_BitNumber            0x08
  26. #define CR_DBP_BB                (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4))
  27. /* Alias word address of PVDE bit */
  28. #define PVDE_BitNumber           0x04
  29. #define CR_PVDE_BB               (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4))
  30. /* --- CSR Register ---*/
  31. /* Alias word address of EWUP bit */
  32. #define CSR_OFFSET               (PWR_OFFSET + 0x04)
  33. #define EWUP_BitNumber           0x08
  34. #define CSR_EWUP_BB              (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4))
  35. /* ------------------ PWR registers bit mask ------------------------ */
  36. /* CR register bit mask */
  37. #define CR_PDDS_Set              ((u32)0x00000002)
  38. #define CR_DS_Mask               ((u32)0xFFFFFFFC)
  39. #define CR_CWUF_Set              ((u32)0x00000004)
  40. #define CR_PLS_Mask              ((u32)0xFFFFFF1F)
  41. /* --------- Cortex System Control register bit mask ---------------- */
  42. /* Cortex System Control register address */
  43. #define SCB_SysCtrl              ((u32)0xE000ED10)
  44. /* SLEEPDEEP bit mask */
  45. #define SysCtrl_SLEEPDEEP_Set    ((u32)0x00000004)
  46. /* Private macro -------------------------------------------------------------*/
  47. /* Private variables ---------------------------------------------------------*/
  48. /* Private function prototypes -----------------------------------------------*/
  49. /* Private functions ---------------------------------------------------------*/
  50. /*******************************************************************************
  51. * Function Name  : PWR_DeInit
  52. * Description    : Deinitializes the PWR peripheral registers to their default
  53. *                  reset values.
  54. * Input          : None
  55. * Output         : None
  56. * Return         : None
  57. *******************************************************************************/
  58. void PWR_DeInit(void)
  59. {
  60.   RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE);
  61.   RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE);
  62. }
  63. /*******************************************************************************
  64. * Function Name  : PWR_BackupAccessCmd
  65. * Description    : Enables or disables access to the RTC and backup registers.
  66. * Input          : - NewState: new state of the access to the RTC and backup
  67. *                    registers. This parameter can be: ENABLE or DISABLE.
  68. * Output         : None
  69. * Return         : None
  70. *******************************************************************************/
  71. void PWR_BackupAccessCmd(FunctionalState NewState)
  72. {
  73.   /* Check the parameters */
  74.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  75.   *(vu32 *) CR_DBP_BB = (u32)NewState;
  76. }
  77. /*******************************************************************************
  78. * Function Name  : PWR_PVDCmd
  79. * Description    : Enables or disables the Power Voltage Detector(PVD).
  80. * Input          : - NewState: new state of the PVD.
  81. *                    This parameter can be: ENABLE or DISABLE.
  82. * Output         : None
  83. * Return         : None
  84. *******************************************************************************/
  85. void PWR_PVDCmd(FunctionalState NewState)
  86. {
  87.   /* Check the parameters */
  88.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  89.   *(vu32 *) CR_PVDE_BB = (u32)NewState;
  90. }
  91. /*******************************************************************************
  92. * Function Name  : PWR_PVDLevelConfig
  93. * Description    : Configures the voltage threshold detected by the Power Voltage
  94. *                  Detector(PVD).
  95. * Input          : - PWR_PVDLevel: specifies the PVD detection level
  96. *                    This parameter can be one of the following values:
  97. *                       - PWR_PVDLevel_2V2: PVD detection level set to 2.2V
  98. *                       - PWR_PVDLevel_2V3: PVD detection level set to 2.3V
  99. *                       - PWR_PVDLevel_2V4: PVD detection level set to 2.4V
  100. *                       - PWR_PVDLevel_2V5: PVD detection level set to 2.5V
  101. *                       - PWR_PVDLevel_2V6: PVD detection level set to 2.6V
  102. *                       - PWR_PVDLevel_2V7: PVD detection level set to 2.7V
  103. *                       - PWR_PVDLevel_2V8: PVD detection level set to 2.8V
  104. *                       - PWR_PVDLevel_2V9: PVD detection level set to 2.9V
  105. * Output         : None
  106. * Return         : None
  107. *******************************************************************************/
  108. void PWR_PVDLevelConfig(u32 PWR_PVDLevel)
  109. {
  110.   u32 tmpreg = 0;
  111.   /* Check the parameters */
  112.   assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel));
  113.   tmpreg = PWR->CR;
  114.   /* Clear PLS[7:5] bits */
  115.   tmpreg &= CR_PLS_Mask;
  116.   /* Set PLS[7:5] bits according to PWR_PVDLevel value */
  117.   tmpreg |= PWR_PVDLevel;
  118.   /* Store the new value */
  119.   PWR->CR = tmpreg;
  120. }
  121. /*******************************************************************************
  122. * Function Name  : PWR_WakeUpPinCmd
  123. * Description    : Enables or disables the WakeUp Pin functionality.
  124. * Input          : - NewState: new state of the WakeUp Pin functionality.
  125. *                    This parameter can be: ENABLE or DISABLE.
  126. * Output         : None
  127. * Return         : None
  128. *******************************************************************************/
  129. void PWR_WakeUpPinCmd(FunctionalState NewState)
  130. {
  131.   /* Check the parameters */
  132.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  133.   *(vu32 *) CSR_EWUP_BB = (u32)NewState;
  134. }
  135. /*******************************************************************************
  136. * Function Name  : PWR_EnterSTOPMode
  137. * Description    : Enters STOP mode.
  138. * Input          : - PWR_Regulator: specifies the regulator state in STOP mode.
  139. *                    This parameter can be one of the following values:
  140. *                       - PWR_Regulator_ON: STOP mode with regulator ON
  141. *                       - PWR_Regulator_LowPower: STOP mode with
  142. *                         regulator in low power mode
  143. *                  - PWR_STOPEntry: specifies if STOP mode in entered with WFI or 
  144. *                    WFE instruction.
  145. *                    This parameter can be one of the following values:
  146. *                       - PWR_STOPEntry_WFI: enter STOP mode with WFI instruction
  147. *                       - PWR_STOPEntry_WFE: enter STOP mode with WFE instruction
  148. * Output         : None
  149. * Return         : None
  150. *******************************************************************************/
  151. void PWR_EnterSTOPMode(u32 PWR_Regulator, u8 PWR_STOPEntry)
  152. {
  153.   u32 tmpreg = 0;
  154.   /* Check the parameters */
  155.   assert_param(IS_PWR_REGULATOR(PWR_Regulator));
  156.   assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));
  157.   
  158.   /* Select the regulator state in STOP mode ---------------------------------*/
  159.   tmpreg = PWR->CR;
  160.   /* Clear PDDS and LPDS bits */
  161.   tmpreg &= CR_DS_Mask;
  162.   /* Set LPDS bit according to PWR_Regulator value */
  163.   tmpreg |= PWR_Regulator;
  164.   /* Store the new value */
  165.   PWR->CR = tmpreg;
  166.   /* Set SLEEPDEEP bit of Cortex System Control Register */
  167.   *(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;
  168.   
  169.   /* Select STOP mode entry --------------------------------------------------*/
  170.   if(PWR_STOPEntry == PWR_STOPEntry_WFI)
  171.   {   
  172.     /* Request Wait For Interrupt */
  173.     __WFI();
  174.   }
  175.   else
  176.   {
  177.     /* Request Wait For Event */
  178.     __WFE();
  179.   }
  180. }
  181. /*******************************************************************************
  182. * Function Name  : PWR_EnterSTANDBYMode
  183. * Description    : Enters STANDBY mode.
  184. * Input          : None
  185. * Output         : None
  186. * Return         : None
  187. *******************************************************************************/
  188. void PWR_EnterSTANDBYMode(void)
  189. {
  190.   /* Clear Wake-up flag */
  191.   PWR->CR |= CR_CWUF_Set;
  192.   /* Select STANDBY mode */
  193.   PWR->CR |= CR_PDDS_Set;
  194.   /* Set SLEEPDEEP bit of Cortex System Control Register */
  195.   *(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;
  196.   /* Request Wait For Interrupt */
  197.   __WFI();
  198. }
  199. /*******************************************************************************
  200. * Function Name  : PWR_GetFlagStatus
  201. * Description    : Checks whether the specified PWR flag is set or not.
  202. * Input          : - PWR_FLAG: specifies the flag to check.
  203. *                    This parameter can be one of the following values:
  204. *                       - PWR_FLAG_WU: Wake Up flag
  205. *                       - PWR_FLAG_SB: StandBy flag
  206. *                       - PWR_FLAG_PVDO: PVD Output
  207. * Output         : None
  208. * Return         : The new state of PWR_FLAG (SET or RESET).
  209. *******************************************************************************/
  210. FlagStatus PWR_GetFlagStatus(u32 PWR_FLAG)
  211. {
  212.   FlagStatus bitstatus = RESET;
  213.   /* Check the parameters */
  214.   assert_param(IS_PWR_GET_FLAG(PWR_FLAG));
  215.   
  216.   if ((PWR->CSR & PWR_FLAG) != (u32)RESET)
  217.   {
  218.     bitstatus = SET;
  219.   }
  220.   else
  221.   {
  222.     bitstatus = RESET;
  223.   }
  224.   /* Return the flag status */
  225.   return bitstatus;
  226. }
  227. /*******************************************************************************
  228. * Function Name  : PWR_ClearFlag
  229. * Description    : Clears the PWR's pending flags.
  230. * Input          : - PWR_FLAG: specifies the flag to clear.
  231. *                    This parameter can be one of the following values:
  232. *                       - PWR_FLAG_WU: Wake Up flag
  233. *                       - PWR_FLAG_SB: StandBy flag
  234. * Output         : None
  235. * Return         : None
  236. *******************************************************************************/
  237. void PWR_ClearFlag(u32 PWR_FLAG)
  238. {
  239.   /* Check the parameters */
  240.   assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG));
  241.          
  242.   PWR->CR |=  PWR_FLAG << 2;
  243. }
  244. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/