]> git.piffa.net Git - arduino/blob - sheets/gyro/GY-52 Three-axis gyroscope sending data /Three-axis gyroscope sending data/GY-52 Test program/STM32-CODE/serial port output MPU-3050/serial/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c
first commit
[arduino] / sheets / gyro / GY-52 Three-axis gyroscope sending data / Three-axis gyroscope sending data / GY-52 Test program / STM32-CODE / serial port output MPU-3050 / serial / Libraries / STM32F10x_StdPeriph_Driver / src / stm32f10x_pwr.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_pwr.c\r
4   * @author  MCD Application Team\r
5   * @version V3.1.2\r
6   * @date    09/28/2009\r
7   * @brief   This file provides all the PWR firmware functions.\r
8   ******************************************************************************\r
9   * @copy\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>\r
19   */ \r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_pwr.h"\r
23 #include "stm32f10x_rcc.h"\r
24 \r
25 /** @addtogroup STM32F10x_StdPeriph_Driver\r
26   * @{\r
27   */\r
28 \r
29 /** @defgroup PWR \r
30   * @brief PWR driver modules\r
31   * @{\r
32   */ \r
33 \r
34 /** @defgroup PWR_Private_TypesDefinitions\r
35   * @{\r
36   */\r
37 \r
38 /**\r
39   * @}\r
40   */\r
41 \r
42 /** @defgroup PWR_Private_Defines\r
43   * @{\r
44   */\r
45 \r
46 /* --------- PWR registers bit address in the alias region ---------- */\r
47 #define PWR_OFFSET               (PWR_BASE - PERIPH_BASE)\r
48 \r
49 /* --- CR Register ---*/\r
50 \r
51 /* Alias word address of DBP bit */\r
52 #define CR_OFFSET                (PWR_OFFSET + 0x00)\r
53 #define DBP_BitNumber            0x08\r
54 #define CR_DBP_BB                (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4))\r
55 \r
56 /* Alias word address of PVDE bit */\r
57 #define PVDE_BitNumber           0x04\r
58 #define CR_PVDE_BB               (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4))\r
59 \r
60 /* --- CSR Register ---*/\r
61 \r
62 /* Alias word address of EWUP bit */\r
63 #define CSR_OFFSET               (PWR_OFFSET + 0x04)\r
64 #define EWUP_BitNumber           0x08\r
65 #define CSR_EWUP_BB              (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4))\r
66 \r
67 /* ------------------ PWR registers bit mask ------------------------ */\r
68 \r
69 /* CR register bit mask */\r
70 #define CR_PDDS_Set              ((uint32_t)0x00000002)\r
71 #define CR_DS_Mask               ((uint32_t)0xFFFFFFFC)\r
72 #define CR_CWUF_Set              ((uint32_t)0x00000004)\r
73 #define CR_PLS_Mask              ((uint32_t)0xFFFFFF1F)\r
74 \r
75 /* --------- Cortex System Control register bit mask ---------------- */\r
76 \r
77 /* Cortex System Control register address */\r
78 #define SCB_SysCtrl              ((uint32_t)0xE000ED10)\r
79 \r
80 /* SLEEPDEEP bit mask */\r
81 #define SysCtrl_SLEEPDEEP_Set    ((uint32_t)0x00000004)\r
82 /**\r
83   * @}\r
84   */\r
85 \r
86 /** @defgroup PWR_Private_Macros\r
87   * @{\r
88   */\r
89 \r
90 /**\r
91   * @}\r
92   */\r
93 \r
94 /** @defgroup PWR_Private_Variables\r
95   * @{\r
96   */\r
97 \r
98 /**\r
99   * @}\r
100   */\r
101 \r
102 /** @defgroup PWR_Private_FunctionPrototypes\r
103   * @{\r
104   */\r
105 \r
106 /**\r
107   * @}\r
108   */\r
109 \r
110 /** @defgroup PWR_Private_Functions\r
111   * @{\r
112   */\r
113 \r
114 /**\r
115   * @brief  Deinitializes the PWR peripheral registers to their default reset values.\r
116   * @param  None\r
117   * @retval None\r
118   */\r
119 void PWR_DeInit(void)\r
120 {\r
121   RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE);\r
122   RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE);\r
123 }\r
124 \r
125 /**\r
126   * @brief  Enables or disables access to the RTC and backup registers.\r
127   * @param  NewState: new state of the access to the RTC and backup registers.\r
128   *   This parameter can be: ENABLE or DISABLE.\r
129   * @retval None\r
130   */\r
131 void PWR_BackupAccessCmd(FunctionalState NewState)\r
132 {\r
133   /* Check the parameters */\r
134   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
135   *(__IO uint32_t *) CR_DBP_BB = (uint32_t)NewState;\r
136 }\r
137 \r
138 /**\r
139   * @brief  Enables or disables the Power Voltage Detector(PVD).\r
140   * @param  NewState: new state of the PVD.\r
141   *   This parameter can be: ENABLE or DISABLE.\r
142   * @retval None\r
143   */\r
144 void PWR_PVDCmd(FunctionalState NewState)\r
145 {\r
146   /* Check the parameters */\r
147   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
148   *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)NewState;\r
149 }\r
150 \r
151 /**\r
152   * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).\r
153   * @param  PWR_PVDLevel: specifies the PVD detection level\r
154   *   This parameter can be one of the following values:\r
155   *     @arg PWR_PVDLevel_2V2: PVD detection level set to 2.2V\r
156   *     @arg PWR_PVDLevel_2V3: PVD detection level set to 2.3V\r
157   *     @arg PWR_PVDLevel_2V4: PVD detection level set to 2.4V\r
158   *     @arg PWR_PVDLevel_2V5: PVD detection level set to 2.5V\r
159   *     @arg PWR_PVDLevel_2V6: PVD detection level set to 2.6V\r
160   *     @arg PWR_PVDLevel_2V7: PVD detection level set to 2.7V\r
161   *     @arg PWR_PVDLevel_2V8: PVD detection level set to 2.8V\r
162   *     @arg PWR_PVDLevel_2V9: PVD detection level set to 2.9V\r
163   * @retval None\r
164   */\r
165 void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)\r
166 {\r
167   uint32_t tmpreg = 0;\r
168   /* Check the parameters */\r
169   assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel));\r
170   tmpreg = PWR->CR;\r
171   /* Clear PLS[7:5] bits */\r
172   tmpreg &= CR_PLS_Mask;\r
173   /* Set PLS[7:5] bits according to PWR_PVDLevel value */\r
174   tmpreg |= PWR_PVDLevel;\r
175   /* Store the new value */\r
176   PWR->CR = tmpreg;\r
177 }\r
178 \r
179 /**\r
180   * @brief  Enables or disables the WakeUp Pin functionality.\r
181   * @param  NewState: new state of the WakeUp Pin functionality.\r
182   *   This parameter can be: ENABLE or DISABLE.\r
183   * @retval None\r
184   */\r
185 void PWR_WakeUpPinCmd(FunctionalState NewState)\r
186 {\r
187   /* Check the parameters */\r
188   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
189   *(__IO uint32_t *) CSR_EWUP_BB = (uint32_t)NewState;\r
190 }\r
191 \r
192 /**\r
193   * @brief  Enters STOP mode.\r
194   * @param  PWR_Regulator: specifies the regulator state in STOP mode.\r
195   *   This parameter can be one of the following values:\r
196   *     @arg PWR_Regulator_ON: STOP mode with regulator ON\r
197   *     @arg PWR_Regulator_LowPower: STOP mode with regulator in low power mode\r
198   * @param  PWR_STOPEntry: specifies if STOP mode in entered with WFI or WFE instruction.\r
199   *   This parameter can be one of the following values:\r
200   *     @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction\r
201   *     @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction\r
202   * @retval None\r
203   */\r
204 void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)\r
205 {\r
206   uint32_t tmpreg = 0;\r
207   /* Check the parameters */\r
208   assert_param(IS_PWR_REGULATOR(PWR_Regulator));\r
209   assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));\r
210   \r
211   /* Select the regulator state in STOP mode ---------------------------------*/\r
212   tmpreg = PWR->CR;\r
213   /* Clear PDDS and LPDS bits */\r
214   tmpreg &= CR_DS_Mask;\r
215   /* Set LPDS bit according to PWR_Regulator value */\r
216   tmpreg |= PWR_Regulator;\r
217   /* Store the new value */\r
218   PWR->CR = tmpreg;\r
219   /* Set SLEEPDEEP bit of Cortex System Control Register */\r
220   *(__IO uint32_t *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;\r
221   \r
222   /* Select STOP mode entry --------------------------------------------------*/\r
223   if(PWR_STOPEntry == PWR_STOPEntry_WFI)\r
224   {   \r
225     /* Request Wait For Interrupt */\r
226     __WFI();\r
227   }\r
228   else\r
229   {\r
230     /* Request Wait For Event */\r
231     __WFE();\r
232   }\r
233 }\r
234 \r
235 /**\r
236   * @brief  Enters STANDBY mode.\r
237   * @param  None\r
238   * @retval None\r
239   */\r
240 void PWR_EnterSTANDBYMode(void)\r
241 {\r
242   /* Clear Wake-up flag */\r
243   PWR->CR |= CR_CWUF_Set;\r
244   /* Select STANDBY mode */\r
245   PWR->CR |= CR_PDDS_Set;\r
246   /* Set SLEEPDEEP bit of Cortex System Control Register */\r
247   *(__IO uint32_t *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;\r
248 /* This option is used to ensure that store operations are completed */\r
249 #if defined ( __CC_ARM   )\r
250   __force_stores();\r
251 #endif\r
252   /* Request Wait For Interrupt */\r
253   __WFI();\r
254 }\r
255 \r
256 /**\r
257   * @brief  Checks whether the specified PWR flag is set or not.\r
258   * @param  PWR_FLAG: specifies the flag to check.\r
259   *   This parameter can be one of the following values:\r
260   *     @arg PWR_FLAG_WU: Wake Up flag\r
261   *     @arg PWR_FLAG_SB: StandBy flag\r
262   *     @arg PWR_FLAG_PVDO: PVD Output\r
263   * @retval The new state of PWR_FLAG (SET or RESET).\r
264   */\r
265 FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG)\r
266 {\r
267   FlagStatus bitstatus = RESET;\r
268   /* Check the parameters */\r
269   assert_param(IS_PWR_GET_FLAG(PWR_FLAG));\r
270   \r
271   if ((PWR->CSR & PWR_FLAG) != (uint32_t)RESET)\r
272   {\r
273     bitstatus = SET;\r
274   }\r
275   else\r
276   {\r
277     bitstatus = RESET;\r
278   }\r
279   /* Return the flag status */\r
280   return bitstatus;\r
281 }\r
282 \r
283 /**\r
284   * @brief  Clears the PWR's pending flags.\r
285   * @param  PWR_FLAG: specifies the flag to clear.\r
286   *   This parameter can be one of the following values:\r
287   *     @arg PWR_FLAG_WU: Wake Up flag\r
288   *     @arg PWR_FLAG_SB: StandBy flag\r
289   * @retval None\r
290   */\r
291 void PWR_ClearFlag(uint32_t PWR_FLAG)\r
292 {\r
293   /* Check the parameters */\r
294   assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG));\r
295          \r
296   PWR->CR |=  PWR_FLAG << 2;\r
297 }\r
298 \r
299 /**\r
300   * @}\r
301   */\r
302 \r
303 /**\r
304   * @}\r
305   */\r
306 \r
307 /**\r
308   * @}\r
309   */\r
310 \r
311 /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/\r