]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/ST_Library/include/stm32f7xx_hal_rcc.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / ST_Library / include / stm32f7xx_hal_rcc.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f7xx_hal_rcc.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    24-March-2015\r
7   * @brief   Header file of RCC HAL module.\r
8   ******************************************************************************\r
9   * @attention\r
10   *\r
11   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
12   *\r
13   * Redistribution and use in source and binary forms, with or without modification,\r
14   * are permitted provided that the following conditions are met:\r
15   *   1. Redistributions of source code must retain the above copyright notice,\r
16   *      this list of conditions and the following disclaimer.\r
17   *   2. Redistributions in binary form must reproduce the above copyright notice,\r
18   *      this list of conditions and the following disclaimer in the documentation\r
19   *      and/or other materials provided with the distribution.\r
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
21   *      may be used to endorse or promote products derived from this software\r
22   *      without specific prior written permission.\r
23   *\r
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
34   *\r
35   ******************************************************************************\r
36   */\r
37 \r
38 /* Define to prevent recursive inclusion -------------------------------------*/\r
39 #ifndef __STM32F7xx_HAL_RCC_H\r
40 #define __STM32F7xx_HAL_RCC_H\r
41 \r
42 #ifdef __cplusplus\r
43  extern "C" {\r
44 #endif\r
45 \r
46 /* Includes ------------------------------------------------------------------*/\r
47 #include "stm32f7xx_hal_def.h"\r
48 \r
49 /** @addtogroup STM32F7xx_HAL_Driver\r
50   * @{\r
51   */\r
52 \r
53 /** @addtogroup RCC\r
54   * @{\r
55   */\r
56 \r
57 /* Exported types ------------------------------------------------------------*/ \r
58 \r
59 /** @defgroup RCC_Exported_Types RCC Exported Types\r
60   * @{\r
61   */\r
62 \r
63 /** \r
64   * @brief  RCC PLL configuration structure definition  \r
65   */\r
66 typedef struct\r
67 {\r
68   uint32_t PLLState;   /*!< The new state of the PLL.\r
69                             This parameter can be a value of @ref RCC_PLL_Config                      */\r
70 \r
71   uint32_t PLLSource;  /*!< RCC_PLLSource: PLL entry clock source.\r
72                             This parameter must be a value of @ref RCC_PLL_Clock_Source               */           \r
73 \r
74   uint32_t PLLM;       /*!< PLLM: Division factor for PLL VCO input clock.\r
75                             This parameter must be a number between Min_Data = 2 and Max_Data = 63    */        \r
76 \r
77   uint32_t PLLN;       /*!< PLLN: Multiplication factor for PLL VCO output clock.\r
78                             This parameter must be a number between Min_Data = 192 and Max_Data = 432 */\r
79 \r
80   uint32_t PLLP;       /*!< PLLP: Division factor for main system clock (SYSCLK).\r
81                             This parameter must be a value of @ref RCC_PLLP_Clock_Divider             */\r
82 \r
83   uint32_t PLLQ;       /*!< PLLQ: Division factor for OTG FS, SDMMC and RNG clocks.\r
84                             This parameter must be a number between Min_Data = 2 and Max_Data = 15    */\r
85 \r
86 }RCC_PLLInitTypeDef;\r
87 \r
88 /**\r
89   * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition  \r
90   */\r
91 typedef struct\r
92 {\r
93   uint32_t OscillatorType;       /*!< The oscillators to be configured.\r
94                                       This parameter can be a value of @ref RCC_Oscillator_Type                   */\r
95 \r
96   uint32_t HSEState;             /*!< The new state of the HSE.\r
97                                       This parameter can be a value of @ref RCC_HSE_Config                        */\r
98 \r
99   uint32_t LSEState;             /*!< The new state of the LSE.\r
100                                       This parameter can be a value of @ref RCC_LSE_Config                        */\r
101                                           \r
102   uint32_t HSIState;             /*!< The new state of the HSI.\r
103                                       This parameter can be a value of @ref RCC_HSI_Config                        */\r
104 \r
105   uint32_t HSICalibrationValue;   /*!< The calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).\r
106                                        This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */\r
107                                \r
108   uint32_t LSIState;             /*!< The new state of the LSI.\r
109                                       This parameter can be a value of @ref RCC_LSI_Config                        */\r
110 \r
111   RCC_PLLInitTypeDef PLL;        /*!< PLL structure parameters                                                    */      \r
112 \r
113 }RCC_OscInitTypeDef;\r
114 \r
115 /**\r
116   * @brief  RCC System, AHB and APB busses clock configuration structure definition  \r
117   */\r
118 typedef struct\r
119 {\r
120   uint32_t ClockType;             /*!< The clock to be configured.\r
121                                        This parameter can be a value of @ref RCC_System_Clock_Type */\r
122   \r
123   uint32_t SYSCLKSource;          /*!< The clock source (SYSCLKS) used as system clock.\r
124                                        This parameter can be a value of @ref RCC_System_Clock_Source    */\r
125 \r
126   uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).\r
127                                        This parameter can be a value of @ref RCC_AHB_Clock_Source       */\r
128 \r
129   uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).\r
130                                        This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r
131 \r
132   uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).\r
133                                        This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r
134 \r
135 }RCC_ClkInitTypeDef;\r
136 \r
137 /**\r
138   * @}\r
139   */\r
140 \r
141 /* Exported constants --------------------------------------------------------*/\r
142 /** @defgroup RCC_Exported_Constants RCC Exported Constants\r
143   * @{\r
144   */\r
145 \r
146 /** @defgroup RCC_Oscillator_Type Oscillator Type\r
147   * @{\r
148   */\r
149 #define RCC_OSCILLATORTYPE_NONE            ((uint32_t)0x00000000)\r
150 #define RCC_OSCILLATORTYPE_HSE             ((uint32_t)0x00000001)\r
151 #define RCC_OSCILLATORTYPE_HSI             ((uint32_t)0x00000002)\r
152 #define RCC_OSCILLATORTYPE_LSE             ((uint32_t)0x00000004)\r
153 #define RCC_OSCILLATORTYPE_LSI             ((uint32_t)0x00000008)\r
154 /**\r
155   * @}\r
156   */\r
157 \r
158 /** @defgroup RCC_HSE_Config RCC HSE Config\r
159   * @{\r
160   */\r
161 #define RCC_HSE_OFF                      ((uint32_t)0x00000000)\r
162 #define RCC_HSE_ON                       RCC_CR_HSEON\r
163 #define RCC_HSE_BYPASS                   ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON))\r
164 /**\r
165   * @}\r
166   */\r
167 \r
168 /** @defgroup RCC_LSE_Config RCC LSE Config\r
169   * @{\r
170   */\r
171 #define RCC_LSE_OFF                    ((uint32_t)0x00000000)\r
172 #define RCC_LSE_ON                     RCC_BDCR_LSEON\r
173 #define RCC_LSE_BYPASS                 ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON))\r
174 /**\r
175   * @}\r
176   */\r
177 \r
178 /** @defgroup RCC_HSI_Config RCC HSI Config\r
179   * @{\r
180   */\r
181 #define RCC_HSI_OFF                    ((uint32_t)0x00000000)\r
182 #define RCC_HSI_ON                     RCC_CR_HSION\r
183 /**\r
184   * @}\r
185   */\r
186 \r
187 /** @defgroup RCC_LSI_Config RCC LSI Config\r
188   * @{\r
189   */\r
190 #define RCC_LSI_OFF                    ((uint32_t)0x00000000)\r
191 #define RCC_LSI_ON                     RCC_CSR_LSION\r
192 /**\r
193   * @}\r
194   */\r
195 \r
196 /** @defgroup RCC_PLL_Config RCC PLL Config\r
197   * @{\r
198   */\r
199 #define RCC_PLL_NONE                   ((uint32_t)0x00000000)\r
200 #define RCC_PLL_OFF                    ((uint32_t)0x00000001)\r
201 #define RCC_PLL_ON                     ((uint32_t)0x00000002)\r
202 /**\r
203   * @}\r
204   */\r
205 \r
206 /** @defgroup RCC_PLLP_Clock_Divider PLLP Clock Divider\r
207   * @{\r
208   */\r
209 #define RCC_PLLP_DIV2                  ((uint32_t)0x00000002)\r
210 #define RCC_PLLP_DIV4                  ((uint32_t)0x00000004)\r
211 #define RCC_PLLP_DIV6                  ((uint32_t)0x00000006)\r
212 #define RCC_PLLP_DIV8                  ((uint32_t)0x00000008)\r
213 /**\r
214   * @}\r
215   */\r
216 \r
217 /** @defgroup RCC_PLL_Clock_Source PLL Clock Source\r
218   * @{\r
219   */\r
220 #define RCC_PLLSOURCE_HSI                RCC_PLLCFGR_PLLSRC_HSI\r
221 #define RCC_PLLSOURCE_HSE                RCC_PLLCFGR_PLLSRC_HSE\r
222 /**\r
223   * @}\r
224   */\r
225 \r
226 /** @defgroup RCC_System_Clock_Type RCC System Clock Type\r
227   * @{\r
228   */\r
229 #define RCC_CLOCKTYPE_SYSCLK             ((uint32_t)0x00000001)\r
230 #define RCC_CLOCKTYPE_HCLK               ((uint32_t)0x00000002)\r
231 #define RCC_CLOCKTYPE_PCLK1              ((uint32_t)0x00000004)\r
232 #define RCC_CLOCKTYPE_PCLK2              ((uint32_t)0x00000008)\r
233 /**\r
234   * @}\r
235   */\r
236   \r
237 /** @defgroup RCC_System_Clock_Source RCC System Clock Source\r
238   * @{\r
239   */\r
240 #define RCC_SYSCLKSOURCE_HSI             RCC_CFGR_SW_HSI\r
241 #define RCC_SYSCLKSOURCE_HSE             RCC_CFGR_SW_HSE\r
242 #define RCC_SYSCLKSOURCE_PLLCLK          RCC_CFGR_SW_PLL\r
243 /**\r
244   * @}\r
245   */\r
246 \r
247 \r
248 /** @defgroup RCC_System_Clock_Source_Status System Clock Source Status\r
249   * @{\r
250   */\r
251 #define RCC_SYSCLKSOURCE_STATUS_HSI      RCC_CFGR_SWS_HSI   /*!< HSI used as system clock */\r
252 #define RCC_SYSCLKSOURCE_STATUS_HSE      RCC_CFGR_SWS_HSE   /*!< HSE used as system clock */\r
253 #define RCC_SYSCLKSOURCE_STATUS_PLLCLK   RCC_CFGR_SWS_PLL   /*!< PLL used as system clock */\r
254 /**\r
255   * @}\r
256   */\r
257 \r
258 /** @defgroup RCC_AHB_Clock_Source RCC AHB Clock Source\r
259   * @{\r
260   */\r
261 #define RCC_SYSCLK_DIV1                  RCC_CFGR_HPRE_DIV1\r
262 #define RCC_SYSCLK_DIV2                  RCC_CFGR_HPRE_DIV2\r
263 #define RCC_SYSCLK_DIV4                  RCC_CFGR_HPRE_DIV4\r
264 #define RCC_SYSCLK_DIV8                  RCC_CFGR_HPRE_DIV8\r
265 #define RCC_SYSCLK_DIV16                 RCC_CFGR_HPRE_DIV16\r
266 #define RCC_SYSCLK_DIV64                 RCC_CFGR_HPRE_DIV64\r
267 #define RCC_SYSCLK_DIV128                RCC_CFGR_HPRE_DIV128\r
268 #define RCC_SYSCLK_DIV256                RCC_CFGR_HPRE_DIV256\r
269 #define RCC_SYSCLK_DIV512                RCC_CFGR_HPRE_DIV512\r
270 /**\r
271   * @}\r
272   */ \r
273   \r
274 /** @defgroup RCC_APB1_APB2_Clock_Source RCC APB1/APB2 Clock Source\r
275   * @{\r
276   */\r
277 #define RCC_HCLK_DIV1                    RCC_CFGR_PPRE1_DIV1\r
278 #define RCC_HCLK_DIV2                    RCC_CFGR_PPRE1_DIV2\r
279 #define RCC_HCLK_DIV4                    RCC_CFGR_PPRE1_DIV4\r
280 #define RCC_HCLK_DIV8                    RCC_CFGR_PPRE1_DIV8\r
281 #define RCC_HCLK_DIV16                   RCC_CFGR_PPRE1_DIV16\r
282 /**\r
283   * @}\r
284   */ \r
285 \r
286 /** @defgroup RCC_RTC_Clock_Source RCC RTC Clock Source\r
287   * @{\r
288   */\r
289 #define RCC_RTCCLKSOURCE_LSE             ((uint32_t)0x00000100)\r
290 #define RCC_RTCCLKSOURCE_LSI             ((uint32_t)0x00000200)\r
291 #define RCC_RTCCLKSOURCE_HSE_DIV2        ((uint32_t)0x00020300)\r
292 #define RCC_RTCCLKSOURCE_HSE_DIV3        ((uint32_t)0x00030300)\r
293 #define RCC_RTCCLKSOURCE_HSE_DIV4        ((uint32_t)0x00040300)\r
294 #define RCC_RTCCLKSOURCE_HSE_DIV5        ((uint32_t)0x00050300)\r
295 #define RCC_RTCCLKSOURCE_HSE_DIV6        ((uint32_t)0x00060300)\r
296 #define RCC_RTCCLKSOURCE_HSE_DIV7        ((uint32_t)0x00070300)\r
297 #define RCC_RTCCLKSOURCE_HSE_DIV8        ((uint32_t)0x00080300)\r
298 #define RCC_RTCCLKSOURCE_HSE_DIV9        ((uint32_t)0x00090300)\r
299 #define RCC_RTCCLKSOURCE_HSE_DIV10       ((uint32_t)0x000A0300)\r
300 #define RCC_RTCCLKSOURCE_HSE_DIV11       ((uint32_t)0x000B0300)\r
301 #define RCC_RTCCLKSOURCE_HSE_DIV12       ((uint32_t)0x000C0300)\r
302 #define RCC_RTCCLKSOURCE_HSE_DIV13       ((uint32_t)0x000D0300)\r
303 #define RCC_RTCCLKSOURCE_HSE_DIV14       ((uint32_t)0x000E0300)\r
304 #define RCC_RTCCLKSOURCE_HSE_DIV15       ((uint32_t)0x000F0300)\r
305 #define RCC_RTCCLKSOURCE_HSE_DIV16       ((uint32_t)0x00100300)\r
306 #define RCC_RTCCLKSOURCE_HSE_DIV17       ((uint32_t)0x00110300)\r
307 #define RCC_RTCCLKSOURCE_HSE_DIV18       ((uint32_t)0x00120300)\r
308 #define RCC_RTCCLKSOURCE_HSE_DIV19       ((uint32_t)0x00130300)\r
309 #define RCC_RTCCLKSOURCE_HSE_DIV20       ((uint32_t)0x00140300)\r
310 #define RCC_RTCCLKSOURCE_HSE_DIV21       ((uint32_t)0x00150300)\r
311 #define RCC_RTCCLKSOURCE_HSE_DIV22       ((uint32_t)0x00160300)\r
312 #define RCC_RTCCLKSOURCE_HSE_DIV23       ((uint32_t)0x00170300)\r
313 #define RCC_RTCCLKSOURCE_HSE_DIV24       ((uint32_t)0x00180300)\r
314 #define RCC_RTCCLKSOURCE_HSE_DIV25       ((uint32_t)0x00190300)\r
315 #define RCC_RTCCLKSOURCE_HSE_DIV26       ((uint32_t)0x001A0300)\r
316 #define RCC_RTCCLKSOURCE_HSE_DIV27       ((uint32_t)0x001B0300)\r
317 #define RCC_RTCCLKSOURCE_HSE_DIV28       ((uint32_t)0x001C0300)\r
318 #define RCC_RTCCLKSOURCE_HSE_DIV29       ((uint32_t)0x001D0300)\r
319 #define RCC_RTCCLKSOURCE_HSE_DIV30       ((uint32_t)0x001E0300)\r
320 #define RCC_RTCCLKSOURCE_HSE_DIV31       ((uint32_t)0x001F0300)\r
321 /**\r
322   * @}\r
323   */\r
324 \r
325 \r
326 \r
327 /** @defgroup RCC_MCO_Index RCC MCO Index\r
328   * @{\r
329   */\r
330 #define RCC_MCO1                         ((uint32_t)0x00000000)\r
331 #define RCC_MCO2                         ((uint32_t)0x00000001)\r
332 /**\r
333   * @}\r
334   */\r
335 \r
336 /** @defgroup RCC_MCO1_Clock_Source RCC MCO1 Clock Source\r
337   * @{\r
338   */\r
339 #define RCC_MCO1SOURCE_HSI               ((uint32_t)0x00000000)\r
340 #define RCC_MCO1SOURCE_LSE               RCC_CFGR_MCO1_0\r
341 #define RCC_MCO1SOURCE_HSE               RCC_CFGR_MCO1_1\r
342 #define RCC_MCO1SOURCE_PLLCLK            RCC_CFGR_MCO1\r
343 /**\r
344   * @}\r
345   */\r
346 \r
347 /** @defgroup RCC_MCO2_Clock_Source RCC MCO2 Clock Source\r
348   * @{\r
349   */\r
350 #define RCC_MCO2SOURCE_SYSCLK            ((uint32_t)0x00000000)\r
351 #define RCC_MCO2SOURCE_PLLI2SCLK         RCC_CFGR_MCO2_0\r
352 #define RCC_MCO2SOURCE_HSE               RCC_CFGR_MCO2_1\r
353 #define RCC_MCO2SOURCE_PLLCLK            RCC_CFGR_MCO2\r
354 /**\r
355   * @}\r
356   */\r
357 \r
358 /** @defgroup RCC_MCOx_Clock_Prescaler RCC MCO1 Clock Prescaler\r
359   * @{\r
360   */\r
361 #define RCC_MCODIV_1                    ((uint32_t)0x00000000)\r
362 #define RCC_MCODIV_2                    RCC_CFGR_MCO1PRE_2\r
363 #define RCC_MCODIV_3                    ((uint32_t)RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_2)\r
364 #define RCC_MCODIV_4                    ((uint32_t)RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2)\r
365 #define RCC_MCODIV_5                    RCC_CFGR_MCO1PRE\r
366 /**\r
367   * @}\r
368   */\r
369 \r
370 /** @defgroup RCC_Interrupt RCC Interrupt \r
371   * @{\r
372   */\r
373 #define RCC_IT_LSIRDY                    ((uint8_t)0x01)\r
374 #define RCC_IT_LSERDY                    ((uint8_t)0x02)\r
375 #define RCC_IT_HSIRDY                    ((uint8_t)0x04)\r
376 #define RCC_IT_HSERDY                    ((uint8_t)0x08)\r
377 #define RCC_IT_PLLRDY                    ((uint8_t)0x10)\r
378 #define RCC_IT_PLLI2SRDY                 ((uint8_t)0x20)\r
379 #define RCC_IT_PLLSAIRDY                 ((uint8_t)0x40)\r
380 #define RCC_IT_CSS                       ((uint8_t)0x80)\r
381 /**\r
382   * @}\r
383   */\r
384   \r
385 /** @defgroup RCC_Flag RCC Flags\r
386   *        Elements values convention: 0XXYYYYYb\r
387   *           - YYYYY  : Flag position in the register\r
388   *           - 0XX  : Register index\r
389   *                 - 01: CR register\r
390   *                 - 10: BDCR register\r
391   *                 - 11: CSR register\r
392   * @{\r
393   */\r
394 /* Flags in the CR register */\r
395 #define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)\r
396 #define RCC_FLAG_HSERDY                  ((uint8_t)0x31)\r
397 #define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)\r
398 #define RCC_FLAG_PLLI2SRDY               ((uint8_t)0x3B)\r
399 #define RCC_FLAG_PLLSAIRDY               ((uint8_t)0x3C)\r
400 \r
401 /* Flags in the BDCR register */\r
402 #define RCC_FLAG_LSERDY                  ((uint8_t)0x41)\r
403 \r
404 /* Flags in the CSR register */\r
405 #define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)\r
406 #define RCC_FLAG_BORRST                  ((uint8_t)0x79)\r
407 #define RCC_FLAG_PINRST                  ((uint8_t)0x7A)\r
408 #define RCC_FLAG_PORRST                  ((uint8_t)0x7B)\r
409 #define RCC_FLAG_SFTRST                  ((uint8_t)0x7C)\r
410 #define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)\r
411 #define RCC_FLAG_WWDGRST                 ((uint8_t)0x7E)\r
412 #define RCC_FLAG_LPWRRST                 ((uint8_t)0x7F)\r
413 /**\r
414   * @}\r
415   */ \r
416 \r
417 /** @defgroup RCC_LSEDrive_Configuration RCC LSE Drive configurations\r
418   * @{\r
419   */\r
420 #define RCC_LSEDRIVE_LOW                 ((uint32_t)0x00000000)\r
421 #define RCC_LSEDRIVE_MEDIUMLOW           RCC_BDCR_LSEDRV_1\r
422 #define RCC_LSEDRIVE_MEDIUMHIGH          RCC_BDCR_LSEDRV_0\r
423 #define RCC_LSEDRIVE_HIGH                RCC_BDCR_LSEDRV\r
424 /**\r
425   * @}\r
426   */\r
427   \r
428 /**\r
429   * @}\r
430   */\r
431    \r
432 /* Exported macro ------------------------------------------------------------*/\r
433 /** @defgroup RCC_Exported_Macros RCC Exported Macros\r
434   * @{\r
435   */\r
436 \r
437 /** @defgroup RCC_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable\r
438   * @brief  Enable or disable the AHB1 peripheral clock.\r
439   * @note   After reset, the peripheral clock (used for registers read/write access)\r
440   *         is disabled and the application software has to enable this clock before \r
441   *         using it.   \r
442   * @{\r
443   */\r
444 #define __HAL_RCC_CRC_CLK_ENABLE()   do { \\r
445                                         __IO uint32_t tmpreg; \\r
446                                         SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\\r
447                                         /* Delay after an RCC peripheral clock enabling */ \\r
448                                         tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\\r
449                                         UNUSED(tmpreg); \\r
450                                       } while(0)\r
451                                                                           \r
452 #define __HAL_RCC_DMA1_CLK_ENABLE()   do { \\r
453                                         __IO uint32_t tmpreg; \\r
454                                         SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\\r
455                                         /* Delay after an RCC peripheral clock enabling */ \\r
456                                         tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\\r
457                                         UNUSED(tmpreg); \\r
458                                       } while(0)\r
459 \r
460 #define __HAL_RCC_CRC_CLK_DISABLE()          (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN))\r
461 #define __HAL_RCC_DMA1_CLK_DISABLE()         (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA1EN))\r
462 \r
463 /**\r
464   * @}\r
465   */\r
466 \r
467 /** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable\r
468   * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r
469   * @note   After reset, the peripheral clock (used for registers read/write access)\r
470   *         is disabled and the application software has to enable this clock before\r
471   *         using it.\r
472   * @{\r
473   */\r
474 #define __HAL_RCC_WWDG_CLK_ENABLE()   do { \\r
475                                         __IO uint32_t tmpreg; \\r
476                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\\r
477                                         /* Delay after an RCC peripheral clock enabling */ \\r
478                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\\r
479                                         UNUSED(tmpreg); \\r
480                                       } while(0)\r
481                                                                           \r
482 #define __HAL_RCC_PWR_CLK_ENABLE()   do { \\r
483                                         __IO uint32_t tmpreg; \\r
484                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\\r
485                                         /* Delay after an RCC peripheral clock enabling */ \\r
486                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\\r
487                                         UNUSED(tmpreg); \\r
488                                       } while(0)                                                                          \r
489 \r
490 #define __HAL_RCC_WWDG_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))\r
491 #define __HAL_RCC_PWR_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN)) \r
492 /**\r
493   * @}\r
494   */\r
495 \r
496 /** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable                                      \r
497   * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r
498   * @note   After reset, the peripheral clock (used for registers read/write access)\r
499   *         is disabled and the application software has to enable this clock before \r
500   *         using it.\r
501   * @{\r
502   */\r
503 #define __HAL_RCC_SYSCFG_CLK_ENABLE()   do { \\r
504                                         __IO uint32_t tmpreg; \\r
505                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\\r
506                                         /* Delay after an RCC peripheral clock enabling */ \\r
507                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\\r
508                                         UNUSED(tmpreg); \\r
509                                       } while(0)\r
510                                                                           \r
511 #define __HAL_RCC_SYSCFG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN))\r
512 \r
513 /**\r
514   * @}\r
515   */\r
516   \r
517 /** @defgroup RCC_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status\r
518   * @brief  Get the enable or disable status of the AHB1 peripheral clock.\r
519   * @note   After reset, the peripheral clock (used for registers read/write access)\r
520   *         is disabled and the application software has to enable this clock before\r
521   *         using it.\r
522   * @{\r
523   */\r
524 #define __HAL_RCC_CRC_IS_CLK_ENABLED()         ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET)  \r
525 #define __HAL_RCC_DMA1_IS_CLK_ENABLED()        ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA1EN)) != RESET)\r
526 \r
527 #define __HAL_RCC_CRC_IS_CLK_DISABLED()        ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET)\r
528 #define __HAL_RCC_DMA1_IS_CLK_DISABLED()       ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA1EN)) == RESET)\r
529 /**\r
530   * @}\r
531   */\r
532   \r
533 /** @defgroup RCC_APB1_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable  Status\r
534   * @brief  Get the enable or disable status of the APB1 peripheral clock.\r
535   * @note   After reset, the peripheral clock (used for registers read/write access)\r
536   *         is disabled and the application software has to enable this clock before\r
537   *         using it.\r
538   * @{\r
539   */\r
540 #define __HAL_RCC_WWDG_IS_CLK_ENABLED()        ((RCC->APB1ENR1 & (RCC_APB1ENR1_WWDGEN)) != RESET)\r
541 #define __HAL_RCC_PWR_IS_CLK_ENABLED()         ((RCC->APB1ENR1 & (RCC_APB1ENR1_PWREN)) != RESET)\r
542 \r
543 #define __HAL_RCC_WWDG_IS_CLK_DISABLED()       ((RCC->APB1ENR1 & (RCC_APB1ENR1_WWDGEN)) == RESET)\r
544 #define __HAL_RCC_PWR_IS_CLK_DISABLED()        ((RCC->APB1ENR1 & (RCC_APB1ENR1_PWREN)) == RESET)\r
545 /**\r
546   * @}\r
547   */  \r
548 \r
549 /** @defgroup RCC_APB2_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r
550   * @brief  EGet the enable or disable status of the APB2 peripheral clock.\r
551   * @note   After reset, the peripheral clock (used for registers read/write access)\r
552   *         is disabled and the application software has to enable this clock before\r
553   *         using it.\r
554   * @{\r
555   */\r
556 #define __HAL_RCC_SYSCFG_IS_CLK_ENABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != RESET)\r
557 #define __HAL_RCC_SYSCFG_IS_CLK_DISABLED()     ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == RESET)\r
558 /**\r
559   * @}\r
560   */  \r
561   \r
562 /** @defgroup RCC_Peripheral_Clock_Force_Release RCC Peripheral Clock Force Release\r
563   * @brief  Force or release AHB peripheral reset.\r
564   * @{\r
565   */  \r
566 #define __HAL_RCC_AHB1_FORCE_RESET()    (RCC->AHB1RSTR = 0xFFFFFFFF)\r
567 #define __HAL_RCC_CRC_FORCE_RESET()     (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST))\r
568 #define __HAL_RCC_DMA1_FORCE_RESET()    (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA1RST))\r
569 \r
570 #define __HAL_RCC_AHB1_RELEASE_RESET()  (RCC->AHB1RSTR = 0x00)\r
571 #define __HAL_RCC_CRC_RELEASE_RESET()   (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST))\r
572 #define __HAL_RCC_DMA1_RELEASE_RESET()  (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA1RST))\r
573 /**\r
574   * @}\r
575   */\r
576 \r
577 /** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset \r
578   * @brief  Force or release APB1 peripheral reset.\r
579   * @{\r
580   */\r
581 #define __HAL_RCC_APB1_FORCE_RESET()     (RCC->APB1RSTR = 0xFFFFFFFF)  \r
582 #define __HAL_RCC_WWDG_FORCE_RESET()     (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))\r
583 #define __HAL_RCC_PWR_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))\r
584 \r
585 #define __HAL_RCC_APB1_RELEASE_RESET()   (RCC->APB1RSTR = 0x00) \r
586 #define __HAL_RCC_WWDG_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))\r
587 #define __HAL_RCC_PWR_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))\r
588 /**\r
589   * @}\r
590   */\r
591 \r
592 /** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset \r
593   * @brief  Force or release APB2 peripheral reset.\r
594   * @{\r
595   */\r
596 #define __HAL_RCC_APB2_FORCE_RESET()     (RCC->APB2RSTR = 0xFFFFFFFF)  \r
597 #define __HAL_RCC_SYSCFG_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST))\r
598 \r
599 #define __HAL_RCC_APB2_RELEASE_RESET()   (RCC->APB2RSTR = 0x00)\r
600 #define __HAL_RCC_SYSCFG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST))\r
601 \r
602 /**\r
603   * @}\r
604   */\r
605 \r
606 /** @defgroup RCC_Peripheral_Clock_Sleep_Enable_Disable RCC Peripheral Clock Sleep Enable Disable\r
607   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
608   *         power consumption.\r
609   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
610   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
611   * @{\r
612   */\r
613 #define __HAL_RCC_CRC_CLK_SLEEP_ENABLE()      (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN))\r
614 #define __HAL_RCC_DMA1_CLK_SLEEP_ENABLE()     (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA1LPEN))\r
615 \r
616 #define __HAL_RCC_CRC_CLK_SLEEP_DISABLE()     (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN))\r
617 #define __HAL_RCC_DMA1_CLK_SLEEP_DISABLE()    (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA1LPEN))\r
618 \r
619 /** @brief  Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode.\r
620   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
621   *         power consumption.\r
622   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
623   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
624   */\r
625 #define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE()    (RCC->APB1LPENR |= (RCC_APB1LPENR_WWDGLPEN))\r
626 #define __HAL_RCC_PWR_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_PWRLPEN))\r
627 \r
628 #define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE()   (RCC->APB1LPENR &= ~(RCC_APB1LPENR_WWDGLPEN))\r
629 #define __HAL_RCC_PWR_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_PWRLPEN))\r
630 \r
631 /** @brief  Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode.\r
632   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
633   *         power consumption.\r
634   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
635   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
636   */\r
637 #define __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE()  (RCC->APB2LPENR |= (RCC_APB2LPENR_SYSCFGLPEN))\r
638 #define __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SYSCFGLPEN))\r
639 \r
640 /**\r
641   * @}\r
642   */\r
643   \r
644 /** @defgroup RCC_AHB1_Clock_Sleep_Enable_Disable_Status AHB1 Peripheral Clock Sleep Enable Disable Status\r
645   * @brief  Get the enable or disable status of the AHB1 peripheral clock during Low Power (Sleep) mode.\r
646   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
647   *         power consumption.\r
648   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
649   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
650   * @{\r
651   */\r
652 #define __HAL_RCC_CRC_IS_CLK_SLEEP_ENABLED()     ((RCC->AHB1SMENR & (RCC_AHB1SMENR_CRCSMEN)) != RESET)\r
653 #define __HAL_RCC_DMA1_IS_CLK_SLEEP_ENABLED()    ((RCC->AHB1SMENR & (RCC_AHB1SMENR_DMA1SMEN)) != RESET)\r
654 \r
655 #define __HAL_RCC_CRC_IS_CLK_SLEEP_DISABLED()    ((RCC->AHB1SMENR & (RCC_AHB1SMENR_CRCSMEN)) == RESET)\r
656 #define __HAL_RCC_DMA1_IS_CLK_SLEEP_DISABLED()   ((RCC->AHB1SMENR & (RCC_AHB1SMENR_DMA1SMEN)) == RESET)\r
657 /**\r
658   * @}\r
659   */\r
660 \r
661 /** @defgroup RCC_APB1_Clock_Sleep_Enable_Disable_Status APB1 Peripheral Clock Sleep Enable Disable Status\r
662   * @brief  Get the enable or disable status of the APB1 peripheral clock during Low Power (Sleep) mode.\r
663   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
664   *         power consumption.\r
665   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
666   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
667   * @{\r
668   */\r
669 #define __HAL_RCC_WWDG_IS_CLK_SLEEP_ENABLED()      ((RCC->APB1SMENR1 & (RCC_APB1SMENR1_WWDGSMEN)) != RESET)\r
670 #define __HAL_RCC_PWR_IS_CLK_SLEEP_ENABLED()       ((RCC->APB1SMENR1 & (RCC_APB1SMENR1_PWRSMEN)) != RESET)\r
671 \r
672 #define __HAL_RCC_WWDG_IS_CLK_SLEEP_DISABLED()     ((RCC->APB1SMENR1 & (RCC_APB1SMENR1_WWDGSMEN)) == RESET)\r
673 #define __HAL_RCC_PWR_IS_CLK_SLEEP_DISABLED()      ((RCC->APB1SMENR1 & (RCC_APB1SMENR1_PWRSMEN)) == RESET)\r
674 /**\r
675   * @}\r
676   */\r
677 \r
678 /** @defgroup RCC_APB2_Clock_Sleep_Enable_Disable_Status APB2 Peripheral Clock Sleep Enable Disable Status\r
679   * @brief  Get the enable or disable status of the APB2 peripheral clock during Low Power (Sleep) mode.\r
680   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce\r
681   *         power consumption.\r
682   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.\r
683   * @note   By default, all peripheral clocks are enabled during SLEEP mode.\r
684   * @{\r
685   */\r
686 #define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_ENABLED()    ((RCC->APB2SMENR & (RCC_APB2SMENR_SYSCFGSMEN)) != RESET)\r
687 #define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_DISABLED()   ((RCC->APB2SMENR & (RCC_APB2SMENR_SYSCFGSMEN)) == RESET)\r
688 /**\r
689   * @}\r
690   */  \r
691 \r
692 /** @defgroup RCC_HSI_Configuration HSI Configuration\r
693   * @{   \r
694   */ \r
695                                       \r
696 /** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).\r
697   * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.\r
698   *         It is used (enabled by hardware) as system clock source after startup\r
699   *         from Reset, wakeup from STOP and STANDBY mode, or in case of failure\r
700   *         of the HSE used directly or indirectly as system clock (if the Clock\r
701   *         Security System CSS is enabled).             \r
702   * @note   HSI can not be stopped if it is used as system clock source. In this case,\r
703   *         you have to select another source of the system clock then stop the HSI.  \r
704   * @note   After enabling the HSI, the application software should wait on HSIRDY\r
705   *         flag to be set indicating that HSI clock is stable and can be used as\r
706   *         system clock source.  \r
707   * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator\r
708   *         clock cycles.  \r
709   */\r
710 #define __HAL_RCC_HSI_ENABLE() (RCC->CR |= (RCC_CR_HSION))\r
711 #define __HAL_RCC_HSI_DISABLE() (RCC->CR &= ~(RCC_CR_HSION))\r
712 \r
713 /** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.\r
714   * @note   The calibration is used to compensate for the variations in voltage\r
715   *         and temperature that influence the frequency of the internal HSI RC.\r
716   * @param  __HSICALIBRATIONVALUE__: specifies the calibration trimming value.\r
717   *         This parameter must be a number between 0 and 0x1F.\r
718   */\r
719 #define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(__HSICALIBRATIONVALUE__) (MODIFY_REG(RCC->CR,\\r
720         RCC_CR_HSITRIM, (uint32_t)(__HSICALIBRATIONVALUE__) << POSITION_VAL(RCC_CR_HSITRIM)))\r
721 /**\r
722   * @}\r
723   */\r
724 \r
725 /** @defgroup RCC_LSI_Configuration LSI Configuration\r
726   * @{   \r
727   */ \r
728 \r
729 /** @brief  Macros to enable or disable the Internal Low Speed oscillator (LSI).\r
730   * @note   After enabling the LSI, the application software should wait on \r
731   *         LSIRDY flag to be set indicating that LSI clock is stable and can\r
732   *         be used to clock the IWDG and/or the RTC.\r
733   * @note   LSI can not be disabled if the IWDG is running.\r
734   * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator\r
735   *         clock cycles. \r
736   */\r
737 #define __HAL_RCC_LSI_ENABLE()  (RCC->CSR |= (RCC_CSR_LSION))\r
738 #define __HAL_RCC_LSI_DISABLE() (RCC->CSR &= ~(RCC_CSR_LSION))\r
739 /**\r
740   * @}\r
741   */\r
742 \r
743 /** @defgroup RCC_HSE_Configuration HSE Configuration\r
744   * @{   \r
745   */ \r
746 /**\r
747   * @brief  Macro to configure the External High Speed oscillator (__HSE__).\r
748   * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application\r
749   *         software should wait on HSERDY flag to be set indicating that HSE clock\r
750   *         is stable and can be used to clock the PLL and/or system clock.\r
751   * @note   HSE state can not be changed if it is used directly or through the\r
752   *         PLL as system clock. In this case, you have to select another source\r
753   *         of the system clock then change the HSE state (ex. disable it).\r
754   * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.  \r
755   * @note   This function reset the CSSON bit, so if the clock security system(CSS)\r
756   *         was previously enabled you have to enable it again after calling this\r
757   *         function.    \r
758   * @param  __STATE__: specifies the new state of the HSE.\r
759   *         This parameter can be one of the following values:\r
760   *            @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after\r
761   *                              6 HSE oscillator clock cycles.\r
762   *            @arg RCC_HSE_ON: turn ON the HSE oscillator.\r
763   *            @arg RCC_HSE_BYPASS: HSE oscillator bypassed with external clock.\r
764   */\r
765 #define __HAL_RCC_HSE_CONFIG(__STATE__) \\r
766                     do {                                     \\r
767                       CLEAR_BIT(RCC->CR, RCC_CR_HSEON);      \\r
768                       if((__STATE__) == RCC_HSE_ON)          \\r
769                       {                                      \\r
770                         CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);   \\r
771                         SET_BIT(RCC->CR, RCC_CR_HSEON);      \\r
772                       }                                      \\r
773                       else if((__STATE__) == RCC_HSE_BYPASS) \\r
774                       {                                      \\r
775                         SET_BIT(RCC->CR, RCC_CR_HSEBYP);     \\r
776                         SET_BIT(RCC->CR, RCC_CR_HSEON);      \\r
777                       }                                      \\r
778                       else                                   \\r
779                       {                                      \\r
780                         CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);   \\r
781                         CLEAR_BIT(RCC->CR, RCC_CR_HSEON);    \\r
782                         }                                    \\r
783                     } while(0)\r
784 /**\r
785   * @}\r
786   */\r
787 \r
788 /** @defgroup RCC_LSE_Configuration LSE Configuration\r
789   * @{   \r
790   */\r
791 \r
792 /**\r
793   * @brief  Macro to configure the External Low Speed oscillator (LSE).\r
794   * @note   Transition LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. \r
795   *         User should request a transition to LSE Off first and then LSE On or LSE Bypass.  \r
796   * @note   As the LSE is in the Backup domain and write access is denied to\r
797   *         this domain after reset, you have to enable write access using \r
798   *         HAL_PWR_EnableBkUpAccess() function before to configure the LSE\r
799   *         (to be done once after reset).  \r
800   * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application\r
801   *         software should wait on LSERDY flag to be set indicating that LSE clock\r
802   *         is stable and can be used to clock the RTC.\r
803   * @param  __STATE__: specifies the new state of the LSE.\r
804   *         This parameter can be one of the following values:\r
805   *            @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after\r
806   *                              6 LSE oscillator clock cycles.\r
807   *            @arg RCC_LSE_ON: turn ON the LSE oscillator.\r
808   *            @arg RCC_LSE_BYPASS: LSE oscillator bypassed with external clock.\r
809   */\r
810 #define __HAL_RCC_LSE_CONFIG(__STATE__) \\r
811                     do {                                       \\r
812                       CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);    \\r
813                       if((__STATE__) == RCC_LSE_ON)            \\r
814                       {                                        \\r
815                         CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \\r
816                         SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);    \\r
817                       }                                        \\r
818                       else if((__STATE__) == RCC_LSE_BYPASS)   \\r
819                       {                                        \\r
820                         SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);   \\r
821                         SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);    \\r
822                       }                                        \\r
823                       else                                     \\r
824                       {                                        \\r
825                         CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \\r
826                         CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);  \\r
827                       }                                        \\r
828                     } while(0)\r
829 /**\r
830   * @}\r
831   */\r
832 \r
833 /** @defgroup RCC_Internal_RTC_Clock_Configuration RTC Clock Configuration\r
834   * @{   \r
835   */\r
836 \r
837 /** @brief  Macros to enable or disable the RTC clock.\r
838   * @note   These macros must be used only after the RTC clock source was selected.\r
839   */\r
840 #define __HAL_RCC_RTC_ENABLE()  (RCC->BDCR |= (RCC_BDCR_RTCEN))\r
841 #define __HAL_RCC_RTC_DISABLE() (RCC->BDCR &= ~(RCC_BDCR_RTCEN))\r
842 \r
843 /** @brief  Macros to configure the RTC clock (RTCCLK).\r
844   * @note   As the RTC clock configuration bits are in the Backup domain and write\r
845   *         access is denied to this domain after reset, you have to enable write\r
846   *         access using the Power Backup Access macro before to configure\r
847   *         the RTC clock source (to be done once after reset).    \r
848   * @note   Once the RTC clock is configured it can't be changed unless the  \r
849   *         Backup domain is reset using __HAL_RCC_BackupReset_RELEASE() macro, or by\r
850   *         a Power On Reset (POR).\r
851   * @param  __RTCCLKSource__: specifies the RTC clock source.\r
852   *         This parameter can be one of the following values:\r
853   *            @arg RCC_RTCCLKSOURCE_LSE: LSE selected as RTC clock.\r
854   *            @arg RCC_RTCCLKSOURCE_LSI: LSI selected as RTC clock.\r
855   *            @arg RCC_RTCCLKSOURCE_HSE_DIVx: HSE clock divided by x selected\r
856   *                                            as RTC clock, where x:[2,31]\r
857   * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to\r
858   *         work in STOP and STANDBY modes, and can be used as wakeup source.\r
859   *         However, when the HSE clock is used as RTC clock source, the RTC\r
860   *         cannot be used in STOP and STANDBY modes.    \r
861   * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as\r
862   *         RTC clock source).\r
863   */\r
864 #define __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__) (((__RTCCLKSource__) & RCC_BDCR_RTCSEL) == RCC_BDCR_RTCSEL) ?    \\r
865                                                  MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, ((__RTCCLKSource__) & 0xFFFFCFF)) : CLEAR_BIT(RCC->CFGR, RCC_CFGR_RTCPRE)\r
866                                                    \r
867 #define __HAL_RCC_RTC_CONFIG(__RTCCLKSource__) do { __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__);    \\r
868                                                     RCC->BDCR |= ((__RTCCLKSource__) & 0x00000FFF);  \\r
869                                                    } while (0)\r
870 \r
871 /** @brief  Macros to force or release the Backup domain reset.\r
872   * @note   This function resets the RTC peripheral (including the backup registers)\r
873   *         and the RTC clock source selection in RCC_CSR register.\r
874   * @note   The BKPSRAM is not affected by this reset.   \r
875   */\r
876 #define __HAL_RCC_BACKUPRESET_FORCE()   (RCC->BDCR |= (RCC_BDCR_BDRST))\r
877 #define __HAL_RCC_BACKUPRESET_RELEASE() (RCC->BDCR &= ~(RCC_BDCR_BDRST))\r
878 /**\r
879   * @}\r
880   */\r
881 \r
882 /** @defgroup RCC_PLL_Configuration PLL Configuration\r
883   * @{   \r
884   */\r
885 \r
886 /** @brief  Macros to enable or disable the main PLL.\r
887   * @note   After enabling the main PLL, the application software should wait on \r
888   *         PLLRDY flag to be set indicating that PLL clock is stable and can\r
889   *         be used as system clock source.\r
890   * @note   The main PLL can not be disabled if it is used as system clock source\r
891   * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.\r
892   */\r
893 #define __HAL_RCC_PLL_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLLON)\r
894 #define __HAL_RCC_PLL_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLLON)\r
895 \r
896 \r
897 /** @brief  Macro to configure the main PLL clock source, multiplication and division factors.\r
898   * @note   This function must be used only when the main PLL is disabled.\r
899   * @param  __RCC_PLLSource__: specifies the PLL entry clock source.\r
900   *         This parameter can be one of the following values:\r
901   *            @arg RCC_PLLSOURCE_HSI: HSI oscillator clock selected as PLL clock entry\r
902   *            @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry\r
903   * @note   This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S.  \r
904   * @param  __PLLM__: specifies the division factor for PLL VCO input clock\r
905   *         This parameter must be a number between Min_Data = 2 and Max_Data = 63.\r
906   * @note   You have to set the PLLM parameter correctly to ensure that the VCO input\r
907   *         frequency ranges from 1 to 2 MHz. It is recommended to select a frequency\r
908   *         of 2 MHz to limit PLL jitter.\r
909   * @param  __PLLN__: specifies the multiplication factor for PLL VCO output clock\r
910   *         This parameter must be a number between Min_Data = 192 and Max_Data = 432.\r
911   * @note   You have to set the PLLN parameter correctly to ensure that the VCO\r
912   *         output frequency is between 192 and 432 MHz.\r
913   * @param  __PLLP__: specifies the division factor for main system clock (SYSCLK)\r
914   *         This parameter must be a number in the range {2, 4, 6, or 8}.\r
915   * @note   You have to set the PLLP parameter correctly to not exceed 200 MHz on\r
916   *         the System clock frequency.\r
917   * @param  __PLLQ__: specifies the division factor for OTG FS, SDMMC and RNG clocks\r
918   *         This parameter must be a number between Min_Data = 2 and Max_Data = 15.\r
919   * @note   If the USB OTG FS is used in your application, you have to set the\r
920   *         PLLQ parameter correctly to have 48 MHz clock for the USB. However,\r
921   *         the SDMMC and RNG need a frequency lower than or equal to 48 MHz to work\r
922   *         correctly.\r
923   */\r
924 #define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__)\\r
925                             (RCC->PLLCFGR = (0x20000000 | (__PLLM__) | ((__PLLN__) << POSITION_VAL(RCC_PLLCFGR_PLLN)) | \\r
926                             ((((__PLLP__) >> 1) -1) << POSITION_VAL(RCC_PLLCFGR_PLLP)) | (__RCC_PLLSource__) | \\r
927                             ((__PLLQ__) << POSITION_VAL(RCC_PLLCFGR_PLLQ))))\r
928 /**\r
929   * @}\r
930   */\r
931 \r
932 /** @defgroup RCC_PLL_I2S_Configuration PLL I2S Configuration\r
933   * @{   \r
934   */\r
935 \r
936 /** @brief  Macro to configure the I2S clock source (I2SCLK).\r
937   * @note   This function must be called before enabling the I2S APB clock.\r
938   * @param  __SOURCE__: specifies the I2S clock source.\r
939   *         This parameter can be one of the following values:\r
940   *            @arg RCC_I2SCLKSOURCE_PLLI2S: PLLI2S clock used as I2S clock source.\r
941   *            @arg RCC_I2SCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin\r
942   *                                       used as I2S clock source.\r
943   */\r
944 #define __HAL_RCC_I2S_CONFIG(__SOURCE__) do {RCC->CFGR &= ~(RCC_CFGR_I2SSRC); \\r
945                                           RCC->CFGR |= (__SOURCE__); \\r
946                                          }while(0)\r
947 \r
948 /** @brief Macros to enable or disable the PLLI2S. \r
949   * @note  The PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r
950   */\r
951 #define __HAL_RCC_PLLI2S_ENABLE() (RCC->CR |= (RCC_CR_PLLI2SON))\r
952 #define __HAL_RCC_PLLI2S_DISABLE() (RCC->CR &= ~(RCC_CR_PLLI2SON))\r
953 /**\r
954   * @}\r
955   */\r
956 \r
957 /** @defgroup RCC_Get_Clock_source Get Clock source\r
958   * @{   \r
959   */\r
960 /**\r
961   * @brief Macro to configure the system clock source.\r
962   * @param __RCC_SYSCLKSOURCE__: specifies the system clock source.\r
963   * This parameter can be one of the following values:\r
964   *              - RCC_SYSCLKSOURCE_HSI: HSI oscillator is used as system clock source.\r
965   *              - RCC_SYSCLKSOURCE_HSE: HSE oscillator is used as system clock source.\r
966   *              - RCC_SYSCLKSOURCE_PLLCLK: PLL output is used as system clock source.\r
967   */\r
968 #define __HAL_RCC_SYSCLK_CONFIG(__RCC_SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__RCC_SYSCLKSOURCE__))\r
969 \r
970 /** @brief  Macro to get the clock source used as system clock.\r
971   * @retval The clock source used as system clock. The returned value can be one\r
972   *         of the following:\r
973   *              - RCC_SYSCLKSOURCE_STATUS_HSI: HSI used as system clock.\r
974   *              - RCC_SYSCLKSOURCE_STATUS_HSE: HSE used as system clock.\r
975   *              - RCC_SYSCLKSOURCE_STATUS_PLLCLK: PLL used as system clock.\r
976   */     \r
977 #define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(RCC->CFGR & RCC_CFGR_SWS))\r
978 \r
979 /**\r
980   * @brief  Macro to configures the External Low Speed oscillator (LSE) drive capability.\r
981   * @note   As the LSE is in the Backup domain and write access is denied to\r
982   *         this domain after reset, you have to enable write access using\r
983   *         HAL_PWR_EnableBkUpAccess() function before to configure the LSE\r
984   *         (to be done once after reset).\r
985   * @param  __RCC_LSEDRIVE__: specifies the new state of the LSE drive capability.\r
986   *          This parameter can be one of the following values:\r
987   *            @arg RCC_LSEDRIVE_LOW: LSE oscillator low drive capability.\r
988   *            @arg RCC_LSEDRIVE_MEDIUMLOW: LSE oscillator medium low drive capability.\r
989   *            @arg RCC_LSEDRIVE_MEDIUMHIGH: LSE oscillator medium high drive capability.\r
990   *            @arg RCC_LSEDRIVE_HIGH: LSE oscillator high drive capability.\r
991   * @retval None\r
992   */\r
993 #define __HAL_RCC_LSEDRIVE_CONFIG(__RCC_LSEDRIVE__) \\r
994                   (MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, (uint32_t)(__RCC_LSEDRIVE__) ))\r
995 \r
996 /** @brief  Macro to get the oscillator used as PLL clock source.\r
997   * @retval The oscillator used as PLL clock source. The returned value can be one\r
998   *         of the following:\r
999   *              - RCC_PLLSOURCE_HSI: HSI oscillator is used as PLL clock source.\r
1000   *              - RCC_PLLSOURCE_HSE: HSE oscillator is used as PLL clock source.\r
1001   */\r
1002 #define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC))\r
1003 /**\r
1004   * @}\r
1005   */\r
1006 \r
1007 /** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management\r
1008   * @brief macros to manage the specified RCC Flags and interrupts.\r
1009   * @{\r
1010   */\r
1011 \r
1012 /** @brief  Enable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to enable\r
1013   *         the selected interrupts).\r
1014   * @param  __INTERRUPT__: specifies the RCC interrupt sources to be enabled.\r
1015   *         This parameter can be any combination of the following values:\r
1016   *            @arg RCC_IT_LSIRDY: LSI ready interrupt.\r
1017   *            @arg RCC_IT_LSERDY: LSE ready interrupt.\r
1018   *            @arg RCC_IT_HSIRDY: HSI ready interrupt.\r
1019   *            @arg RCC_IT_HSERDY: HSE ready interrupt.\r
1020   *            @arg RCC_IT_PLLRDY: Main PLL ready interrupt.\r
1021   *            @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt.\r
1022   */\r
1023 #define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))\r
1024 \r
1025 /** @brief Disable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to disable \r
1026   *        the selected interrupts).\r
1027   * @param  __INTERRUPT__: specifies the RCC interrupt sources to be disabled.\r
1028   *         This parameter can be any combination of the following values:\r
1029   *            @arg RCC_IT_LSIRDY: LSI ready interrupt.\r
1030   *            @arg RCC_IT_LSERDY: LSE ready interrupt.\r
1031   *            @arg RCC_IT_HSIRDY: HSI ready interrupt.\r
1032   *            @arg RCC_IT_HSERDY: HSE ready interrupt.\r
1033   *            @arg RCC_IT_PLLRDY: Main PLL ready interrupt.\r
1034   *            @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt.\r
1035   */\r
1036 #define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= ~(__INTERRUPT__))\r
1037 \r
1038 /** @brief  Clear the RCC's interrupt pending bits (Perform Byte access to RCC_CIR[23:16]\r
1039   *         bits to clear the selected interrupt pending bits.\r
1040   * @param  __INTERRUPT__: specifies the interrupt pending bit to clear.\r
1041   *         This parameter can be any combination of the following values:\r
1042   *            @arg RCC_IT_LSIRDY: LSI ready interrupt.\r
1043   *            @arg RCC_IT_LSERDY: LSE ready interrupt.\r
1044   *            @arg RCC_IT_HSIRDY: HSI ready interrupt.\r
1045   *            @arg RCC_IT_HSERDY: HSE ready interrupt.\r
1046   *            @arg RCC_IT_PLLRDY: Main PLL ready interrupt.\r
1047   *            @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt.  \r
1048   *            @arg RCC_IT_CSS: Clock Security System interrupt\r
1049   */\r
1050 #define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))\r
1051 \r
1052 /** @brief  Check the RCC's interrupt has occurred or not.\r
1053   * @param  __INTERRUPT__: specifies the RCC interrupt source to check.\r
1054   *         This parameter can be one of the following values:\r
1055   *            @arg RCC_IT_LSIRDY: LSI ready interrupt.\r
1056   *            @arg RCC_IT_LSERDY: LSE ready interrupt.\r
1057   *            @arg RCC_IT_HSIRDY: HSI ready interrupt.\r
1058   *            @arg RCC_IT_HSERDY: HSE ready interrupt.\r
1059   *            @arg RCC_IT_PLLRDY: Main PLL ready interrupt.\r
1060   *            @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt.\r
1061   *            @arg RCC_IT_CSS: Clock Security System interrupt\r
1062   * @retval The new state of __INTERRUPT__ (TRUE or FALSE).\r
1063   */\r
1064 #define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))\r
1065 \r
1066 /** @brief Set RMVF bit to clear the reset flags: RCC_FLAG_PINRST, RCC_FLAG_PORRST, \r
1067   *        RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST and RCC_FLAG_LPWRRST.\r
1068   */\r
1069 #define __HAL_RCC_CLEAR_RESET_FLAGS() (RCC->CSR |= RCC_CSR_RMVF)\r
1070 \r
1071 /** @brief  Check RCC flag is set or not.\r
1072   * @param  __FLAG__: specifies the flag to check.\r
1073   *         This parameter can be one of the following values:\r
1074   *            @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready.\r
1075   *            @arg RCC_FLAG_HSERDY: HSE oscillator clock ready.\r
1076   *            @arg RCC_FLAG_PLLRDY: Main PLL clock ready.\r
1077   *            @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready.\r
1078   *            @arg RCC_FLAG_LSERDY: LSE oscillator clock ready.\r
1079   *            @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready.\r
1080   *            @arg RCC_FLAG_BORRST: POR/PDR or BOR reset.\r
1081   *            @arg RCC_FLAG_PINRST: Pin reset.\r
1082   *            @arg RCC_FLAG_PORRST: POR/PDR reset.\r
1083   *            @arg RCC_FLAG_SFTRST: Software reset.\r
1084   *            @arg RCC_FLAG_IWDGRST: Independent Watchdog reset.\r
1085   *            @arg RCC_FLAG_WWDGRST: Window Watchdog reset.\r
1086   *            @arg RCC_FLAG_LPWRRST: Low Power reset.\r
1087   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
1088   */\r
1089 #define RCC_FLAG_MASK  ((uint8_t)0x1F)\r
1090 #define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5) == 1)? RCC->CR :((((__FLAG__) >> 5) == 2) ? RCC->BDCR :((((__FLAG__) >> 5) == 3)? RCC->CSR :RCC->CIR))) & ((uint32_t)1 << ((__FLAG__) & RCC_FLAG_MASK)))!= 0)? 1 : 0)\r
1091 \r
1092 /**\r
1093   * @}\r
1094   */\r
1095      \r
1096 /**\r
1097   * @}\r
1098   */\r
1099 \r
1100 /* Include RCC HAL Extension module */\r
1101 #include "stm32f7xx_hal_rcc_ex.h"\r
1102 \r
1103 /* Exported functions --------------------------------------------------------*/\r
1104  /** @addtogroup RCC_Exported_Functions\r
1105   * @{\r
1106   */\r
1107 \r
1108 /** @addtogroup RCC_Exported_Functions_Group1\r
1109   * @{\r
1110   */                             \r
1111 /* Initialization and de-initialization functions  ******************************/\r
1112 void HAL_RCC_DeInit(void);\r
1113 HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r
1114 HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);\r
1115 /**\r
1116   * @}\r
1117   */\r
1118 \r
1119 /** @addtogroup RCC_Exported_Functions_Group2\r
1120   * @{\r
1121   */\r
1122 /* Peripheral Control functions  ************************************************/\r
1123 void     HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);\r
1124 void     HAL_RCC_EnableCSS(void);\r
1125 void     HAL_RCC_DisableCSS(void);\r
1126 uint32_t HAL_RCC_GetSysClockFreq(void);\r
1127 uint32_t HAL_RCC_GetHCLKFreq(void);\r
1128 uint32_t HAL_RCC_GetPCLK1Freq(void);\r
1129 uint32_t HAL_RCC_GetPCLK2Freq(void);\r
1130 void     HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r
1131 void     HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency);\r
1132 \r
1133 /* CSS NMI IRQ handler */\r
1134 void HAL_RCC_NMI_IRQHandler(void);\r
1135 \r
1136 /* User Callbacks in non blocking mode (IT mode) */ \r
1137 void HAL_RCC_CSSCallback(void);\r
1138 /**\r
1139   * @}\r
1140   */\r
1141 \r
1142 /**\r
1143   * @}\r
1144   */\r
1145 \r
1146 /* Private types -------------------------------------------------------------*/\r
1147 /* Private variables ---------------------------------------------------------*/\r
1148 /* Private constants ---------------------------------------------------------*/\r
1149 /** @defgroup RCC_Private_Constants RCC Private Constants\r
1150   * @{\r
1151   */\r
1152 #define HSE_TIMEOUT_VALUE          HSE_STARTUP_TIMEOUT\r
1153 #define HSI_TIMEOUT_VALUE          ((uint32_t)100)  /* 100 ms */\r
1154 #define LSI_TIMEOUT_VALUE          ((uint32_t)100)  /* 100 ms */\r
1155 #define PLL_TIMEOUT_VALUE          ((uint32_t)100)  /* 100 ms */\r
1156 #define CLOCKSWITCH_TIMEOUT_VALUE  ((uint32_t)5000) /* 5 s    */ \r
1157 \r
1158 /** @defgroup RCC_BitAddress_Alias RCC BitAddress Alias\r
1159   * @brief RCC registers bit address alias\r
1160   * @{\r
1161   */\r
1162 /* CIR register byte 2 (Bits[15:8]) base address */\r
1163 #define RCC_CIR_BYTE1_ADDRESS         ((uint32_t)(RCC_BASE + 0x0C + 0x01))\r
1164 \r
1165 /* CIR register byte 3 (Bits[23:16]) base address */\r
1166 #define RCC_CIR_BYTE2_ADDRESS         ((uint32_t)(RCC_BASE + 0x0C + 0x02))\r
1167 \r
1168 #define RCC_DBP_TIMEOUT_VALUE      ((uint32_t)100)\r
1169 #define RCC_LSE_TIMEOUT_VALUE      ((uint32_t)5000)\r
1170 /**\r
1171   * @}\r
1172   */\r
1173 /**\r
1174   * @}\r
1175   */\r
1176 \r
1177 /* Private macros ------------------------------------------------------------*/\r
1178 /** @addtogroup RCC_Private_Macros RCC Private Macros\r
1179   * @{\r
1180   */\r
1181     \r
1182 /** @defgroup RCC_IS_RCC_Definitions RCC Private macros to check input parameters\r
1183   * @{\r
1184   */  \r
1185 #define IS_RCC_OSCILLATORTYPE(OSCILLATOR) ((OSCILLATOR) <= 15)\r
1186 \r
1187 #define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \\r
1188                          ((HSE) == RCC_HSE_BYPASS))\r
1189 \r
1190 #define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \\r
1191                          ((LSE) == RCC_LSE_BYPASS))\r
1192 \r
1193 #define IS_RCC_HSI(HSI) (((HSI) == RCC_HSI_OFF) || ((HSI) == RCC_HSI_ON))\r
1194 \r
1195 #define IS_RCC_LSI(LSI) (((LSI) == RCC_LSI_OFF) || ((LSI) == RCC_LSI_ON))\r
1196 \r
1197 #define IS_RCC_PLL(PLL) (((PLL) == RCC_PLL_NONE) ||((PLL) == RCC_PLL_OFF) || ((PLL) == RCC_PLL_ON))\r
1198 \r
1199 #define IS_RCC_PLLSOURCE(SOURCE) (((SOURCE) == RCC_PLLSOURCE_HSI) || \\r
1200                                   ((SOURCE) == RCC_PLLSOURCE_HSE))\r
1201 \r
1202 #define IS_RCC_SYSCLKSOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_HSI) || \\r
1203                                      ((SOURCE) == RCC_SYSCLKSOURCE_HSE) || \\r
1204                                      ((SOURCE) == RCC_SYSCLKSOURCE_PLLCLK))\r
1205 #define IS_RCC_PLLM_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 63))\r
1206 \r
1207 #define IS_RCC_PLLN_VALUE(VALUE) ((192 <= (VALUE)) && ((VALUE) <= 432))\r
1208 \r
1209 #define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == RCC_PLLP_DIV2) || ((VALUE) == RCC_PLLP_DIV4) || \\r
1210                                   ((VALUE) == RCC_PLLP_DIV6) || ((VALUE) == RCC_PLLP_DIV8))\r
1211 #define IS_RCC_PLLQ_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 15))\r
1212 \r
1213 #define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_DIV1)   || ((HCLK) == RCC_SYSCLK_DIV2)   || \\r
1214                            ((HCLK) == RCC_SYSCLK_DIV4)   || ((HCLK) == RCC_SYSCLK_DIV8)   || \\r
1215                            ((HCLK) == RCC_SYSCLK_DIV16)  || ((HCLK) == RCC_SYSCLK_DIV64)  || \\r
1216                            ((HCLK) == RCC_SYSCLK_DIV128) || ((HCLK) == RCC_SYSCLK_DIV256) || \\r
1217                            ((HCLK) == RCC_SYSCLK_DIV512))\r
1218 \r
1219 #define IS_RCC_CLOCKTYPE(CLK) ((1 <= (CLK)) && ((CLK) <= 15))\r
1220 \r
1221 #define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_DIV1) || ((PCLK) == RCC_HCLK_DIV2) || \\r
1222                            ((PCLK) == RCC_HCLK_DIV4) || ((PCLK) == RCC_HCLK_DIV8) || \\r
1223                            ((PCLK) == RCC_HCLK_DIV16))\r
1224 \r
1225 #define IS_RCC_MCO(MCOX) (((MCOX) == RCC_MCO1) || ((MCOX) == RCC_MCO2))\r
1226 \r
1227 \r
1228 #define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_HSI) || ((SOURCE) == RCC_MCO1SOURCE_LSE) || \\r
1229                                    ((SOURCE) == RCC_MCO1SOURCE_HSE) || ((SOURCE) == RCC_MCO1SOURCE_PLLCLK))\r
1230 \r
1231 #define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2SOURCE_SYSCLK) || ((SOURCE) == RCC_MCO2SOURCE_PLLI2SCLK)|| \\r
1232                                    ((SOURCE) == RCC_MCO2SOURCE_HSE)    || ((SOURCE) == RCC_MCO2SOURCE_PLLCLK))\r
1233 \r
1234 #define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1)  || ((DIV) == RCC_MCODIV_2) || \\r
1235                              ((DIV) == RCC_MCODIV_3) || ((DIV) == RCC_MCODIV_4) || \\r
1236                              ((DIV) == RCC_MCODIV_5)) \r
1237 #define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F)\r
1238 \r
1239 #define IS_RCC_RTCCLKSOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSOURCE_LSE) || ((SOURCE) == RCC_RTCCLKSOURCE_LSI) || \\r
1240                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV2) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV3) || \\r
1241                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV4) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV5) || \\r
1242                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV6) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV7) || \\r
1243                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV8) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV9) || \\r
1244                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV10) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV11) || \\r
1245                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV12) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV13) || \\r
1246                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV14) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV15) || \\r
1247                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV16) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV17) || \\r
1248                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV18) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV19) || \\r
1249                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV20) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV21) || \\r
1250                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV22) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV23) || \\r
1251                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV24) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV25) || \\r
1252                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV26) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV27) || \\r
1253                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV28) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV29) || \\r
1254                                      ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV30) || ((SOURCE) == RCC_RTCCLKSOURCE_HSE_DIV31))\r
1255 \r
1256 \r
1257 #define IS_RCC_LSE_DRIVE(DRIVE) (((DRIVE) == RCC_LSEDRIVE_LOW)        || \\r
1258                                      ((DRIVE) == RCC_LSEDRIVE_MEDIUMLOW)  || \\r
1259                                      ((DRIVE) == RCC_LSEDRIVE_MEDIUMHIGH) || \\r
1260                                      ((DRIVE) == RCC_LSEDRIVE_HIGH))\r
1261 /**\r
1262   * @}\r
1263   */\r
1264 \r
1265 /**\r
1266   * @}\r
1267   */\r
1268 \r
1269 /**\r
1270   * @}\r
1271   */ \r
1272 \r
1273 /**\r
1274   * @}\r
1275   */\r
1276 \r
1277 #ifdef __cplusplus\r
1278 }\r
1279 #endif\r
1280 \r
1281 #endif /* __STM32F7xx_HAL_RCC_H */\r
1282 \r
1283 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r