]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_M4_AMP_STM32H745I_Discovery_IAR/ST_code/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc_ex.h
Add M7/M4 AMP demo.
[freertos] / FreeRTOS / Demo / CORTEX_M7_M4_AMP_STM32H745I_Discovery_IAR / ST_code / STM32H7xx_HAL_Driver / Inc / stm32h7xx_hal_rcc_ex.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32h7xx_hal_rcc_ex.h\r
4   * @author  MCD Application Team\r
5   * @brief   Header file of RCC HAL Extension module.\r
6   ******************************************************************************\r
7   * @attention\r
8   *\r
9   * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics.\r
10   * All rights reserved.</center></h2>\r
11   *\r
12   * This software component is licensed by ST under BSD 3-Clause license,\r
13   * the "License"; You may not use this file except in compliance with the\r
14   * License. You may obtain a copy of the License at:\r
15   *                        opensource.org/licenses/BSD-3-Clause\r
16   *\r
17   ******************************************************************************\r
18   */\r
19 \r
20 /* Define to prevent recursive inclusion -------------------------------------*/\r
21 #ifndef STM32H7xx_HAL_RCC_EX_H\r
22 #define STM32H7xx_HAL_RCC_EX_H\r
23 \r
24 #ifdef __cplusplus\r
25  extern "C" {\r
26 #endif\r
27 \r
28 /* Includes ------------------------------------------------------------------*/\r
29 #include "stm32h7xx_hal_def.h"\r
30 \r
31 /** @addtogroup STM32H7xx_HAL_Driver\r
32   * @{\r
33   */\r
34 \r
35 /** @addtogroup RCCEx\r
36   * @{\r
37   */\r
38 \r
39 /* Exported types ------------------------------------------------------------*/\r
40 /** @defgroup RCCEx_Exported_Types RCCEx Exported Types\r
41   * @{\r
42   */\r
43 \r
44 /**\r
45   * @brief  PLL2 Clock structure definition\r
46   */\r
47 typedef struct\r
48 {\r
49 \r
50   uint32_t PLL2M;       /*!< PLL2M: Division factor for PLL2 VCO input clock.\r
51                              This parameter must be a number between Min_Data = 1 and Max_Data = 63    */\r
52 \r
53   uint32_t PLL2N;       /*!< PLL2N: Multiplication factor for PLL2 VCO output clock.\r
54                              This parameter must be a number between Min_Data = 4 and Max_Data = 512   */\r
55 \r
56   uint32_t PLL2P;       /*!< PLL2P: Division factor for system clock.\r
57                              This parameter must be a number between Min_Data = 2 and Max_Data = 128\r
58                              odd division factors are not allowed                                      */\r
59 \r
60   uint32_t PLL2Q;        /*!< PLL2Q: Division factor for peripheral clocks.\r
61                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */\r
62 \r
63   uint32_t PLL2R;        /*!< PLL2R: Division factor for peripheral clocks.\r
64                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */\r
65   uint32_t PLL2RGE;      /*!<PLL2RGE: PLL2 clock Input range\r
66                           This parameter must be a value of @ref RCC_PLL2_VCI_Range                    */\r
67   uint32_t PLL2VCOSEL;   /*!<PLL2VCOSEL: PLL2 clock Output range\r
68                           This parameter must be a value of @ref RCC_PLL2_VCO_Range                    */\r
69 \r
70   uint32_t PLL2FRACN;    /*!<PLL2FRACN: Specifies Fractional Part Of The Multiplication Factor for\r
71                             PLL2 VCO It should be a value between 0 and 8191                           */\r
72 }RCC_PLL2InitTypeDef;\r
73 \r
74 \r
75 /**\r
76   * @brief  PLL3 Clock structure definition\r
77   */\r
78 typedef struct\r
79 {\r
80 \r
81   uint32_t PLL3M;       /*!< PLL3M: Division factor for PLL3 VCO input clock.\r
82                              This parameter must be a number between Min_Data = 1 and Max_Data = 63    */\r
83 \r
84   uint32_t PLL3N;       /*!< PLL3N: Multiplication factor for PLL3 VCO output clock.\r
85                              This parameter must be a number between Min_Data = 4 and Max_Data = 512   */\r
86 \r
87   uint32_t PLL3P;       /*!< PLL3P: Division factor for system clock.\r
88                              This parameter must be a number between Min_Data = 2 and Max_Data = 128\r
89                              odd division factors are not allowed                                      */\r
90 \r
91   uint32_t PLL3Q;        /*!< PLL3Q: Division factor for peripheral clocks.\r
92                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */\r
93 \r
94   uint32_t PLL3R;        /*!< PLL3R: Division factor for peripheral clocks.\r
95                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */\r
96   uint32_t PLL3RGE;      /*!<PLL3RGE: PLL3 clock Input range\r
97                           This parameter must be a value of @ref RCC_PLL3_VCI_Range                    */\r
98   uint32_t PLL3VCOSEL;   /*!<PLL3VCOSEL: PLL3 clock Output range\r
99                           This parameter must be a value of @ref RCC_PLL3_VCO_Range                    */\r
100 \r
101   uint32_t PLL3FRACN;    /*!<PLL3FRACN: Specifies Fractional Part Of The Multiplication Factor for\r
102                             PLL3 VCO It should be a value between 0 and 8191                           */\r
103 }RCC_PLL3InitTypeDef;\r
104 \r
105 /**\r
106   * @brief  RCC PLL1 Clocks structure definition\r
107   */\r
108 typedef struct\r
109 {\r
110   uint32_t PLL1_P_Frequency;\r
111   uint32_t PLL1_Q_Frequency;\r
112   uint32_t PLL1_R_Frequency;\r
113 }PLL1_ClocksTypeDef;\r
114 \r
115 /**\r
116   * @brief  RCC PLL2 Clocks structure definition\r
117   */\r
118 typedef struct\r
119 {\r
120   uint32_t PLL2_P_Frequency;\r
121   uint32_t PLL2_Q_Frequency;\r
122   uint32_t PLL2_R_Frequency;\r
123 }PLL2_ClocksTypeDef;\r
124 \r
125 /**\r
126   * @brief  RCC PLL3 Clocks structure definition\r
127   */\r
128 typedef struct\r
129 {\r
130   uint32_t PLL3_P_Frequency;\r
131   uint32_t PLL3_Q_Frequency;\r
132   uint32_t PLL3_R_Frequency;\r
133 }PLL3_ClocksTypeDef;\r
134 \r
135 \r
136 /**\r
137   * @brief  RCC extended clocks structure definition\r
138   */\r
139 typedef struct\r
140 {\r
141   uint32_t PeriphClockSelection;   /*!< The Extended Clock to be configured.\r
142                                         This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */\r
143 \r
144   RCC_PLL2InitTypeDef PLL2;        /*!< PLL2structure parameters.\r
145                                         This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */\r
146 \r
147   RCC_PLL3InitTypeDef PLL3;        /*!< PLL3 structure parameters.\r
148                                         This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */\r
149 \r
150   uint32_t FmcClockSelection;     /*!< Specifies FMC clock source\r
151                                         This parameter can be a value of @ref RCCEx_FMC_Clock_Source     */\r
152 \r
153   uint32_t QspiClockSelection;    /*!< Specifies QSPI clock source\r
154                                         This parameter can be a value of @ref RCCEx_QSPI_Clock_Source    */\r
155 #if defined(DSI)\r
156   uint32_t DsiClockSelection;     /*!< Specifies DSI clock source\r
157                                      This parameter can be a value of @ref RCCEx_DSI_Clock_Source        */\r
158 #endif /*DSI*/\r
159 \r
160   uint32_t SdmmcClockSelection;    /*!< Specifies SDMMC clock source\r
161                                         This parameter can be a value of @ref RCCEx_SDMMC_Clock_Source   */\r
162 \r
163   uint32_t CkperClockSelection;   /*!< Specifies CKPER clock source\r
164                                         This parameter can be a value of @ref RCCEx_CLKP_Clock_Source   */\r
165 \r
166   uint32_t Sai1ClockSelection;     /*!< Specifies SAI1 clock source\r
167                                         This parameter can be a value of @ref RCCEx_SAI1_Clock_Source    */\r
168 \r
169   uint32_t Sai23ClockSelection;     /*!< Specifies SAI2/3 clock source\r
170                                          This parameter can be a value of @ref RCCEx_SAI23_Clock_Source    */\r
171 \r
172   uint32_t Spi123ClockSelection;     /*!< Specifies SPI1/2/3 clock source\r
173                                           This parameter can be a value of @ref RCCEx_SPI123_Clock_Source    */\r
174 \r
175   uint32_t Spi45ClockSelection;     /*!< Specifies SPI4/5 clock source\r
176                                          This parameter can be a value of @ref RCCEx_SPI45_Clock_Source    */\r
177 \r
178   uint32_t SpdifrxClockSelection;   /*!< Specifies SPDIFRX Clock clock source\r
179                                         This parameter can be a value of @ref RCCEx_SPDIFRX_Clock_Source */\r
180 \r
181   uint32_t Dfsdm1ClockSelection;    /*!< Specifies DFSDM1 Clock clock source\r
182                                         This parameter can be a value of @ref RCCEx_DFSDM1_Clock_Source  */\r
183 #if defined(FDCAN1) || defined(FDCAN2)\r
184   uint32_t FdcanClockSelection;   /*!< Specifies FDCAN Clock clock source\r
185                                         This parameter can be a value of @ref RCCEx_FDCAN_Clock_Source   */\r
186 #endif /*FDCAN1 || FDCAN2*/\r
187 \r
188   uint32_t Swpmi1ClockSelection;   /*!< Specifies SWPMI1 Clock clock source\r
189                                         This parameter can be a value of @ref RCCEx_SWPMI1_Clock_Source  */\r
190 \r
191   uint32_t Usart234578ClockSelection;   /*!< Specifies USART2/3/4/5/7/8 clock source\r
192                                              This parameter can be a value of @ref RCCEx_USART234578_Clock_Source  */\r
193 \r
194   uint32_t Usart16ClockSelection;  /*!< Specifies USART1/6 clock source\r
195                                         This parameter can be a value of @ref RCCEx_USART16_Clock_Source  */\r
196 \r
197    uint32_t RngClockSelection;      /*!< Specifies RNG clock source\r
198                                         This parameter can be a value of @ref RCCEx_RNG_Clock_Source     */\r
199 \r
200   uint32_t I2c123ClockSelection;   /*!< Specifies I2C1/2/3 clock source\r
201                                         This parameter can be a value of @ref RCCEx_I2C123_Clock_Source    */\r
202 \r
203   uint32_t UsbClockSelection;      /*!< Specifies USB clock source\r
204                                         This parameter can be a value of @ref RCCEx_USB_Clock_Source     */\r
205 \r
206   uint32_t CecClockSelection;     /*!< Specifies CEC clock source\r
207                                         This parameter can be a value of @ref RCCEx_CEC_Clock_Source     */\r
208 \r
209   uint32_t Lptim1ClockSelection;   /*!< Specifies LPTIM1 clock source\r
210                                         This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source  */\r
211 \r
212   uint32_t Lpuart1ClockSelection;  /*!< Specifies LPUART1 clock source\r
213                                         This parameter can be a value of @ref RCCEx_LPUART1_Clock_Source */\r
214 \r
215   uint32_t I2c4ClockSelection;     /*!< Specifies I2C4 clock source\r
216                                         This parameter can be a value of @ref RCCEx_I2C4_Clock_Source    */\r
217 \r
218   uint32_t Lptim2ClockSelection;   /*!< Specifies LPTIM2 clock source\r
219                                         This parameter can be a value of @ref RCCEx_LPTIM2_Clock_Source  */\r
220 \r
221   uint32_t Lptim345ClockSelection;   /*!< Specifies LPTIM3/4/5 clock source\r
222                                           This parameter can be a value of @ref RCCEx_LPTIM345_Clock_Source  */\r
223 \r
224   uint32_t AdcClockSelection;      /*!< Specifies ADC interface clock source\r
225                                         This parameter can be a value of @ref RCCEx_ADC_Clock_Source     */\r
226 \r
227   uint32_t Sai4AClockSelection;     /*!< Specifies SAI4A clock source\r
228                                         This parameter can be a value of @ref RCCEx_SAI4A_Clock_Source   */\r
229 \r
230   uint32_t Sai4BClockSelection;     /*!< Specifies SAI4B clock source\r
231                                         This parameter can be a value of @ref RCCEx_SAI4B_Clock_Source   */\r
232 \r
233   uint32_t Spi6ClockSelection;     /*!< Specifies SPI6 clock source\r
234                                         This parameter can be a value of @ref RCCEx_SPI6_Clock_Source    */\r
235 \r
236   uint32_t RTCClockSelection;      /*!< Specifies RTC Clock clock source\r
237                                         This parameter can be a value of @ref RCC_RTC_Clock_Source       */\r
238 \r
239   uint32_t Hrtim1ClockSelection;      /*!< Specifies HRTIM1 Clock clock source\r
240                                         This parameter can be a value of @ref RCCEx_HRTIM1_Clock_Source   */\r
241   uint32_t TIMPresSelection;       /*!< Specifies TIM Clock Prescalers Selection.\r
242                                        This parameter can be a value of @ref RCCEx_TIM_Prescaler_Selection */\r
243 }RCC_PeriphCLKInitTypeDef;\r
244 \r
245 \r
246 /**\r
247   * @brief RCC_CRS Init structure definition\r
248   */\r
249 typedef struct\r
250 {\r
251   uint32_t Prescaler;             /*!< Specifies the division factor of the SYNC signal.\r
252                                      This parameter can be a value of @ref RCCEx_CRS_SynchroDivider  */\r
253 \r
254   uint32_t Source;                /*!< Specifies the SYNC signal source.\r
255                                      This parameter can be a value of @ref RCCEx_CRS_SynchroSource   */\r
256 \r
257   uint32_t Polarity;              /*!< Specifies the input polarity for the SYNC signal source.\r
258                                      This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */\r
259 \r
260   uint32_t ReloadValue;           /*!< Specifies the value to be loaded in the frequency error counter with each SYNC event.\r
261                                       It can be calculated in using macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)\r
262                                      This parameter must be a number between 0 and 0xFFFF or a value of @ref RCCEx_CRS_ReloadValueDefault .*/\r
263 \r
264   uint32_t ErrorLimitValue;       /*!< Specifies the value to be used to evaluate the captured frequency error value.\r
265                                      This parameter must be a number between 0 and 0xFF or a value of @ref RCCEx_CRS_ErrorLimitDefault */\r
266 \r
267   uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator.\r
268                                      This parameter must be a number between 0 and 0x3F or a value of @ref RCCEx_CRS_HSI48CalibrationDefault */\r
269 \r
270 }RCC_CRSInitTypeDef;\r
271 \r
272 /**\r
273   * @brief RCC_CRS Synchronization structure definition\r
274   */\r
275 typedef struct\r
276 {\r
277   uint32_t ReloadValue;           /*!< Specifies the value loaded in the Counter reload value.\r
278                                      This parameter must be a number between 0 and 0xFFFF */\r
279 \r
280   uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming.\r
281                                      This parameter must be a number between 0 and 0x3F */\r
282 \r
283   uint32_t FreqErrorCapture;      /*!< Specifies the value loaded in the .FECAP, the frequency error counter\r
284                                                                     value latched in the time of the last SYNC event.\r
285                                     This parameter must be a number between 0 and 0xFFFF */\r
286 \r
287   uint32_t FreqErrorDirection;    /*!< Specifies the value loaded in the .FEDIR, the counting direction of the\r
288                                                                     frequency error counter latched in the time of the last SYNC event.\r
289                                                                     It shows whether the actual frequency is below or above the target.\r
290                                     This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/\r
291 \r
292 }RCC_CRSSynchroInfoTypeDef;\r
293 \r
294 /**\r
295   * @}\r
296   */\r
297 \r
298 \r
299 /* Exported constants --------------------------------------------------------*/\r
300 /** @defgroup RCCEx_Exported_Constants  RCCEx Exported Constants\r
301   * @{\r
302   */\r
303 \r
304 /** @defgroup RCCEx_Periph_Clock_Selection  RCCEx Periph Clock Selection\r
305   * @{\r
306   */\r
307 \r
308 #define RCC_PERIPHCLK_USART16          (0x00000001U)\r
309 #define RCC_PERIPHCLK_USART1           RCC_PERIPHCLK_USART16\r
310 #define RCC_PERIPHCLK_USART6           RCC_PERIPHCLK_USART16\r
311 #define RCC_PERIPHCLK_USART234578      (0x00000002U)\r
312 #define RCC_PERIPHCLK_USART2           RCC_PERIPHCLK_USART234578\r
313 #define RCC_PERIPHCLK_USART3           RCC_PERIPHCLK_USART234578\r
314 #define RCC_PERIPHCLK_UART4            RCC_PERIPHCLK_USART234578\r
315 #define RCC_PERIPHCLK_UART5            RCC_PERIPHCLK_USART234578\r
316 #define RCC_PERIPHCLK_UART7            RCC_PERIPHCLK_USART234578\r
317 #define RCC_PERIPHCLK_UART8            RCC_PERIPHCLK_USART234578\r
318 #define RCC_PERIPHCLK_LPUART1          (0x00000004U)\r
319 #define RCC_PERIPHCLK_I2C123           (0x00000008U)\r
320 #define RCC_PERIPHCLK_I2C1             RCC_PERIPHCLK_I2C123\r
321 #define RCC_PERIPHCLK_I2C2             RCC_PERIPHCLK_I2C123\r
322 #define RCC_PERIPHCLK_I2C3             RCC_PERIPHCLK_I2C123\r
323 #define RCC_PERIPHCLK_I2C4             (0x00000010U)\r
324 #define RCC_PERIPHCLK_LPTIM1           (0x00000020U)\r
325 #define RCC_PERIPHCLK_LPTIM2           (0x00000040U)\r
326 #define RCC_PERIPHCLK_LPTIM345         (0x00000080U)\r
327 #define RCC_PERIPHCLK_LPTIM3           RCC_PERIPHCLK_LPTIM345\r
328 #define RCC_PERIPHCLK_LPTIM4           RCC_PERIPHCLK_LPTIM345\r
329 #define RCC_PERIPHCLK_LPTIM5           RCC_PERIPHCLK_LPTIM345\r
330 #define RCC_PERIPHCLK_SAI1             (0x00000100U)\r
331 #define RCC_PERIPHCLK_SAI23            (0x00000200U)\r
332 #define RCC_PERIPHCLK_SAI2             RCC_PERIPHCLK_SAI23\r
333 #define RCC_PERIPHCLK_SAI3             RCC_PERIPHCLK_SAI23\r
334 #define RCC_PERIPHCLK_SAI4A            (0x00000400U)\r
335 #define RCC_PERIPHCLK_SAI4B            (0x00000800U)\r
336 #define RCC_PERIPHCLK_SPI123           (0x00001000U)\r
337 #define RCC_PERIPHCLK_SPI1             RCC_PERIPHCLK_SPI123\r
338 #define RCC_PERIPHCLK_SPI2             RCC_PERIPHCLK_SPI123\r
339 #define RCC_PERIPHCLK_SPI3             RCC_PERIPHCLK_SPI123\r
340 #define RCC_PERIPHCLK_SPI45            (0x00002000U)\r
341 #define RCC_PERIPHCLK_SPI4             RCC_PERIPHCLK_SPI45\r
342 #define RCC_PERIPHCLK_SPI5             RCC_PERIPHCLK_SPI45\r
343 #define RCC_PERIPHCLK_SPI6             (0x00004000U)\r
344 #define RCC_PERIPHCLK_FDCAN            (0x00008000U)\r
345 #define RCC_PERIPHCLK_SDMMC            (0x00010000U)\r
346 #define RCC_PERIPHCLK_RNG              (0x00020000U)\r
347 #define RCC_PERIPHCLK_USB              (0x00040000U)\r
348 #define RCC_PERIPHCLK_ADC              (0x00080000U)\r
349 #define RCC_PERIPHCLK_SWPMI1           (0x00100000U)\r
350 #define RCC_PERIPHCLK_DFSDM1           (0x00200000U)\r
351 #define RCC_PERIPHCLK_RTC              (0x00400000U)\r
352 #define RCC_PERIPHCLK_CEC              (0x00800000U)\r
353 #define RCC_PERIPHCLK_FMC              (0x01000000U)\r
354 #define RCC_PERIPHCLK_QSPI             (0x02000000U)\r
355 #define RCC_PERIPHCLK_DSI              (0x04000000U)\r
356 #define RCC_PERIPHCLK_SPDIFRX          (0x08000000U)\r
357 #define RCC_PERIPHCLK_HRTIM1           (0x10000000U)\r
358 \r
359 #if defined(LTDC)\r
360 #define RCC_PERIPHCLK_LTDC             (0x20000000U)\r
361 #endif /* LTDC */\r
362 \r
363 #define RCC_PERIPHCLK_TIM              (0x40000000U)\r
364 #define RCC_PERIPHCLK_CKPER            (0x80000000U)\r
365 \r
366 /**\r
367   * @}\r
368   */\r
369 \r
370 \r
371 /** @defgroup RCC_PLL2_Clock_Output  RCC PLL2 Clock Output\r
372   * @{\r
373   */\r
374 #define RCC_PLL2_DIVP                RCC_PLLCFGR_DIVP2EN\r
375 #define RCC_PLL2_DIVQ                RCC_PLLCFGR_DIVQ2EN\r
376 #define RCC_PLL2_DIVR                RCC_PLLCFGR_DIVR2EN\r
377 \r
378 /**\r
379   * @}\r
380   */\r
381 \r
382 /** @defgroup RCC_PLL3_Clock_Output  RCC PLL3 Clock Output\r
383   * @{\r
384   */\r
385 #define RCC_PLL3_DIVP                RCC_PLLCFGR_DIVP3EN\r
386 #define RCC_PLL3_DIVQ                RCC_PLLCFGR_DIVQ3EN\r
387 #define RCC_PLL3_DIVR                RCC_PLLCFGR_DIVR3EN\r
388 \r
389 /**\r
390   * @}\r
391   */\r
392 \r
393 /** @defgroup RCC_PLL2_VCI_Range  RCC PLL2 VCI Range\r
394   * @{\r
395   */\r
396 #define RCC_PLL2VCIRANGE_0                RCC_PLLCFGR_PLL2RGE_0\r
397 #define RCC_PLL2VCIRANGE_1                RCC_PLLCFGR_PLL2RGE_1\r
398 #define RCC_PLL2VCIRANGE_2                RCC_PLLCFGR_PLL2RGE_2\r
399 #define RCC_PLL2VCIRANGE_3                RCC_PLLCFGR_PLL2RGE_3\r
400 \r
401 /**\r
402   * @}\r
403   */\r
404 \r
405 \r
406 /** @defgroup RCC_PLL2_VCO_Range  RCC PLL2 VCO Range\r
407   * @{\r
408   */\r
409 #define RCC_PLL2VCOWIDE                 (0x00000000U)\r
410 #define RCC_PLL2VCOMEDIUM               RCC_PLLCFGR_PLL2VCOSEL\r
411 \r
412 /**\r
413   * @}\r
414   */\r
415 \r
416 /** @defgroup RCC_PLL3_VCI_Range  RCC PLL3 VCI Range\r
417   * @{\r
418   */\r
419 #define RCC_PLL3VCIRANGE_0                RCC_PLLCFGR_PLL3RGE_0\r
420 #define RCC_PLL3VCIRANGE_1                RCC_PLLCFGR_PLL3RGE_1\r
421 #define RCC_PLL3VCIRANGE_2                RCC_PLLCFGR_PLL3RGE_2\r
422 #define RCC_PLL3VCIRANGE_3                RCC_PLLCFGR_PLL3RGE_3\r
423 \r
424 /**\r
425   * @}\r
426   */\r
427 \r
428 \r
429 /** @defgroup RCC_PLL3_VCO_Range  RCC PLL3 VCO Range\r
430   * @{\r
431   */\r
432 #define RCC_PLL3VCOWIDE                 (0x00000000U)\r
433 #define RCC_PLL3VCOMEDIUM               RCC_PLLCFGR_PLL3VCOSEL\r
434 \r
435 /**\r
436   * @}\r
437   */\r
438 \r
439 /** @defgroup RCCEx_USART16_Clock_Source  RCCEx USART1/6 Clock Source\r
440   * @{\r
441   */\r
442 #define RCC_USART16CLKSOURCE_D2PCLK2    (0x00000000U)\r
443 #define RCC_USART16CLKSOURCE_PLL2      RCC_D2CCIP2R_USART16SEL_0\r
444 #define RCC_USART16CLKSOURCE_PLL3      RCC_D2CCIP2R_USART16SEL_1\r
445 #define RCC_USART16CLKSOURCE_HSI       (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_1)\r
446 #define RCC_USART16CLKSOURCE_CSI        RCC_D2CCIP2R_USART16SEL_2\r
447 #define RCC_USART16CLKSOURCE_LSE       (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_2)\r
448 /**\r
449   * @}\r
450   */\r
451 \r
452 /** @defgroup RCCEx_USART1_Clock_Source  RCCEx USART1 Clock Source\r
453   * @{\r
454   */\r
455 #define RCC_USART1CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2\r
456 #define RCC_USART1CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2\r
457 #define RCC_USART1CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3\r
458 #define RCC_USART1CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI\r
459 #define RCC_USART1CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI\r
460 #define RCC_USART1CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE\r
461 /**\r
462   * @}\r
463   */\r
464 \r
465 /** @defgroup RCCEx_USART6_Clock_Source  RCCEx USART6 Clock Source\r
466   * @{\r
467   */\r
468 #define RCC_USART6CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2\r
469 #define RCC_USART6CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2\r
470 #define RCC_USART6CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3\r
471 #define RCC_USART6CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI\r
472 #define RCC_USART6CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI\r
473 #define RCC_USART6CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE\r
474 \r
475 /**\r
476   * @}\r
477   */\r
478 \r
479 /** @defgroup RCCEx_USART234578_Clock_Source  RCCEx USART2/3/4/5/7/8 Clock Source\r
480   * @{\r
481   */\r
482 #define RCC_USART234578CLKSOURCE_D2PCLK1    (0x00000000U)\r
483 #define RCC_USART234578CLKSOURCE_PLL2      RCC_D2CCIP2R_USART28SEL_0\r
484 #define RCC_USART234578CLKSOURCE_PLL3      RCC_D2CCIP2R_USART28SEL_1\r
485 #define RCC_USART234578CLKSOURCE_HSI       (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_1)\r
486 #define RCC_USART234578CLKSOURCE_CSI        RCC_D2CCIP2R_USART28SEL_2\r
487 #define RCC_USART234578CLKSOURCE_LSE       (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_2)\r
488 \r
489 /**\r
490   * @}\r
491   */\r
492 \r
493 /** @defgroup RCCEx_USART2_Clock_Source  RCCEx USART2 Clock Source\r
494   * @{\r
495   */\r
496 #define RCC_USART2CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
497 #define RCC_USART2CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
498 #define RCC_USART2CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
499 #define RCC_USART2CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
500 #define RCC_USART2CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
501 #define RCC_USART2CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
502 \r
503 /**\r
504   * @}\r
505   */\r
506 \r
507 /** @defgroup RCCEx_USART3_Clock_Source  RCCEx USART3 Clock Source\r
508   * @{\r
509   */\r
510 #define RCC_USART3CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
511 #define RCC_USART3CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
512 #define RCC_USART3CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
513 #define RCC_USART3CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
514 #define RCC_USART3CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
515 #define RCC_USART3CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
516 \r
517 /**\r
518   * @}\r
519   */\r
520 \r
521 /** @defgroup RCCEx_UART4_Clock_Source  RCCEx UART4 Clock Source\r
522   * @{\r
523   */\r
524 #define RCC_UART4CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
525 #define RCC_UART4CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
526 #define RCC_UART4CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
527 #define RCC_UART4CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
528 #define RCC_UART4CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
529 #define RCC_UART4CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
530 \r
531 /**\r
532   * @}\r
533   */\r
534 \r
535 /** @defgroup RCCEx_UART5_Clock_Source  RCCEx UART5 Clock Source\r
536   * @{\r
537   */\r
538 #define RCC_UART5CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
539 #define RCC_UART5CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
540 #define RCC_UART5CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
541 #define RCC_UART5CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
542 #define RCC_UART5CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
543 #define RCC_UART5CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
544 \r
545 /**\r
546   * @}\r
547   */\r
548 \r
549 /** @defgroup RCCEx_UART7_Clock_Source  RCCEx UART7 Clock Source\r
550   * @{\r
551   */\r
552 #define RCC_UART7CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
553 #define RCC_UART7CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
554 #define RCC_UART7CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
555 #define RCC_UART7CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
556 #define RCC_UART7CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
557 #define RCC_UART7CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
558 \r
559 /**\r
560   * @}\r
561   */\r
562 \r
563 /** @defgroup RCCEx_UART8_Clock_Source  RCCEx UART8 Clock Source\r
564   * @{\r
565   */\r
566 #define RCC_UART8CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1\r
567 #define RCC_UART8CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2\r
568 #define RCC_UART8CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3\r
569 #define RCC_UART8CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI\r
570 #define RCC_UART8CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI\r
571 #define RCC_UART8CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE\r
572 \r
573 /**\r
574   * @}\r
575   */\r
576 \r
577 /** @defgroup RCCEx_LPUART1_Clock_Source  RCCEx LPUART1 Clock Source\r
578   * @{\r
579   */\r
580 #define RCC_LPUART1CLKSOURCE_D3PCLK1    (0x00000000U)\r
581 #define RCC_LPUART1CLKSOURCE_PLL2      RCC_D3CCIPR_LPUART1SEL_0\r
582 #define RCC_LPUART1CLKSOURCE_PLL3      RCC_D3CCIPR_LPUART1SEL_1\r
583 #define RCC_LPUART1CLKSOURCE_HSI       (RCC_D3CCIPR_LPUART1SEL_0 | RCC_D3CCIPR_LPUART1SEL_1)\r
584 #define RCC_LPUART1CLKSOURCE_CSI        RCC_D3CCIPR_LPUART1SEL_2\r
585 #define RCC_LPUART1CLKSOURCE_LSE       (RCC_D3CCIPR_LPUART1SEL_2 | RCC_D3CCIPR_LPUART1SEL_0)\r
586 \r
587 /**\r
588   * @}\r
589   */\r
590 \r
591 /** @defgroup RCCEx_I2C123_Clock_Source  RCCEx I2C1/2/3 Clock Source\r
592   * @{\r
593   */\r
594 #define RCC_I2C123CLKSOURCE_D2PCLK1      (0x00000000U)\r
595 #define RCC_I2C123CLKSOURCE_PLL3         RCC_D2CCIP2R_I2C123SEL_0\r
596 #define RCC_I2C123CLKSOURCE_HSI          RCC_D2CCIP2R_I2C123SEL_1\r
597 #define RCC_I2C123CLKSOURCE_CSI         (RCC_D2CCIP2R_I2C123SEL_0 | RCC_D2CCIP2R_I2C123SEL_1)\r
598 \r
599 /**\r
600   * @}\r
601   */\r
602 \r
603 /** @defgroup RCCEx_I2C1_Clock_Source  RCCEx I2C1 Clock Source\r
604   * @{\r
605   */\r
606 #define RCC_I2C1CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1\r
607 #define RCC_I2C1CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3\r
608 #define RCC_I2C1CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI\r
609 #define RCC_I2C1CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI\r
610 \r
611 \r
612 /**\r
613   * @}\r
614   */\r
615 \r
616 /** @defgroup RCCEx_I2C2_Clock_Source  RCCEx I2C2 Clock Source\r
617   * @{\r
618   */\r
619 #define RCC_I2C2CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1\r
620 #define RCC_I2C2CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3\r
621 #define RCC_I2C2CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI\r
622 #define RCC_I2C2CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI\r
623 \r
624 /**\r
625   * @}\r
626   */\r
627 \r
628 /** @defgroup RCCEx_I2C3_Clock_Source  RCCEx I2C3 Clock Source\r
629   * @{\r
630   */\r
631 #define RCC_I2C3CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1\r
632 #define RCC_I2C3CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3\r
633 #define RCC_I2C3CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI\r
634 #define RCC_I2C3CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI\r
635 \r
636 /**\r
637   * @}\r
638   */\r
639 \r
640 /** @defgroup RCCEx_I2C4_Clock_Source  RCCEx I2C4 Clock Source\r
641   * @{\r
642   */\r
643 #define RCC_I2C4CLKSOURCE_D3PCLK1      (0x00000000U)\r
644 #define RCC_I2C4CLKSOURCE_PLL3         RCC_D3CCIPR_I2C4SEL_0\r
645 #define RCC_I2C4CLKSOURCE_HSI          RCC_D3CCIPR_I2C4SEL_1\r
646 #define RCC_I2C4CLKSOURCE_CSI         (RCC_D3CCIPR_I2C4SEL_0 | RCC_D3CCIPR_I2C4SEL_1)\r
647 \r
648 \r
649 /**\r
650   * @}\r
651   */\r
652 \r
653 /** @defgroup RCCEx_RNG_Clock_Source  RCCEx RNG Clock Source\r
654   * @{\r
655   */\r
656 #define RCC_RNGCLKSOURCE_HSI48        (0x00000000U)\r
657 #define RCC_RNGCLKSOURCE_PLL           RCC_D2CCIP2R_RNGSEL_0\r
658 #define RCC_RNGCLKSOURCE_LSE           RCC_D2CCIP2R_RNGSEL_1\r
659 #define RCC_RNGCLKSOURCE_LSI           RCC_D2CCIP2R_RNGSEL\r
660 \r
661 \r
662 /**\r
663   * @}\r
664   */\r
665 \r
666 /** @defgroup RCCEx_HRTIM1_Clock_Source RCC Extended HRTIM1 Clock Source\r
667   * @{\r
668   */\r
669 #define RCC_HRTIM1CLK_TIMCLK                (0x00000000U)\r
670 #define RCC_HRTIM1CLK_CPUCLK                RCC_CFGR_HRTIMSEL\r
671 \r
672 /**\r
673   * @}\r
674   */\r
675 \r
676 /** @defgroup RCCEx_USB_Clock_Source  RCCEx USB Clock Source\r
677   * @{\r
678   */\r
679 #define RCC_USBCLKSOURCE_PLL                  RCC_D2CCIP2R_USBSEL_0\r
680 #define RCC_USBCLKSOURCE_PLL3                 RCC_D2CCIP2R_USBSEL_1\r
681 #define RCC_USBCLKSOURCE_HSI48                RCC_D2CCIP2R_USBSEL\r
682 \r
683 /**\r
684   * @}\r
685   */\r
686 \r
687 /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source\r
688   * @{\r
689   */\r
690 #define RCC_SAI1CLKSOURCE_PLL         (0x00000000U)\r
691 #define RCC_SAI1CLKSOURCE_PLL2         RCC_D2CCIP1R_SAI1SEL_0\r
692 #define RCC_SAI1CLKSOURCE_PLL3         RCC_D2CCIP1R_SAI1SEL_1\r
693 #define RCC_SAI1CLKSOURCE_PIN         (RCC_D2CCIP1R_SAI1SEL_0 | RCC_D2CCIP1R_SAI1SEL_1)\r
694 #define RCC_SAI1CLKSOURCE_CLKP         RCC_D2CCIP1R_SAI1SEL_2\r
695 \r
696 /**\r
697   * @}\r
698   */\r
699 \r
700 \r
701 \r
702 /** @defgroup RCCEx_SAI23_Clock_Source SAI2/3 Clock Source\r
703   * @{\r
704   */\r
705 #define RCC_SAI23CLKSOURCE_PLL         (0x00000000U)\r
706 #define RCC_SAI23CLKSOURCE_PLL2         RCC_D2CCIP1R_SAI23SEL_0\r
707 #define RCC_SAI23CLKSOURCE_PLL3         RCC_D2CCIP1R_SAI23SEL_1\r
708 #define RCC_SAI23CLKSOURCE_PIN         (RCC_D2CCIP1R_SAI23SEL_0 | RCC_D2CCIP1R_SAI23SEL_1)\r
709 #define RCC_SAI23CLKSOURCE_CLKP         RCC_D2CCIP1R_SAI23SEL_2\r
710 \r
711 /**\r
712   * @}\r
713   */\r
714 \r
715 /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source\r
716   * @{\r
717   */\r
718 #define RCC_SAI2CLKSOURCE_PLL         RCC_SAI23CLKSOURCE_PLL\r
719 #define RCC_SAI2CLKSOURCE_PLL2        RCC_SAI23CLKSOURCE_PLL2\r
720 #define RCC_SAI2CLKSOURCE_PLL3        RCC_SAI23CLKSOURCE_PLL3\r
721 #define RCC_SAI2CLKSOURCE_PIN         RCC_SAI23CLKSOURCE_PIN\r
722 #define RCC_SAI2CLKSOURCE_CLKP        RCC_SAI23CLKSOURCE_CLKP\r
723 \r
724 /**\r
725   * @}\r
726   */\r
727 \r
728 /** @defgroup RCCEx_SAI3_Clock_Source SAI3 Clock Source\r
729   * @{\r
730   */\r
731 #define RCC_SAI3CLKSOURCE_PLL         RCC_SAI23CLKSOURCE_PLL\r
732 #define RCC_SAI3CLKSOURCE_PLL2        RCC_SAI23CLKSOURCE_PLL2\r
733 #define RCC_SAI3CLKSOURCE_PLL3        RCC_SAI23CLKSOURCE_PLL3\r
734 #define RCC_SAI3CLKSOURCE_PIN         RCC_SAI23CLKSOURCE_PIN\r
735 #define RCC_SAI3CLKSOURCE_CLKP        RCC_SAI23CLKSOURCE_CLKP\r
736 \r
737 /**\r
738   * @}\r
739   */\r
740 \r
741 /** @defgroup RCCEx_SPI123_Clock_Source SPI1/2/3 Clock Source\r
742   * @{\r
743   */\r
744 #define RCC_SPI123CLKSOURCE_PLL         (0x00000000U)\r
745 #define RCC_SPI123CLKSOURCE_PLL2         RCC_D2CCIP1R_SPI123SEL_0\r
746 #define RCC_SPI123CLKSOURCE_PLL3         RCC_D2CCIP1R_SPI123SEL_1\r
747 #define RCC_SPI123CLKSOURCE_PIN         (RCC_D2CCIP1R_SPI123SEL_0 | RCC_D2CCIP1R_SPI123SEL_1)\r
748 #define RCC_SPI123CLKSOURCE_CLKP         RCC_D2CCIP1R_SPI123SEL_2\r
749 \r
750 /**\r
751   * @}\r
752   */\r
753 \r
754 /** @defgroup RCCEx_SPI1_Clock_Source SPI1 Clock Source\r
755   * @{\r
756   */\r
757 #define RCC_SPI1CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL\r
758 #define RCC_SPI1CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2\r
759 #define RCC_SPI1CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3\r
760 #define RCC_SPI1CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN\r
761 #define RCC_SPI1CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP\r
762 \r
763 /**\r
764   * @}\r
765   */\r
766 \r
767 /** @defgroup RCCEx_SPI2_Clock_Source SPI2 Clock Source\r
768   * @{\r
769   */\r
770 #define RCC_SPI2CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL\r
771 #define RCC_SPI2CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2\r
772 #define RCC_SPI2CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3\r
773 #define RCC_SPI2CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN\r
774 #define RCC_SPI2CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP\r
775 \r
776 /**\r
777   * @}\r
778   */\r
779 \r
780 /** @defgroup RCCEx_SPI3_Clock_Source SPI3 Clock Source\r
781   * @{\r
782   */\r
783 #define RCC_SPI3CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL\r
784 #define RCC_SPI3CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2\r
785 #define RCC_SPI3CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3\r
786 #define RCC_SPI3CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN\r
787 #define RCC_SPI3CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP\r
788 \r
789 /**\r
790   * @}\r
791   */\r
792 \r
793 /** @defgroup RCCEx_SPI45_Clock_Source SPI4/5 Clock Source\r
794   * @{\r
795   */\r
796 #define RCC_SPI45CLKSOURCE_D2PCLK1     (0x00000000U)\r
797 #define RCC_SPI45CLKSOURCE_PLL2         RCC_D2CCIP1R_SPI45SEL_0\r
798 #define RCC_SPI45CLKSOURCE_PLL3         RCC_D2CCIP1R_SPI45SEL_1\r
799 #define RCC_SPI45CLKSOURCE_HSI         (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_1)\r
800 #define RCC_SPI45CLKSOURCE_CSI          RCC_D2CCIP1R_SPI45SEL_2\r
801 #define RCC_SPI45CLKSOURCE_HSE         (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_2)\r
802 \r
803 /**\r
804   * @}\r
805   */\r
806 \r
807 /** @defgroup RCCEx_SPI4_Clock_Source SPI4 Clock Source\r
808   * @{\r
809   */\r
810 #define RCC_SPI4CLKSOURCE_D2PCLK1     RCC_SPI45CLKSOURCE_D2PCLK1\r
811 #define RCC_SPI4CLKSOURCE_PLL2        RCC_SPI45CLKSOURCE_PLL2\r
812 #define RCC_SPI4CLKSOURCE_PLL3        RCC_SPI45CLKSOURCE_PLL3\r
813 #define RCC_SPI4CLKSOURCE_HSI         RCC_SPI45CLKSOURCE_HSI\r
814 #define RCC_SPI4CLKSOURCE_CSI         RCC_SPI45CLKSOURCE_CSI\r
815 #define RCC_SPI4CLKSOURCE_HSE         RCC_SPI45CLKSOURCE_HSE\r
816 \r
817 /**\r
818   * @}\r
819   */\r
820 \r
821 /** @defgroup RCCEx_SPI5_Clock_Source SPI5 Clock Source\r
822   * @{\r
823   */\r
824 #define RCC_SPI5CLKSOURCE_D2PCLK1     RCC_SPI45CLKSOURCE_D2PCLK1\r
825 #define RCC_SPI5CLKSOURCE_PLL2        RCC_SPI45CLKSOURCE_PLL2\r
826 #define RCC_SPI5CLKSOURCE_PLL3        RCC_SPI45CLKSOURCE_PLL3\r
827 #define RCC_SPI5CLKSOURCE_HSI         RCC_SPI45CLKSOURCE_HSI\r
828 #define RCC_SPI5CLKSOURCE_CSI         RCC_SPI45CLKSOURCE_CSI\r
829 #define RCC_SPI5CLKSOURCE_HSE         RCC_SPI45CLKSOURCE_HSE\r
830 \r
831 /**\r
832   * @}\r
833   */\r
834 \r
835 /** @defgroup RCCEx_SPI6_Clock_Source SPI6 Clock Source\r
836   * @{\r
837   */\r
838 #define RCC_SPI6CLKSOURCE_D3PCLK1     (0x00000000U)\r
839 #define RCC_SPI6CLKSOURCE_PLL2         RCC_D3CCIPR_SPI6SEL_0\r
840 #define RCC_SPI6CLKSOURCE_PLL3         RCC_D3CCIPR_SPI6SEL_1\r
841 #define RCC_SPI6CLKSOURCE_HSI         (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_1)\r
842 #define RCC_SPI6CLKSOURCE_CSI          RCC_D3CCIPR_SPI6SEL_2\r
843 #define RCC_SPI6CLKSOURCE_HSE         (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_2)\r
844 \r
845 \r
846 /**\r
847   * @}\r
848   */\r
849 \r
850 \r
851 /** @defgroup RCCEx_SAI4A_Clock_Source SAI4A Clock Source\r
852   * @{\r
853   */\r
854 #define RCC_SAI4ACLKSOURCE_PLL         (0x00000000U)\r
855 #define RCC_SAI4ACLKSOURCE_PLL2         RCC_D3CCIPR_SAI4ASEL_0\r
856 #define RCC_SAI4ACLKSOURCE_PLL3         RCC_D3CCIPR_SAI4ASEL_1\r
857 #define RCC_SAI4ACLKSOURCE_PIN         (RCC_D3CCIPR_SAI4ASEL_0 | RCC_D3CCIPR_SAI4ASEL_1)\r
858 #define RCC_SAI4ACLKSOURCE_CLKP         RCC_D3CCIPR_SAI4ASEL_2\r
859 \r
860 \r
861 /**\r
862   * @}\r
863   */\r
864 \r
865 \r
866 /** @defgroup RCCEx_SAI4B_Clock_Source SAI4B Clock Source\r
867   * @{\r
868   */\r
869 #define RCC_SAI4BCLKSOURCE_PLL         (0x00000000U)\r
870 #define RCC_SAI4BCLKSOURCE_PLL2         RCC_D3CCIPR_SAI4BSEL_0\r
871 #define RCC_SAI4BCLKSOURCE_PLL3         RCC_D3CCIPR_SAI4BSEL_1\r
872 #define RCC_SAI4BCLKSOURCE_PIN         (RCC_D3CCIPR_SAI4BSEL_0 | RCC_D3CCIPR_SAI4BSEL_1)\r
873 #define RCC_SAI4BCLKSOURCE_CLKP         RCC_D3CCIPR_SAI4BSEL_2\r
874 \r
875 /**\r
876   * @}\r
877   */\r
878 \r
879 \r
880 /** @defgroup RCCEx_LPTIM1_Clock_Source  RCCEx LPTIM1 Clock Source\r
881   * @{\r
882   */\r
883 #define RCC_LPTIM1CLKSOURCE_D2PCLK1        (0x00000000U)\r
884 #define RCC_LPTIM1CLKSOURCE_PLL2          RCC_D2CCIP2R_LPTIM1SEL_0\r
885 #define RCC_LPTIM1CLKSOURCE_PLL3          RCC_D2CCIP2R_LPTIM1SEL_1\r
886 #define RCC_LPTIM1CLKSOURCE_LSE           (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_1)\r
887 #define RCC_LPTIM1CLKSOURCE_LSI            RCC_D2CCIP2R_LPTIM1SEL_2\r
888 #define RCC_LPTIM1CLKSOURCE_CLKP          (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_2)\r
889 \r
890 \r
891 /**\r
892   * @}\r
893   */\r
894 \r
895 /** @defgroup RCCEx_LPTIM2_Clock_Source  RCCEx LPTIM2 Clock Source\r
896   * @{\r
897   */\r
898 #define RCC_LPTIM2CLKSOURCE_D3PCLK1        (0x00000000U)\r
899 #define RCC_LPTIM2CLKSOURCE_PLL2          RCC_D3CCIPR_LPTIM2SEL_0\r
900 #define RCC_LPTIM2CLKSOURCE_PLL3          RCC_D3CCIPR_LPTIM2SEL_1\r
901 #define RCC_LPTIM2CLKSOURCE_LSE           (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_1)\r
902 #define RCC_LPTIM2CLKSOURCE_LSI            RCC_D3CCIPR_LPTIM2SEL_2\r
903 #define RCC_LPTIM2CLKSOURCE_CLKP          (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_2)\r
904 \r
905 /**\r
906   * @}\r
907   */\r
908 \r
909 /** @defgroup RCCEx_LPTIM345_Clock_Source  RCCEx LPTIM3/4/5 Clock Source\r
910   * @{\r
911   */\r
912 #define RCC_LPTIM345CLKSOURCE_D3PCLK1        (0x00000000U)\r
913 #define RCC_LPTIM345CLKSOURCE_PLL2          RCC_D3CCIPR_LPTIM345SEL_0\r
914 #define RCC_LPTIM345CLKSOURCE_PLL3          RCC_D3CCIPR_LPTIM345SEL_1\r
915 #define RCC_LPTIM345CLKSOURCE_LSE           (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_1)\r
916 #define RCC_LPTIM345CLKSOURCE_LSI            RCC_D3CCIPR_LPTIM345SEL_2\r
917 #define RCC_LPTIM345CLKSOURCE_CLKP          (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_2)\r
918 \r
919 /**\r
920   * @}\r
921   */\r
922 \r
923 /** @defgroup RCCEx_LPTIM3_Clock_Source  RCCEx LPTIM3 Clock Source\r
924   * @{\r
925   */\r
926 #define RCC_LPTIM3CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1\r
927 #define RCC_LPTIM3CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2\r
928 #define RCC_LPTIM3CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3\r
929 #define RCC_LPTIM3CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE\r
930 #define RCC_LPTIM3CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI\r
931 #define RCC_LPTIM3CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP\r
932 \r
933 /**\r
934   * @}\r
935   */\r
936 \r
937 /** @defgroup RCCEx_LPTIM4_Clock_Source  RCCEx LPTIM4 Clock Source\r
938   * @{\r
939   */\r
940 #define RCC_LPTIM4CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1\r
941 #define RCC_LPTIM4CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2\r
942 #define RCC_LPTIM4CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3\r
943 #define RCC_LPTIM4CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE\r
944 #define RCC_LPTIM4CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI\r
945 #define RCC_LPTIM4CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP\r
946 \r
947 /**\r
948   * @}\r
949   */\r
950 \r
951 /** @defgroup RCCEx_LPTIM5_Clock_Source  RCCEx LPTIM5 Clock Source\r
952   * @{\r
953   */\r
954 #define RCC_LPTIM5CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1\r
955 #define RCC_LPTIM5CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2\r
956 #define RCC_LPTIM5CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3\r
957 #define RCC_LPTIM5CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE\r
958 #define RCC_LPTIM5CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI\r
959 #define RCC_LPTIM5CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP\r
960 \r
961 /**\r
962   * @}\r
963   */\r
964 \r
965 /** @defgroup RCCEx_QSPI_Clock_Source  RCCEx QSPI Clock Source\r
966   * @{\r
967   */\r
968 #define RCC_QSPICLKSOURCE_D1HCLK       (0x00000000U)\r
969 #define RCC_QSPICLKSOURCE_PLL          RCC_D1CCIPR_QSPISEL_0\r
970 #define RCC_QSPICLKSOURCE_PLL2         RCC_D1CCIPR_QSPISEL_1\r
971 #define RCC_QSPICLKSOURCE_CLKP         RCC_D1CCIPR_QSPISEL\r
972 \r
973 \r
974 \r
975 /**\r
976   * @}\r
977   */\r
978 #if defined(DSI)\r
979 /** @defgroup RCCEx_DSI_Clock_Source  RCCEx DSI Clock Source\r
980   * @{\r
981   */\r
982 #define RCC_DSICLKSOURCE_PHY       (0x00000000U)\r
983 #define RCC_DSICLKSOURCE_PLL2       RCC_D1CCIPR_DSISEL\r
984 \r
985 /**\r
986   * @}\r
987   */\r
988 #endif /*DSI*/\r
989 \r
990 /** @defgroup RCCEx_FMC_Clock_Source  RCCEx FMC Clock Source\r
991   * @{\r
992   */\r
993 #define RCC_FMCCLKSOURCE_D1HCLK       (0x00000000U)\r
994 #define RCC_FMCCLKSOURCE_PLL          RCC_D1CCIPR_FMCSEL_0\r
995 #define RCC_FMCCLKSOURCE_PLL2         RCC_D1CCIPR_FMCSEL_1\r
996 #define RCC_FMCCLKSOURCE_CLKP         RCC_D1CCIPR_FMCSEL\r
997 \r
998 /**\r
999   * @}\r
1000   */\r
1001 \r
1002 #if defined(FDCAN1) || defined(FDCAN2)\r
1003 /** @defgroup RCCEx_FDCAN_Clock_Source  RCCEx FDCAN Clock Source\r
1004   * @{\r
1005   */\r
1006 \r
1007 #define RCC_FDCANCLKSOURCE_HSE         (0x00000000U)\r
1008 #define RCC_FDCANCLKSOURCE_PLL          RCC_D2CCIP1R_FDCANSEL_0\r
1009 #define RCC_FDCANCLKSOURCE_PLL2         RCC_D2CCIP1R_FDCANSEL_1\r
1010 \r
1011 /**\r
1012   * @}\r
1013   */\r
1014 #endif /*FDCAN1 || FDCAN2*/\r
1015 \r
1016 \r
1017 /** @defgroup RCCEx_SDMMC_Clock_Source  RCCEx SDMMC Clock Source\r
1018   * @{\r
1019   */\r
1020 \r
1021 #define RCC_SDMMCCLKSOURCE_PLL           (0x00000000U)\r
1022 #define RCC_SDMMCCLKSOURCE_PLL2           RCC_D1CCIPR_SDMMCSEL\r
1023 \r
1024 /**\r
1025   * @}\r
1026   */\r
1027 \r
1028 \r
1029 /** @defgroup RCCEx_ADC_Clock_Source  RCCEx ADC Clock Source\r
1030   * @{\r
1031   */\r
1032 #define RCC_ADCCLKSOURCE_PLL2       (0x00000000U)\r
1033 #define RCC_ADCCLKSOURCE_PLL3       RCC_D3CCIPR_ADCSEL_0\r
1034 #define RCC_ADCCLKSOURCE_CLKP       RCC_D3CCIPR_ADCSEL_1\r
1035 \r
1036 /**\r
1037   * @}\r
1038   */\r
1039 \r
1040 \r
1041 \r
1042 \r
1043 \r
1044 /** @defgroup RCCEx_SWPMI1_Clock_Source  RCCEx SWPMI1 Clock Source\r
1045   * @{\r
1046   */\r
1047 #define RCC_SWPMI1CLKSOURCE_D2PCLK1       (0x00000000U)\r
1048 #define RCC_SWPMI1CLKSOURCE_HSI            RCC_D2CCIP1R_SWPSEL\r
1049 \r
1050 /**\r
1051   * @}\r
1052   */\r
1053 \r
1054 /** @defgroup RCCEx_DFSDM1_Clock_Source  RCCEx DFSDM1 Clock Source\r
1055   * @{\r
1056   */\r
1057 #define RCC_DFSDM1CLKSOURCE_D2PCLK1        (0x00000000U)\r
1058 #define RCC_DFSDM1CLKSOURCE_SYS            RCC_D2CCIP1R_DFSDM1SEL\r
1059 \r
1060 \r
1061 /**\r
1062   * @}\r
1063   */\r
1064 \r
1065 /** @defgroup RCCEx_SPDIFRX_Clock_Source  RCCEx SPDIFRX Clock Source\r
1066   * @{\r
1067   */\r
1068 #define RCC_SPDIFRXCLKSOURCE_PLL        (0x00000000U)\r
1069 #define RCC_SPDIFRXCLKSOURCE_PLL2       RCC_D2CCIP1R_SPDIFSEL_0\r
1070 #define RCC_SPDIFRXCLKSOURCE_PLL3       RCC_D2CCIP1R_SPDIFSEL_1\r
1071 #define RCC_SPDIFRXCLKSOURCE_HSI        RCC_D2CCIP1R_SPDIFSEL\r
1072 \r
1073 /**\r
1074   * @}\r
1075   */\r
1076 \r
1077 /** @defgroup RCCEx_CEC_Clock_Source  RCCEx CEC Clock Source\r
1078   * @{\r
1079   */\r
1080 #define RCC_CECCLKSOURCE_LSE        (0x00000000U)\r
1081 #define RCC_CECCLKSOURCE_LSI         RCC_D2CCIP2R_CECSEL_0\r
1082 #define RCC_CECCLKSOURCE_CSI         RCC_D2CCIP2R_CECSEL_1\r
1083 \r
1084 /**\r
1085   * @}\r
1086   */\r
1087 \r
1088 \r
1089 /** @defgroup RCCEx_CLKP_Clock_Source  RCCEx CLKP Clock Source\r
1090   * @{\r
1091   */\r
1092 #define RCC_CLKPSOURCE_HSI        (0x00000000U)\r
1093 #define RCC_CLKPSOURCE_CSI         RCC_D1CCIPR_CKPERSEL_0\r
1094 #define RCC_CLKPSOURCE_HSE         RCC_D1CCIPR_CKPERSEL_1\r
1095 \r
1096 /**\r
1097   * @}\r
1098   */\r
1099 \r
1100 /** @defgroup RCCEx_TIM_Prescaler_Selection RCCEx TIM Prescaler Selection\r
1101   * @{\r
1102   */\r
1103 #define RCC_TIMPRES_DESACTIVATED        (0x00000000U)\r
1104 #define RCC_TIMPRES_ACTIVATED            RCC_CFGR_TIMPRE\r
1105 \r
1106 /**\r
1107   * @}\r
1108   */\r
1109 \r
1110 #if defined(DUAL_CORE)\r
1111 \r
1112 /** @defgroup RCCEx_RCC_BootCx RCCEx RCC BootCx\r
1113   * @{\r
1114   */\r
1115 #define RCC_BOOT_C1        RCC_GCR_BOOT_C1\r
1116 #define RCC_BOOT_C2        RCC_GCR_BOOT_C2\r
1117 \r
1118 /**\r
1119   * @}\r
1120   */\r
1121 #endif /*DUAL_CORE*/\r
1122 \r
1123 #if defined(DUAL_CORE)\r
1124 /** @defgroup RCCEx_RCC_WWDGx  RCCEx RCC WWDGx\r
1125   * @{\r
1126   */\r
1127 #define RCC_WWDG1        RCC_GCR_WW1RSC\r
1128 #define RCC_WWDG2        RCC_GCR_WW2RSC\r
1129 \r
1130 /**\r
1131   * @}\r
1132   */\r
1133 \r
1134 #else\r
1135 \r
1136 /** @defgroup RCCEx_RCC_WWDGx  RCCEx RCC WWDGx\r
1137   * @{\r
1138   */\r
1139 #define RCC_WWDG1        RCC_GCR_WW1RSC\r
1140 \r
1141 /**\r
1142   * @}\r
1143   */\r
1144 \r
1145 #endif /*DUAL_CORE*/\r
1146 \r
1147 /** @defgroup RCCEx_CRS_Status RCCEx CRS Status\r
1148   * @{\r
1149   */\r
1150 #define RCC_CRS_NONE                   (0x00000000U)\r
1151 #define RCC_CRS_TIMEOUT                (0x00000001U)\r
1152 #define RCC_CRS_SYNCOK                 (0x00000002U)\r
1153 #define RCC_CRS_SYNCWARN               (0x00000004U)\r
1154 #define RCC_CRS_SYNCERR                (0x00000008U)\r
1155 #define RCC_CRS_SYNCMISS               (0x00000010U)\r
1156 #define RCC_CRS_TRIMOVF                (0x00000020U)\r
1157 /**\r
1158   * @}\r
1159   */\r
1160 \r
1161 /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource\r
1162   * @{\r
1163   */\r
1164 #define RCC_CRS_SYNC_SOURCE_PIN       (0x00000000U)                            /*!< Synchro Signal source external pin, Available on STM32H7 Rev.B and abobe devices only */\r
1165 #define RCC_CRS_SYNC_SOURCE_LSE        CRS_CFGR_SYNCSRC_0                      /*!< Synchro Signal source LSE */\r
1166 #define RCC_CRS_SYNC_SOURCE_USB1       CRS_CFGR_SYNCSRC_1                      /*!< Synchro Signal source USB1 SOF (default) */\r
1167 #define RCC_CRS_SYNC_SOURCE_USB2      (CRS_CFGR_SYNCSRC_1|CRS_CFGR_SYNCSRC_0)  /*!< Synchro Signal source USB2 SOF */\r
1168 \r
1169 \r
1170 /**\r
1171   * @}\r
1172   */\r
1173 \r
1174 /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider\r
1175   * @{\r
1176   */\r
1177 #define RCC_CRS_SYNC_DIV1        (0x00000000U)           /*!< Synchro Signal not divided (default) */\r
1178 #define RCC_CRS_SYNC_DIV2        CRS_CFGR_SYNCDIV_0                         /*!< Synchro Signal divided by 2 */\r
1179 #define RCC_CRS_SYNC_DIV4        CRS_CFGR_SYNCDIV_1                         /*!< Synchro Signal divided by 4 */\r
1180 #define RCC_CRS_SYNC_DIV8        (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0)  /*!< Synchro Signal divided by 8 */\r
1181 #define RCC_CRS_SYNC_DIV16       CRS_CFGR_SYNCDIV_2                        /*!< Synchro Signal divided by 16 */\r
1182 #define RCC_CRS_SYNC_DIV32       (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */\r
1183 #define RCC_CRS_SYNC_DIV64       (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */\r
1184 #define RCC_CRS_SYNC_DIV128      CRS_CFGR_SYNCDIV                         /*!< Synchro Signal divided by 128 */\r
1185 /**\r
1186   * @}\r
1187   */\r
1188 \r
1189 /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity\r
1190   * @{\r
1191   */\r
1192 #define RCC_CRS_SYNC_POLARITY_RISING   (0x00000000U) /*!< Synchro Active on rising edge (default) */\r
1193 #define RCC_CRS_SYNC_POLARITY_FALLING  CRS_CFGR_SYNCPOL        /*!< Synchro Active on falling edge */\r
1194 /**\r
1195   * @}\r
1196   */\r
1197 \r
1198 /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault\r
1199   * @{\r
1200   */\r
1201 #define RCC_CRS_RELOADVALUE_DEFAULT    (0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds\r
1202                                                                     to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */\r
1203 /**\r
1204   * @}\r
1205   */\r
1206 \r
1207 /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault\r
1208   * @{\r
1209   */\r
1210 #define RCC_CRS_ERRORLIMIT_DEFAULT     (0x00000022U) /*!< Default Frequency error limit */\r
1211 /**\r
1212   * @}\r
1213   */\r
1214 \r
1215 /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault\r
1216   * @{\r
1217   */\r
1218 #define RCC_CRS_HSI48CALIBRATION_DEFAULT (0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval.\r
1219                                                                       The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value\r
1220                                                                       corresponds to a higher output frequency */\r
1221 /**\r
1222   * @}\r
1223   */\r
1224 \r
1225 /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection\r
1226   * @{\r
1227   */\r
1228 #define RCC_CRS_FREQERRORDIR_UP        (0x00000000U)   /*!< Upcounting direction, the actual frequency is above the target */\r
1229 #define RCC_CRS_FREQERRORDIR_DOWN      (CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */\r
1230 /**\r
1231   * @}\r
1232   */\r
1233 \r
1234 /** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources\r
1235   * @{\r
1236   */\r
1237 #define RCC_CRS_IT_SYNCOK              CRS_CR_SYNCOKIE       /*!< SYNC event OK */\r
1238 #define RCC_CRS_IT_SYNCWARN            CRS_CR_SYNCWARNIE     /*!< SYNC warning */\r
1239 #define RCC_CRS_IT_ERR                 CRS_CR_ERRIE          /*!< Error */\r
1240 #define RCC_CRS_IT_ESYNC               CRS_CR_ESYNCIE        /*!< Expected SYNC */\r
1241 #define RCC_CRS_IT_SYNCERR             CRS_CR_ERRIE          /*!< SYNC error */\r
1242 #define RCC_CRS_IT_SYNCMISS            CRS_CR_ERRIE          /*!< SYNC missed */\r
1243 #define RCC_CRS_IT_TRIMOVF             CRS_CR_ERRIE          /*!< Trimming overflow or underflow */\r
1244 \r
1245 /**\r
1246   * @}\r
1247   */\r
1248 \r
1249 /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags\r
1250   * @{\r
1251   */\r
1252 #define RCC_CRS_FLAG_SYNCOK            CRS_ISR_SYNCOKF       /*!< SYNC event OK flag     */\r
1253 #define RCC_CRS_FLAG_SYNCWARN          CRS_ISR_SYNCWARNF     /*!< SYNC warning flag      */\r
1254 #define RCC_CRS_FLAG_ERR               CRS_ISR_ERRF          /*!< Error flag        */\r
1255 #define RCC_CRS_FLAG_ESYNC             CRS_ISR_ESYNCF        /*!< Expected SYNC flag     */\r
1256 #define RCC_CRS_FLAG_SYNCERR           CRS_ISR_SYNCERR       /*!< SYNC error */\r
1257 #define RCC_CRS_FLAG_SYNCMISS          CRS_ISR_SYNCMISS      /*!< SYNC missed*/\r
1258 #define RCC_CRS_FLAG_TRIMOVF           CRS_ISR_TRIMOVF       /*!< Trimming overflow or underflow */\r
1259 \r
1260 /**\r
1261   * @}\r
1262   */\r
1263 \r
1264 /**\r
1265   * @}\r
1266   */\r
1267 \r
1268 \r
1269 \r
1270 /* Exported macro ------------------------------------------------------------*/\r
1271 /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros\r
1272   * @{\r
1273   */\r
1274 \r
1275 /** @brief  Macros to enable or disable PLL2.\r
1276   * @note   After enabling PLL2, the application software should wait on\r
1277   *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can\r
1278   *         be used as kernel clock source.\r
1279   * @note   PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r
1280   */\r
1281 #define __HAL_RCC_PLL2_ENABLE()         SET_BIT(RCC->CR, RCC_CR_PLL2ON)\r
1282 #define __HAL_RCC_PLL2_DISABLE()        CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON)\r
1283 \r
1284 /**\r
1285   * @brief  Enables or disables each clock output (PLL2_P_CLK, PLL2_Q_CLK, PLL2_R_CLK)\r
1286   * @note   Enabling/disabling  those Clocks can be done only when the PLL2 is disabled,\r
1287   *         This is mainly used to save Power.\r
1288   * @param  __RCC_PLL2ClockOut__ Specifies the PLL2 clock to be outputted\r
1289   *          This parameter can be one of the following values:\r
1290   *            @arg RCC_PLL2_DIVP: This clock is used to generate system clock (up to 400MHZ)\r
1291   *            @arg RCC_PLL2_DIVQ: This clock is used to generate peripherals clock (up to 400MHZ)\r
1292   *            @arg RCC_PLL2_DIVR: This clock is used to generate peripherals clock (up to 400MHZ)\r
1293   * @retval None\r
1294   */\r
1295 #define __HAL_RCC_PLL2CLKOUT_ENABLE(__RCC_PLL2ClockOut__)   SET_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))\r
1296 \r
1297 #define __HAL_RCC_PLL2CLKOUT_DISABLE(__RCC_PLL2ClockOut__)  CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))\r
1298 \r
1299 /**\r
1300   * @brief  Enables or disables Fractional Part Of The Multiplication Factor of PLL2 VCO\r
1301   * @note   Enabling/disabling  Fractional Part can be any time  without the need to stop the PLL2\r
1302   * @retval None\r
1303   */\r
1304 #define __HAL_RCC_PLL2FRACN_ENABLE()   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)\r
1305 \r
1306 #define __HAL_RCC_PLL2FRACN_DISABLE()  CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)\r
1307 \r
1308 /**\r
1309   * @brief  Macro to configures the PLL2  multiplication and division factors.\r
1310   * @note   This function must be used only when PLL2 is disabled.\r
1311   *\r
1312   * @param  __PLL2M__ specifies the division factor for PLL2 VCO input clock\r
1313   *          This parameter must be a number between 1 and 63.\r
1314   * @note   You have to set the PLLM parameter correctly to ensure that the VCO input\r
1315   *         frequency ranges from 1 to 16 MHz.\r
1316   *\r
1317   * @param  __PLL2N__ specifies the multiplication factor for PLL2 VCO output clock\r
1318   *          This parameter must be a number between 4 and 512.\r
1319   * @note   You have to set the PLL2N parameter correctly to ensure that the VCO\r
1320   *         output frequency is between 150 and 420 MHz (when in medium VCO range) or\r
1321   *         between 192 and 836 MHZ (when in wide VCO range)\r
1322   *\r
1323   * @param  __PLL2P__ specifies the division factor for peripheral kernel clocks\r
1324   *          This parameter must be a number between 2 and 128 (where odd numbers not allowed)\r
1325   *\r
1326   * @param  __PLL2Q__ specifies the division factor for peripheral kernel clocks\r
1327   *          This parameter must be a number between 1 and 128\r
1328   *\r
1329   * @param  __PLL2R__ specifies the division factor for peripheral kernel clocks\r
1330   *          This parameter must be a number between 1 and 128\r
1331   *\r
1332   * @retval None\r
1333   */\r
1334 \r
1335 \r
1336 #define __HAL_RCC_PLL2_CONFIG(__PLL2M__, __PLL2N__, __PLL2P__, __PLL2Q__,__PLL2R__ ) \\r
1337                   do{ MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM2) , ( (__PLL2M__) <<12U));  \\r
1338                          WRITE_REG (RCC->PLL2DIVR , ( (((__PLL2N__) - 1U ) & RCC_PLL2DIVR_N2) | ((((__PLL2P__) -1U ) << 9U) & RCC_PLL2DIVR_P2) | \\r
1339                                    ((((__PLL2Q__) -1U) << 16U) & RCC_PLL2DIVR_Q2) | ((((__PLL2R__)- 1U) << 24U) & RCC_PLL2DIVR_R2))); \\r
1340                        } while(0)\r
1341 /**\r
1342   * @brief  Macro to configures PLL2 clock Fractional Part Of The Multiplication Factor\r
1343   *\r
1344   * @note   These bits can be written at any time, allowing dynamic fine-tuning of the PLL2 VCO\r
1345   *\r
1346   * @param  __RCC_PLL2FRACN__ Specifies Fractional Part Of The Multiplication factor for PLL2 VCO\r
1347   *                           It should be a value between 0 and 8191\r
1348   * @note   Warning: the software has to set correctly these bits to insure that the VCO\r
1349   *                  output frequency is between its valid frequency range, which is:\r
1350   *                  192 to 836 MHz if PLL2VCOSEL = 0\r
1351   *                  150 to 420 MHz if PLL2VCOSEL = 1.\r
1352   *\r
1353   *\r
1354   * @retval None\r
1355   */\r
1356   #define  __HAL_RCC_PLL2FRACN_CONFIG(__RCC_PLL2FRACN__) MODIFY_REG(RCC->PLL2FRACR, RCC_PLL2FRACR_FRACN2,(uint32_t)(__RCC_PLL2FRACN__) << RCC_PLL2FRACR_FRACN2_Pos)\r
1357 \r
1358 /** @brief  Macro to select  the PLL2  reference frequency range.\r
1359   * @param  __RCC_PLL2VCIRange__ specifies the PLL2 input frequency range\r
1360   *         This parameter can be one of the following values:\r
1361   *            @arg RCC_PLL2VCIRANGE_0: Range frequency is between 1 and 2 MHz\r
1362   *            @arg RCC_PLL2VCIRANGE_1: Range frequency is between 2 and 4 MHz\r
1363   *            @arg RCC_PLL2VCIRANGE_2: Range frequency is between 4 and 8 MHz\r
1364   *            @arg RCC_PLL2VCIRANGE_3: Range frequency is between 8 and 16 MHz\r
1365   * @retval None\r
1366   */\r
1367 #define __HAL_RCC_PLL2_VCIRANGE(__RCC_PLL2VCIRange__) \\r
1368                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2RGE, (__RCC_PLL2VCIRange__))\r
1369 \r
1370 \r
1371 /** @brief  Macro to select  the PLL2  reference frequency range.\r
1372   * @param  __RCC_PLL2VCORange__ Specifies the PLL2 input frequency range\r
1373   *         This parameter can be one of the following values:\r
1374   *            @arg RCC_PLL2VCOWIDE: Range frequency is between 192 and 836 MHz\r
1375   *            @arg RCC_PLL2VCOMEDIUM: Range frequency is between 150 and 420 MHz\r
1376   * @retval None\r
1377   */\r
1378 #define __HAL_RCC_PLL2_VCORANGE(__RCC_PLL2VCORange__) \\r
1379                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2VCOSEL, (__RCC_PLL2VCORange__))\r
1380 \r
1381 /** @brief  Macros to enable or disable the main PLL3.\r
1382   * @note   After enabling  PLL3, the application software should wait on\r
1383   *         PLL3RDY flag to be set indicating that PLL3 clock is stable and can\r
1384   *         be used as kernel clock source.\r
1385   * @note   PLL3 is disabled by hardware when entering STOP and STANDBY modes.\r
1386   */\r
1387 #define __HAL_RCC_PLL3_ENABLE()         SET_BIT(RCC->CR, RCC_CR_PLL3ON)\r
1388 #define __HAL_RCC_PLL3_DISABLE()        CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON)\r
1389 \r
1390 /**\r
1391   * @brief  Enables or disables Fractional Part Of The Multiplication Factor of PLL3 VCO\r
1392   * @note   Enabling/disabling  Fractional Part can be any time  without the need to stop the PLL3\r
1393   * @retval None\r
1394   */\r
1395 #define __HAL_RCC_PLL3FRACN_ENABLE()   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)\r
1396 \r
1397 #define __HAL_RCC_PLL3FRACN_DISABLE()  CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)\r
1398 \r
1399 /**\r
1400   * @brief  Enables or disables each clock output (PLL3_P_CLK, PLL3_Q_CLK, PLL3_R_CLK)\r
1401   * @note   Enabling/disabling  those Clocks can be done only when the PLL3 is disabled,\r
1402   *         This is mainly used to save Power.\r
1403   * @param  __RCC_PLL3ClockOut__ specifies the PLL3 clock to be outputted\r
1404   *          This parameter can be one of the following values:\r
1405   *            @arg RCC_PLL3_DIVP: This clock is used to generate system clock (up to 400MHZ)\r
1406   *            @arg RCC_PLL3_DIVQ: This clock is used to generate peripherals clock (up to 400MHZ)\r
1407   *            @arg RCC_PLL3_DIVR: This clock is used to generate peripherals clock (up to 400MHZ)\r
1408   * @retval None\r
1409   */\r
1410 #define __HAL_RCC_PLL3CLKOUT_ENABLE(__RCC_PLL3ClockOut__)   SET_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))\r
1411 \r
1412 #define __HAL_RCC_PLL3CLKOUT_DISABLE(__RCC_PLL3ClockOut__)  CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))\r
1413 \r
1414 /**\r
1415   * @brief  Macro to configures the PLL3  multiplication and division factors.\r
1416   * @note   This function must be used only when PLL3 is disabled.\r
1417   *\r
1418   * @param  __PLL3M__ specifies the division factor for PLL3 VCO input clock\r
1419   *          This parameter must be a number between 1 and 63.\r
1420   * @note   You have to set the PLLM parameter correctly to ensure that the VCO input\r
1421   *         frequency ranges from 1 to 16 MHz.\r
1422   *\r
1423   * @param  __PLL3N__ specifies the multiplication factor for PLL3 VCO output clock\r
1424   *          This parameter must be a number between 4 and 512.\r
1425   * @note   You have to set the PLL3N parameter correctly to ensure that the VCO\r
1426   *         output frequency is between 150 and 420 MHz (when in medium VCO range) or\r
1427   *         between 192 and 836 MHZ (when in wide VCO range)\r
1428   *\r
1429   * @param  __PLL3P__ specifies the division factor for peripheral kernel clocks\r
1430   *          This parameter must be a number between 2 and 128 (where odd numbers not allowed)\r
1431   *\r
1432   * @param  __PLL3Q__ specifies the division factor for peripheral kernel clocks\r
1433   *          This parameter must be a number between 1 and 128\r
1434   *\r
1435   * @param  __PLL3R__ specifies the division factor for peripheral kernel clocks\r
1436   *          This parameter must be a number between 1 and 128\r
1437   *\r
1438   * @retval None\r
1439   */\r
1440 \r
1441 #define __HAL_RCC_PLL3_CONFIG(__PLL3M__, __PLL3N__, __PLL3P__, __PLL3Q__,__PLL3R__ ) \\r
1442                   do{ MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM3) , ( (__PLL3M__) <<20U));  \\r
1443                          WRITE_REG (RCC->PLL3DIVR , ( (((__PLL3N__) - 1U ) & RCC_PLL3DIVR_N3) | ((((__PLL3P__) -1U ) << 9U) & RCC_PLL3DIVR_P3) | \\r
1444                                    ((((__PLL3Q__) -1U) << 16U) & RCC_PLL3DIVR_Q3) | ((((__PLL3R__) - 1U) << 24U) & RCC_PLL3DIVR_R3))); \\r
1445                        } while(0)\r
1446 \r
1447 \r
1448 \r
1449 /**\r
1450   * @brief  Macro to configures  PLL3 clock Fractional Part of The Multiplication Factor\r
1451   *\r
1452   * @note   These bits can be written at any time, allowing dynamic fine-tuning of the PLL3 VCO\r
1453   *\r
1454   * @param  __RCC_PLL3FRACN__ specifies Fractional Part Of The Multiplication Factor for PLL3 VCO\r
1455   *                            It should be a value between 0 and 8191\r
1456   * @note   Warning: the software has to set correctly these bits to insure that the VCO\r
1457   *                  output frequency is between its valid frequency range, which is:\r
1458   *                  192 to 836 MHz if PLL3VCOSEL = 0\r
1459   *                  150 to 420 MHz if PLL3VCOSEL = 1.\r
1460   *\r
1461   *\r
1462   * @retval None\r
1463   */\r
1464  #define  __HAL_RCC_PLL3FRACN_CONFIG(__RCC_PLL3FRACN__) MODIFY_REG(RCC->PLL3FRACR, RCC_PLL3FRACR_FRACN3, (uint32_t)(__RCC_PLL3FRACN__) << RCC_PLL3FRACR_FRACN3_Pos)\r
1465 \r
1466 /** @brief  Macro to select  the PLL3  reference frequency range.\r
1467   * @param  __RCC_PLL3VCIRange__ specifies the PLL1 input frequency range\r
1468   *         This parameter can be one of the following values:\r
1469   *            @arg RCC_PLL3VCIRANGE_0: Range frequency is between 1 and 2 MHz\r
1470   *            @arg RCC_PLL3VCIRANGE_1: Range frequency is between 2 and 4 MHz\r
1471   *            @arg RCC_PLL3VCIRANGE_2: Range frequency is between 4 and 8 MHz\r
1472   *            @arg RCC_PLL3VCIRANGE_3: Range frequency is between 8 and 16 MHz\r
1473   * @retval None\r
1474   */\r
1475 #define __HAL_RCC_PLL3_VCIRANGE(__RCC_PLL3VCIRange__) \\r
1476                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3RGE, (__RCC_PLL3VCIRange__))\r
1477 \r
1478 \r
1479 /** @brief  Macro to select  the PLL3  reference frequency range.\r
1480   * @param  __RCC_PLL3VCORange__ specifies the PLL1 input frequency range\r
1481   *         This parameter can be one of the following values:\r
1482   *            @arg RCC_PLL3VCOWIDE: Range frequency is between 192 and 836 MHz\r
1483   *            @arg RCC_PLL3VCOMEDIUM: Range frequency is between 150 and 420 MHz\r
1484   * @retval None\r
1485   */\r
1486 #define __HAL_RCC_PLL3_VCORANGE(__RCC_PLL3VCORange__) \\r
1487                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3VCOSEL, (__RCC_PLL3VCORange__))\r
1488 /**\r
1489   * @brief  Macro to Configure the SAI1 clock source.\r
1490   * @param  __RCC_SAI1CLKSource__ defines the SAI1 clock source. This clock is derived\r
1491   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1492   *          This parameter can be one of the following values:\r
1493   *             @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL\r
1494   *             @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2\r
1495   *             @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3\r
1496   *             @arg RCC_SAI1CLKSOURCE_OSC: SAI1 clock  = OSC\r
1497   *             @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock\r
1498   * @retval None\r
1499   */\r
1500 #define __HAL_RCC_SAI1_CONFIG(__RCC_SAI1CLKSource__ )\\r
1501                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL, (__RCC_SAI1CLKSource__))\r
1502 \r
1503 /** @brief  Macro to get the SAI1 clock source.\r
1504   * @retval The clock source can be one of the following values:\r
1505   *             @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL\r
1506   *             @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2\r
1507   *             @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3\r
1508   *             @arg RCC_SAI1CLKSOURCE_CLKP: SAI1 clock  = CLKP\r
1509   *             @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock\r
1510   */\r
1511 #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL)))\r
1512 \r
1513 /**\r
1514   * @brief  Macro to Configure the SPDIFRX clock source.\r
1515   * @param  __RCC_SPDIFCLKSource__ defines the SPDIFRX clock source. This clock is derived\r
1516   *         from system PLL, PLL2, PLL3,  or internal OSC clock\r
1517   *          This parameter can be one of the following values:\r
1518   *             @arg RCC_SPDIFRXCLKSOURCE_PLL:  SPDIFRX clock = PLL\r
1519   *             @arg RCC_SPDIFRXCLKSOURCE_PLL2: SPDIFRX clock = PLL2\r
1520   *             @arg RCC_SPDIFRXCLKSOURCE_PLL3: SPDIFRX clock = PLL3\r
1521   *             @arg RCC_SPDIFRXCLKSOURCE_HSI:  SPDIFRX clock  = HSI\r
1522   * @retval None\r
1523   */\r
1524 #define __HAL_RCC_SPDIFRX_CONFIG(__RCC_SPDIFCLKSource__ )\\r
1525                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL, (__RCC_SPDIFCLKSource__))\r
1526 /**\r
1527   * @brief  Macro to get the SPDIFRX clock source.\r
1528   * @retval None\r
1529   */\r
1530 #define __HAL_RCC_GET_SPDIFRX_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL)))\r
1531 \r
1532 /**\r
1533   * @brief  Macro to Configure the SAI2/3 clock source.\r
1534   * @param  __RCC_SAI23CLKSource__ defines the SAI2/3 clock source. This clock is derived\r
1535   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1536   *          This parameter can be one of the following values:\r
1537   *             @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL\r
1538   *             @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2\r
1539   *             @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3\r
1540   *             @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock  = CLKP\r
1541   *             @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock\r
1542   * @retval None\r
1543   */\r
1544 #define __HAL_RCC_SAI23_CONFIG(__RCC_SAI23CLKSource__ )\\r
1545                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL, (__RCC_SAI23CLKSource__))\r
1546 \r
1547 /** @brief  Macro to get the SAI2/3 clock source.\r
1548   * @retval The clock source can be one of the following values:\r
1549   *             @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL\r
1550   *             @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2\r
1551   *             @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3\r
1552   *             @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock  = CLKP\r
1553   *             @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock\r
1554   */\r
1555 #define __HAL_RCC_GET_SAI23_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL)))\r
1556 \r
1557 /**\r
1558   * @brief  Macro to Configure the SAI2 clock source.\r
1559   * @param  __RCC_SAI2CLKSource__ defines the SAI2 clock source. This clock is derived\r
1560   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1561   *          This parameter can be one of the following values:\r
1562   *             @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL\r
1563   *             @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2\r
1564   *             @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3\r
1565   *             @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock  = CLKP\r
1566   *             @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock\r
1567   * @retval None\r
1568   */\r
1569 #define __HAL_RCC_SAI2_CONFIG(__RCC_SAI2CLKSource__ )\\r
1570                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL, (__RCC_SAI2CLKSource__))\r
1571 \r
1572 /** @brief  Macro to get the SAI2 clock source.\r
1573   * @retval The clock source can be one of the following values:\r
1574   *             @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL\r
1575   *             @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2\r
1576   *             @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3\r
1577   *             @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock  = CLKP\r
1578   *             @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock\r
1579   */\r
1580 #define __HAL_RCC_GET_SAI2_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL)))\r
1581 \r
1582 /**\r
1583   * @brief  Macro to Configure the SAI3 clock source.\r
1584   * @param  __RCC_SAI3CLKSource__ defines the SAI3 clock source. This clock is derived\r
1585   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1586   *          This parameter can be one of the following values:\r
1587   *             @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL\r
1588   *             @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2\r
1589   *             @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3\r
1590   *             @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock  = CLKP\r
1591   *             @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock\r
1592   * @retval None\r
1593   */\r
1594 #define __HAL_RCC_SAI3_CONFIG(__RCC_SAI3CLKSource__ )\\r
1595                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL, (__RCC_SAI3CLKSource__))\r
1596 \r
1597 /** @brief  Macro to get the SAI3 clock source.\r
1598   * @retval The clock source can be one of the following values:\r
1599   *             @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL\r
1600   *             @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2\r
1601   *             @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3\r
1602   *             @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock  = CLKP\r
1603   *             @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock\r
1604   */\r
1605 #define __HAL_RCC_GET_SAI3_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL)))\r
1606 \r
1607 /**\r
1608   * @brief  Macro to Configure the SAI4A clock source.\r
1609   * @param  __RCC_SAI4ACLKSource__ defines the SAI4A clock source. This clock is derived\r
1610   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1611   *          This parameter can be one of the following values:\r
1612   *             @arg RCC_SAI4ACLKSOURCE_PLL: SAI4A clock = PLL\r
1613   *             @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4A clock = PLL2\r
1614   *             @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4A clock = PLL3\r
1615   *             @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4A clock  = CLKP\r
1616   *             @arg RCC_SAI4ACLKSOURCE_PIN: SAI4A clock = External Clock\r
1617   * @retval None\r
1618   */\r
1619 #define __HAL_RCC_SAI4A_CONFIG(__RCC_SAI4ACLKSource__ )\\r
1620                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL, (__RCC_SAI4ACLKSource__))\r
1621 \r
1622 /** @brief  Macro to get the SAI4A clock source.\r
1623   * @retval The clock source can be one of the following values:\r
1624   *             @arg RCC_SAI4ACLKSOURCE_PLL: SAI4B clock = PLL\r
1625   *             @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4B clock = PLL2\r
1626   *             @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4B clock = PLL3\r
1627   *             @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4B clock  = CLKP\r
1628   *             @arg RCC_SAI4ACLKSOURCE_PIN: SAI4B clock = External Clock\r
1629   */\r
1630 #define __HAL_RCC_GET_SAI4A_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL)))\r
1631 \r
1632 /**\r
1633   * @brief  Macro to Configure the SAI4B clock source.\r
1634   * @param  __RCC_SAI4BCLKSource__ defines the SAI4B clock source. This clock is derived\r
1635   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
1636   *          This parameter can be one of the following values:\r
1637   *             @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL\r
1638   *             @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2\r
1639   *             @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3\r
1640   *             @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock  = CLKP\r
1641   *             @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock\r
1642   * @retval None\r
1643   */\r
1644 #define __HAL_RCC_SAI4B_CONFIG(__RCC_SAI4BCLKSource__ )\\r
1645                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL, (__RCC_SAI4BCLKSource__))\r
1646 \r
1647 /** @brief  Macro to get the SAI4B clock source.\r
1648   * @retval The clock source can be one of the following values:\r
1649   *             @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL\r
1650   *             @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2\r
1651   *             @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3\r
1652   *             @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock  = CLKP\r
1653   *             @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock\r
1654   */\r
1655 #define __HAL_RCC_GET_SAI4B_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL)))\r
1656 \r
1657 /** @brief macro to configure the I2C1/2/3 clock (I2C123CLK).\r
1658   *\r
1659   * @param  __I2C123CLKSource__ specifies the I2C1/2/3 clock source.\r
1660   *          This parameter can be one of the following values:\r
1661   *            @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3 clock\r
1662   *            @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3 clock\r
1663   *            @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3 clock\r
1664   *            @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3 clock\r
1665   */\r
1666 #define __HAL_RCC_I2C123_CONFIG(__I2C123CLKSource__) \\r
1667                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C123CLKSource__))\r
1668 \r
1669 /** @brief  macro to get the I2C1/2/3 clock source.\r
1670   * @retval The clock source can be one of the following values:\r
1671   *            @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3 clock\r
1672   *            @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3 clock\r
1673   *            @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3 clock\r
1674   *            @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3 clock\r
1675   */\r
1676 #define __HAL_RCC_GET_I2C123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))\r
1677 \r
1678 /** @brief macro to configure the I2C1 clock (I2C1CLK).\r
1679   *\r
1680   * @param  __I2C1CLKSource__ specifies the I2C1 clock source.\r
1681   *          This parameter can be one of the following values:\r
1682   *            @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock\r
1683   *            @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock\r
1684   *            @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock\r
1685   *            @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock\r
1686   */\r
1687 #define __HAL_RCC_I2C1_CONFIG(__I2C1CLKSource__) \\r
1688                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C1CLKSource__))\r
1689 \r
1690 /** @brief  macro to get the I2C1 clock source.\r
1691   * @retval The clock source can be one of the following values:\r
1692 *            @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock\r
1693   *            @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock\r
1694   *            @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock\r
1695   *            @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock\r
1696   */\r
1697 #define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))\r
1698 \r
1699 /** @brief macro to configure the I2C2 clock (I2C2CLK).\r
1700   *\r
1701   * @param  __I2C2CLKSource__ specifies the I2C2 clock source.\r
1702   *          This parameter can be one of the following values:\r
1703   *            @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock\r
1704   *            @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock\r
1705   *            @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock\r
1706   *            @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock\r
1707   */\r
1708 #define __HAL_RCC_I2C2_CONFIG(__I2C2CLKSource__) \\r
1709                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C2CLKSource__))\r
1710 \r
1711 /** @brief  macro to get the I2C2 clock source.\r
1712   * @retval The clock source can be one of the following values:\r
1713   *            @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock\r
1714   *            @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock\r
1715   *            @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock\r
1716   *            @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock\r
1717   */\r
1718 #define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))\r
1719 \r
1720 /** @brief macro to configure the I2C3 clock (I2C3CLK).\r
1721   *\r
1722   * @param  __I2C3CLKSource__ specifies the I2C3 clock source.\r
1723   *          This parameter can be one of the following values:\r
1724   *            @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock\r
1725   *            @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock\r
1726   *            @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock\r
1727   *            @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock\r
1728   */\r
1729 #define __HAL_RCC_I2C3_CONFIG(__I2C3CLKSource__) \\r
1730                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C3CLKSource__))\r
1731 \r
1732 /** @brief  macro to get the I2C3 clock source.\r
1733   * @retval The clock source can be one of the following values:\r
1734   *            @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock\r
1735   *            @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock\r
1736   *            @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock\r
1737   *            @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock\r
1738   */\r
1739 #define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))\r
1740 \r
1741 /** @brief macro to configure the I2C4 clock (I2C4CLK).\r
1742   *\r
1743   * @param  __I2C4CLKSource__ specifies the I2C4 clock source.\r
1744   *          This parameter can be one of the following values:\r
1745   *            @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock\r
1746   *            @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock\r
1747   *            @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock\r
1748   *            @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock\r
1749   */\r
1750 #define __HAL_RCC_I2C4_CONFIG(__I2C4CLKSource__) \\r
1751                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL, (uint32_t)(__I2C4CLKSource__))\r
1752 \r
1753 /** @brief  macro to get the I2C4 clock source.\r
1754   * @retval The clock source can be one of the following values:\r
1755   *            @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock\r
1756   *            @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock\r
1757   *            @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock\r
1758   *            @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock\r
1759   */\r
1760 #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL)))\r
1761 \r
1762 /** @brief macro to configure the USART1/6 clock (USART16CLK).\r
1763   *\r
1764   * @param  __USART16CLKSource__ specifies the USART1/6 clock source.\r
1765   *          This parameter can be one of the following values:\r
1766   *            @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6 clock\r
1767   *            @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6 clock\r
1768   *            @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6 clock\r
1769   *            @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6 clock\r
1770   *            @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6 clock\r
1771   *            @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6 clock\r
1772   */\r
1773 #define __HAL_RCC_USART16_CONFIG(__USART16CLKSource__) \\r
1774                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL, (uint32_t)(__USART16CLKSource__))\r
1775 \r
1776 /** @brief  macro to get the USART1/6 clock source.\r
1777   * @retval The clock source can be one of the following values:\r
1778   *            @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6 clock\r
1779   *            @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6 clock\r
1780   *            @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6 clock\r
1781   *            @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6 clock\r
1782   *            @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6 clock\r
1783   *            @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6 clock\r
1784   */\r
1785 #define __HAL_RCC_GET_USART16_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL)))\r
1786 \r
1787 /** @brief macro to configure the USART234578 clock (USART234578CLK).\r
1788   *\r
1789   * @param  __USART234578CLKSource__ specifies the USART2/3/4/5/7/8 clock source.\r
1790   *          This parameter can be one of the following values:\r
1791   *            @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock\r
1792   *            @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock\r
1793   *            @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock\r
1794   *            @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock\r
1795   *            @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock\r
1796   *            @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock\r
1797   */\r
1798 #define __HAL_RCC_USART234578_CONFIG(__USART234578CLKSource__) \\r
1799                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__USART234578CLKSource__))\r
1800 \r
1801 /** @brief  macro to get the USART2/3/4/5/7/8 clock source.\r
1802   * @retval The clock source can be one of the following values:\r
1803   *            @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock\r
1804   *            @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock\r
1805   *            @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock\r
1806   *            @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock\r
1807   *            @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock\r
1808   *            @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock\r
1809   */\r
1810 #define __HAL_RCC_GET_USART234578_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1811 \r
1812 /** @brief macro to configure the USART1 clock (USART1CLK).\r
1813   *\r
1814   * @param  __USART1CLKSource__ specifies the USART1 clock source.\r
1815   *          This parameter can be one of the following values:\r
1816   *            @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock\r
1817   *            @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock\r
1818   *            @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock\r
1819   *            @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock\r
1820   *            @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock\r
1821   *            @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock\r
1822   */\r
1823 #define __HAL_RCC_USART1_CONFIG(__USART1CLKSource__) \\r
1824                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL, (uint32_t)(__USART1CLKSource__))\r
1825 \r
1826 /** @brief  macro to get the USART1 clock source.\r
1827   * @retval The clock source can be one of the following values:\r
1828   *            @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock\r
1829   *            @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock\r
1830   *            @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock\r
1831   *            @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock\r
1832   *            @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock\r
1833   *            @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock\r
1834   */\r
1835 #define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL)))\r
1836 \r
1837 /** @brief macro to configure the USART2 clock (USART2CLK).\r
1838   *\r
1839   * @param  __USART2CLKSource__ specifies the USART2 clock source.\r
1840   *          This parameter can be one of the following values:\r
1841   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock\r
1842   *            @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock\r
1843   *            @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock\r
1844   *            @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock\r
1845   *            @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock\r
1846   *            @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock\r
1847   */\r
1848 #define __HAL_RCC_USART2_CONFIG(__USART2CLKSource__) \\r
1849                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__USART2CLKSource__))\r
1850 \r
1851 /** @brief  macro to get the USART2 clock source.\r
1852   * @retval The clock source can be one of the following values:\r
1853   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock\r
1854   *            @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock\r
1855   *            @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock\r
1856   *            @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock\r
1857   *            @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock\r
1858   *            @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock\r
1859   */\r
1860 #define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1861 \r
1862 /** @brief macro to configure the USART3 clock (USART3CLK).\r
1863   *\r
1864   * @param  __USART3CLKSource__ specifies the USART3 clock source.\r
1865   *          This parameter can be one of the following values:\r
1866   *            @arg RCC_USART3CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock\r
1867   *            @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock\r
1868   *            @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock\r
1869   *            @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock\r
1870   *            @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock\r
1871   *            @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock\r
1872   */\r
1873 #define __HAL_RCC_USART3_CONFIG(__USART3CLKSource__) \\r
1874                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__USART3CLKSource__))\r
1875 \r
1876 /** @brief  macro to get the USART3 clock source.\r
1877   * @retval The clock source can be one of the following values:\r
1878   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock\r
1879   *            @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock\r
1880   *            @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock\r
1881   *            @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock\r
1882   *            @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock\r
1883   *            @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock\r
1884   */\r
1885 #define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1886 \r
1887 /** @brief macro to configure the UART4 clock (UART4CLK).\r
1888   *\r
1889   * @param  __UART4CLKSource__ specifies the UART4 clock source.\r
1890   *          This parameter can be one of the following values:\r
1891   *            @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock\r
1892   *            @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock\r
1893   *            @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock\r
1894   *            @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock\r
1895   *            @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock\r
1896   *            @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock\r
1897   */\r
1898 #define __HAL_RCC_UART4_CONFIG(__UART4CLKSource__) \\r
1899                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__UART4CLKSource__))\r
1900 \r
1901 /** @brief  macro to get the UART4 clock source.\r
1902   * @retval The clock source can be one of the following values:\r
1903   *            @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock\r
1904   *            @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock\r
1905   *            @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock\r
1906   *            @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock\r
1907   *            @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock\r
1908   *            @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock\r
1909   */\r
1910 #define __HAL_RCC_GET_UART4_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1911 \r
1912 /** @brief macro to configure the UART5 clock (UART5CLK).\r
1913   *\r
1914   * @param  __UART5CLKSource__ specifies the UART5 clock source.\r
1915   *          This parameter can be one of the following values:\r
1916   *            @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock\r
1917   *            @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock\r
1918   *            @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock\r
1919   *            @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock\r
1920   *            @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock\r
1921   *            @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock\r
1922   */\r
1923 #define __HAL_RCC_UART5_CONFIG(__UART5CLKSource__) \\r
1924                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__UART5CLKSource__))\r
1925 \r
1926 /** @brief  macro to get the UART5 clock source.\r
1927   * @retval The clock source can be one of the following values:\r
1928   *            @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock\r
1929   *            @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock\r
1930   *            @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock\r
1931   *            @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock\r
1932   *            @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock\r
1933   *            @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock\r
1934   */\r
1935 #define __HAL_RCC_GET_UART5_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1936 \r
1937 /** @brief macro to configure the USART6 clock (USART6CLK).\r
1938   *\r
1939   * @param  __USART6CLKSource__ specifies the USART6 clock source.\r
1940   *          This parameter can be one of the following values:\r
1941   *            @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock\r
1942   *            @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock\r
1943   *            @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock\r
1944   *            @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock\r
1945   *            @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock\r
1946   *            @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock\r
1947   */\r
1948 #define __HAL_RCC_USART6_CONFIG(__USART6CLKSource__) \\r
1949                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL, (uint32_t)(__USART6CLKSource__))\r
1950 \r
1951 /** @brief  macro to get the USART6 clock source.\r
1952   * @retval The clock source can be one of the following values:\r
1953   *            @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock\r
1954   *            @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock\r
1955   *            @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock\r
1956   *            @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock\r
1957   *            @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock\r
1958   *            @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock\r
1959   */\r
1960 #define __HAL_RCC_GET_USART6_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL)))\r
1961 \r
1962 /** @brief macro to configure the UART5 clock (UART7CLK).\r
1963   *\r
1964   * @param  __UART7CLKSource__ specifies the UART7 clock source.\r
1965   *          This parameter can be one of the following values:\r
1966   *            @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock\r
1967   *            @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock\r
1968   *            @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock\r
1969   *            @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock\r
1970   *            @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock\r
1971   *            @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock\r
1972   */\r
1973 #define __HAL_RCC_UART7_CONFIG(__UART7CLKSource__) \\r
1974                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__UART7CLKSource__))\r
1975 \r
1976 /** @brief  macro to get the UART7 clock source.\r
1977   * @retval The clock source can be one of the following values:\r
1978   *            @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock\r
1979   *            @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock\r
1980   *            @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock\r
1981   *            @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock\r
1982   *            @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock\r
1983   *            @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock\r
1984   */\r
1985 #define __HAL_RCC_GET_UART7_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
1986 \r
1987 /** @brief macro to configure the UART8 clock (UART8CLK).\r
1988   *\r
1989   * @param  __UART8CLKSource__ specifies the UART8 clock source.\r
1990   *          This parameter can be one of the following values:\r
1991   *            @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock\r
1992   *            @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock\r
1993   *            @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock\r
1994   *            @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock\r
1995   *            @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock\r
1996   *            @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock\r
1997   */\r
1998 #define __HAL_RCC_UART8_CONFIG(__UART8CLKSource__) \\r
1999                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__UART8CLKSource__))\r
2000 \r
2001 /** @brief  macro to get the UART8 clock source.\r
2002   * @retval The clock source can be one of the following values:\r
2003   *            @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock\r
2004   *            @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock\r
2005   *            @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock\r
2006   *            @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock\r
2007   *            @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock\r
2008   *            @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock\r
2009   */\r
2010 #define __HAL_RCC_GET_UART8_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))\r
2011 \r
2012 /** @brief macro to configure the LPUART1 clock (LPUART1CLK).\r
2013   *\r
2014   * @param  __LPUART1CLKSource__ specifies the LPUART1 clock source.\r
2015   *          This parameter can be one of the following values:\r
2016   *            @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock\r
2017   *            @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock\r
2018   *            @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock\r
2019   *            @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock\r
2020   *            @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock\r
2021   *            @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock\r
2022   */\r
2023 #define __HAL_RCC_LPUART1_CONFIG(__LPUART1CLKSource__) \\r
2024                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL, (uint32_t)(__LPUART1CLKSource__))\r
2025 \r
2026 /** @brief  macro to get the LPUART1 clock source.\r
2027   * @retval The clock source can be one of the following values:\r
2028   *            @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock\r
2029   *            @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock\r
2030   *            @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock\r
2031   *            @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock\r
2032   *            @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock\r
2033   *            @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock\r
2034   */\r
2035 #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL)))\r
2036 \r
2037 /** @brief  macro to configure the LPTIM1 clock source.\r
2038   *\r
2039   * @param  __LPTIM1CLKSource__ specifies the LPTIM1 clock source.\r
2040   *          This parameter can be one of the following values:\r
2041   *            @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock\r
2042   *            @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock\r
2043   *            @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock\r
2044   *            @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock\r
2045   *            @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock\r
2046   *            @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock\r
2047   */\r
2048 #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1CLKSource__) \\r
2049                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL, (uint32_t)(__LPTIM1CLKSource__))\r
2050 \r
2051 \r
2052 /** @brief  macro to get the LPTIM1 clock source.\r
2053   * @retval The clock source can be one of the following values:\r
2054   *            @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock\r
2055   *            @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock\r
2056   *            @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock\r
2057   *            @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock\r
2058   *            @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock\r
2059   *            @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock\r
2060   */\r
2061 #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL)))\r
2062 \r
2063 /** @brief  macro to configure the LPTIM2 clock source.\r
2064   *\r
2065   * @param  __LPTIM2CLKSource__ specifies the LPTIM2 clock source.\r
2066   *          This parameter can be one of the following values:\r
2067   *            @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock\r
2068   *            @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock\r
2069   *            @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock\r
2070   *            @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock\r
2071   *            @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock\r
2072   *            @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock\r
2073   */\r
2074 #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2CLKSource__) \\r
2075                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2CLKSource__))\r
2076 \r
2077 \r
2078 /** @brief  macro to get the LPTIM2 clock source.\r
2079   * @retval The clock source can be one of the following values:\r
2080   *            @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock\r
2081   *            @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock\r
2082   *            @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock\r
2083   *            @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock\r
2084   *            @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock\r
2085   *            @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock\r
2086   */\r
2087 #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL)))\r
2088 \r
2089 /** @brief  macro to configure the LPTIM3/4/5 clock source.\r
2090   *\r
2091   * @param  __LPTIM345CLKSource__ specifies the LPTIM3/4/5 clock source.\r
2092   *            @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock\r
2093   *            @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock\r
2094   *            @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock\r
2095   *            @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock\r
2096   *            @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock\r
2097   *            @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock\r
2098   */\r
2099 #define __HAL_RCC_LPTIM345_CONFIG(__LPTIM345CLKSource__) \\r
2100                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM345CLKSource__))\r
2101 \r
2102 \r
2103 /** @brief  macro to get the LPTIM3/4/5 clock source.\r
2104   * @retval The clock source can be one of the following values:\r
2105   *            @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock\r
2106   *            @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock\r
2107   *            @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock\r
2108   *            @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock\r
2109   *            @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock\r
2110   *            @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock\r
2111   */\r
2112 #define __HAL_RCC_GET_LPTIM345_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))\r
2113 \r
2114 /** @brief  macro to configure the LPTIM3 clock source.\r
2115   *\r
2116   * @param  __LPTIM3CLKSource__ specifies the LPTIM3 clock source.\r
2117   *            @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock\r
2118   *            @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock\r
2119   *            @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock\r
2120   *            @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock\r
2121   *            @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock\r
2122   *            @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock\r
2123   */\r
2124 #define __HAL_RCC_LPTIM3_CONFIG(__LPTIM3CLKSource__) \\r
2125                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM3CLKSource__))\r
2126 \r
2127 \r
2128 /** @brief  macro to get the LPTIM3 clock source.\r
2129   * @retval The clock source can be one of the following values:\r
2130   *            @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock\r
2131   *            @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock\r
2132   *            @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock\r
2133   *            @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock\r
2134   *            @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock\r
2135   *            @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock\r
2136   */\r
2137 #define __HAL_RCC_GET_LPTIM3_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))\r
2138 \r
2139 /** @brief  macro to configure the LPTIM4 clock source.\r
2140   *\r
2141   * @param  __LPTIM4CLKSource__ specifies the LPTIM4 clock source.\r
2142   *            @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock\r
2143   *            @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock\r
2144   *            @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock\r
2145   *            @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock\r
2146   *            @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock\r
2147   *            @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock\r
2148   */\r
2149 #define __HAL_RCC_LPTIM4_CONFIG(__LPTIM4CLKSource__) \\r
2150                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM4CLKSource__))\r
2151 \r
2152 \r
2153 /** @brief  macro to get the LPTIM4 clock source.\r
2154   * @retval The clock source can be one of the following values:\r
2155   *            @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock\r
2156   *            @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock\r
2157   *            @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock\r
2158   *            @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock\r
2159   *            @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock\r
2160   *            @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock\r
2161   */\r
2162 #define __HAL_RCC_GET_LPTIM4_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))\r
2163 \r
2164 /** @brief  macro to configure the LPTIM5 clock source.\r
2165   *\r
2166   * @param  __LPTIM5CLKSource__ specifies the LPTIM5 clock source.\r
2167   *            @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock\r
2168   *            @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock\r
2169   *            @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock\r
2170   *            @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock\r
2171   *            @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock\r
2172   *            @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock\r
2173   */\r
2174 #define __HAL_RCC_LPTIM5_CONFIG(__LPTIM5CLKSource__) \\r
2175                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM5CLKSource__))\r
2176 \r
2177 \r
2178 /** @brief  macro to get the LPTIM5 clock source.\r
2179   * @retval The clock source can be one of the following values:\r
2180   *            @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock\r
2181   *            @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock\r
2182   *            @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock\r
2183   *            @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock\r
2184   *            @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock\r
2185   *            @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock\r
2186   */\r
2187 #define __HAL_RCC_GET_LPTIM5_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))\r
2188 \r
2189 /** @brief  macro to configure the QSPI clock source.\r
2190   *\r
2191   * @param  __QSPICLKSource__ specifies the QSPI clock source.\r
2192   *            @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock\r
2193   *            @arg RCC_RCC_QSPICLKSOURCE_PLL   : PLL1_Q Clock selected as QSPI clock\r
2194   *            @arg RCC_RCC_QSPICLKSOURCE_PLL2  : PLL2_R Clock selected as QSPI clock\r
2195   *            @arg RCC_RCC_QSPICLKSOURCE_CLKP    CLKP selected as QSPI clock\r
2196   */\r
2197 #define __HAL_RCC_QSPI_CONFIG(__QSPICLKSource__) \\r
2198                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL, (uint32_t)(__QSPICLKSource__))\r
2199 \r
2200 \r
2201 /** @brief  macro to get the QSPI clock source.\r
2202   * @retval The clock source can be one of the following values:\r
2203   *            @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock\r
2204   *            @arg RCC_RCC_QSPICLKSOURCE_PLL   : PLL1_Q Clock selected as QSPI clock\r
2205   *            @arg RCC_RCC_QSPICLKSOURCE_PLL2  : PLL2_R Clock selected as QSPI clock\r
2206   *            @arg RCC_RCC_QSPICLKSOURCE_CLKP    CLKP selected as QSPI clock\r
2207   */\r
2208 #define __HAL_RCC_GET_QSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL)))\r
2209 \r
2210 #if defined(DSI)\r
2211 /** @brief  macro to configure the DSI clock source.\r
2212   *\r
2213   * @param  __DSICLKSource__ specifies the DSI clock source.\r
2214   *            @arg RCC_RCC_DSICLKSOURCE_PHY:DSI clock from PHY is selected as DSI byte lane clock\r
2215   *            @arg RCC_RCC_DSICLKSOURCE_PLL2   : PLL2_Q Clock clock is selected as DSI byte lane clock\r
2216   */\r
2217 #define __HAL_RCC_DSI_CONFIG(__DSICLKSource__) \\r
2218                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL, (uint32_t)(__DSICLKSource__))\r
2219 \r
2220 \r
2221 /** @brief  macro to get the DSI clock source.\r
2222   * @retval The clock source can be one of the following values:\r
2223   *            @arg RCC_RCC_DSICLKSOURCE_PHY: DSI clock from PHY is selected as DSI byte lane clock\r
2224   *            @arg RCC_RCC_DSICLKSOURCE_PLL2: PLL2_Q Clock clock is selected as DSI byte lane clock\r
2225   */\r
2226 #define __HAL_RCC_GET_DSI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL)))\r
2227 #endif /*DSI*/\r
2228 \r
2229 /** @brief  macro to configure the FMC clock source.\r
2230   *\r
2231   * @param  __FMCCLKSource__ specifies the FMC clock source.\r
2232   *            @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock\r
2233   *            @arg RCC_RCC_FMCCLKSOURCE_PLL   : PLL1_Q Clock selected as FMC clock\r
2234   *            @arg RCC_RCC_FMCCLKSOURCE_PLL2  : PLL2_R Clock selected as FMC clock\r
2235   *            @arg RCC_RCC_FMCCLKSOURCE_CLKP    CLKP selected as FMC clock\r
2236   */\r
2237 #define __HAL_RCC_FMC_CONFIG(__FMCCLKSource__) \\r
2238                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL, (uint32_t)(__FMCCLKSource__))\r
2239 \r
2240 \r
2241 /** @brief  macro to get the FMC clock source.\r
2242   * @retval The clock source can be one of the following values:\r
2243   *            @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock\r
2244   *            @arg RCC_RCC_FMCCLKSOURCE_PLL   : PLL1_Q Clock selected as FMC clock\r
2245   *            @arg RCC_RCC_FMCCLKSOURCE_PLL2  : PLL2_R Clock selected as FMC clock\r
2246   *            @arg RCC_RCC_FMCCLKSOURCE_CLKP    CLKP selected as FMC clock\r
2247   */\r
2248 #define __HAL_RCC_GET_FMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL)))\r
2249 \r
2250 /** @brief  Macro to configure the USB clock (USBCLK).\r
2251   * @param  __USBCLKSource__ specifies the USB clock source.\r
2252   *         This parameter can be one of the following values:\r
2253   *            @arg RCC_USBCLKSOURCE_PLL:   PLL1Q selected as USB clock\r
2254   *            @arg RCC_USBCLKSOURCE_PLL3:  PLL3Q Clock selected as USB clock\r
2255   *            @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock\r
2256   */\r
2257 #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \\r
2258                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL, (uint32_t)(__USBCLKSource__))\r
2259 \r
2260 /** @brief  Macro to get the USB clock source.\r
2261   * @retval The clock source can be one of the following values:\r
2262   *            @arg RCC_USBCLKSOURCE_PLL:   PLL1Q selected as USB clock\r
2263   *            @arg RCC_USBCLKSOURCE_PLL3:  PLL3Q Clock selected as USB clock\r
2264   *            @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock\r
2265   */\r
2266 #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL)))\r
2267 \r
2268 \r
2269 /** @brief  Macro to configure the ADC clock\r
2270   * @param  __ADCCLKSource__ specifies the ADC digital interface clock source.\r
2271   *         This parameter can be one of the following values:\r
2272   *            @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock\r
2273   *            @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock\r
2274   *            @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock\r
2275   */\r
2276 #define __HAL_RCC_ADC_CONFIG(__ADCCLKSource__) \\r
2277                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL, (uint32_t)(__ADCCLKSource__))\r
2278 \r
2279 /** @brief  Macro to get the ADC clock source.\r
2280   * @retval The clock source can be one of the following values:\r
2281   *            @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock\r
2282   *            @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock\r
2283   *            @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock\r
2284   */\r
2285 #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL)))\r
2286 \r
2287  /** @brief  Macro to configure the SWPMI1 clock\r
2288   * @param  __SWPMI1CLKSource__ specifies the SWPMI1  clock source.\r
2289   *         This parameter can be one of the following values:\r
2290   *            @arg RCC_SWPMI1CLKSOURCE_D2PCLK1:  D2PCLK1 Clock selected as SWPMI1 clock\r
2291   *            @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock\r
2292   */\r
2293 #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1CLKSource__) \\r
2294                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL, (uint32_t)(__SWPMI1CLKSource__))\r
2295 \r
2296 /** @brief  Macro to get the SWPMI1 clock source.\r
2297   * @retval The clock source can be one of the following values:\r
2298   *            @arg RCC_SWPMI1CLKSOURCE_D2PCLK1:  D2PCLK1 Clock selected as SWPMI1 clock\r
2299   *            @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock\r
2300   */\r
2301 #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL)))\r
2302 \r
2303  /** @brief  Macro to configure the DFSDM1 clock\r
2304   * @param  __DFSDM1CLKSource__ specifies the DFSDM1  clock source.\r
2305   *         This parameter can be one of the following values:\r
2306   *            @arg RCC_DFSDM1CLKSOURCE_D2PCLK:  D2PCLK Clock selected as DFSDM1 clock\r
2307   *            @arg RCC_DFSDM1CLKSOURCE_SYS:     System Clock selected as DFSDM1 clock\r
2308   */\r
2309 #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1CLKSource__) \\r
2310                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL, (uint32_t)(__DFSDM1CLKSource__))\r
2311 \r
2312 /** @brief  Macro to get the DFSDM1 clock source.\r
2313   * @retval The clock source can be one of the following values:\r
2314   *            @arg RCC_DFSDM1CLKSOURCE_D2PCLK:  D2PCLK Clock selected as DFSDM1 clock\r
2315   *            @arg RCC_DFSDM1CLKSOURCE_SYS:   System Clock selected as DFSDM1 clock\r
2316   */\r
2317 #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL)))\r
2318 \r
2319 /** @brief macro to configure the CEC clock (CECCLK).\r
2320   *\r
2321   * @param  __CECCLKSource__ specifies the CEC clock source.\r
2322   *          This parameter can be one of the following values:\r
2323   *            @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock\r
2324   *            @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock\r
2325   *            @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock\r
2326   */\r
2327 #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \\r
2328                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL, (uint32_t)(__CECCLKSource__))\r
2329 \r
2330 /** @brief  macro to get the CEC clock source.\r
2331   * @retval The clock source can be one of the following values:\r
2332   *            @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock\r
2333   *            @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock\r
2334   *            @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock\r
2335   */\r
2336 #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL)))\r
2337 \r
2338 \r
2339 /** @brief  Macro to configure the CLKP : Oscillator clock for peripheral\r
2340   * @param  __CLKPSource__ specifies Oscillator clock for peripheral\r
2341   *         This parameter can be one of the following values:\r
2342   *            @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral\r
2343   *            @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral\r
2344   *            @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral\r
2345   */\r
2346 #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \\r
2347                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL, (uint32_t)(__CLKPSource__))\r
2348 \r
2349 /** @brief  Macro to get the Oscillator clock for peripheral  source.\r
2350   * @retval The clock source can be one of the following values:\r
2351   *            @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral\r
2352   *            @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral\r
2353   *            @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral\r
2354   */\r
2355 #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL)))\r
2356 \r
2357 #if defined(FDCAN1) || defined(FDCAN2)\r
2358 /** @brief  Macro to configure the FDCAN clock\r
2359   * @param  __FDCANCLKSource__ specifies  clock source  for FDCAN\r
2360   *         This parameter can be one of the following values:\r
2361   *            @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock\r
2362   *            @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock\r
2363   *            @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock\r
2364   */\r
2365 #define __HAL_RCC_FDCAN_CONFIG(__FDCANCLKSource__) \\r
2366                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL, (uint32_t)(__FDCANCLKSource__))\r
2367 \r
2368 /** @brief  Macro to get the FDCAN clock\r
2369   * @retval The clock source can be one of the following values:\r
2370   *            @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock\r
2371   *            @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock\r
2372   *            @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock\r
2373   */\r
2374 #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL)))\r
2375 #endif /*FDCAN1 || FDCAN2*/\r
2376 /**\r
2377   * @brief  Macro to Configure the SPI1/2/3 clock source.\r
2378   * @param  __RCC_SPI123CLKSource__ defines the SPI1/2/3 clock source. This clock is derived\r
2379   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
2380   *          This parameter can be one of the following values:\r
2381   *             @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL\r
2382   *             @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2\r
2383   *             @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3\r
2384   *             @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock  = CLKP\r
2385   *             @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock\r
2386   * @retval None\r
2387   */\r
2388 #define __HAL_RCC_SPI123_CONFIG(__RCC_SPI123CLKSource__ )\\r
2389                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI123CLKSource__))\r
2390 \r
2391 /** @brief  Macro to get the SPI1/2/3 clock source.\r
2392   * @retval The clock source can be one of the following values:\r
2393   *             @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL\r
2394   *             @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2\r
2395   *             @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3\r
2396   *             @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock  = CLKP\r
2397   *             @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock\r
2398   */\r
2399 #define __HAL_RCC_GET_SPI123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))\r
2400 \r
2401 /**\r
2402   * @brief  Macro to Configure the SPI1 clock source.\r
2403   * @param  __RCC_SPI1CLKSource__ defines the SPI1 clock source. This clock is derived\r
2404   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
2405   *          This parameter can be one of the following values:\r
2406   *             @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL\r
2407   *             @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2\r
2408   *             @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3\r
2409   *             @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock  = CLKP\r
2410   *             @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock\r
2411   * @retval None\r
2412   */\r
2413 #define __HAL_RCC_SPI1_CONFIG(__RCC_SPI1CLKSource__ )\\r
2414                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI1CLKSource__))\r
2415 \r
2416 /** @brief  Macro to get the SPI1 clock source.\r
2417   * @retval The clock source can be one of the following values:\r
2418   *             @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL\r
2419   *             @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2\r
2420   *             @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3\r
2421   *             @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock  = CLKP\r
2422   *             @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock\r
2423   */\r
2424 #define __HAL_RCC_GET_SPI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))\r
2425 \r
2426 /**\r
2427   * @brief  Macro to Configure the SPI2 clock source.\r
2428   * @param  __RCC_SPI2CLKSource__ defines the SPI2 clock source. This clock is derived\r
2429   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
2430   *          This parameter can be one of the following values:\r
2431   *             @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL\r
2432   *             @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2\r
2433   *             @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3\r
2434   *             @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock  = CLKP\r
2435   *             @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock\r
2436   * @retval None\r
2437   */\r
2438 #define __HAL_RCC_SPI2_CONFIG(__RCC_SPI2CLKSource__ )\\r
2439                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI2CLKSource__))\r
2440 \r
2441 /** @brief  Macro to get the SPI2 clock source.\r
2442   * @retval The clock source can be one of the following values:\r
2443   *             @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL\r
2444   *             @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2\r
2445   *             @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3\r
2446   *             @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock  = CLKP\r
2447   *             @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock\r
2448   */\r
2449 #define __HAL_RCC_GET_SPI2_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))\r
2450 \r
2451 /**\r
2452   * @brief  Macro to Configure the SPI3 clock source.\r
2453   * @param  __RCC_SPI3CLKSource__ defines the SPI3 clock source. This clock is derived\r
2454   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)\r
2455   *          This parameter can be one of the following values:\r
2456   *             @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL\r
2457   *             @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2\r
2458   *             @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3\r
2459   *             @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock  = CLKP\r
2460   *             @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock\r
2461   * @retval None\r
2462   */\r
2463 #define __HAL_RCC_SPI3_CONFIG(__RCC_SPI3CLKSource__ )\\r
2464                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI3CLKSource__))\r
2465 \r
2466 /** @brief  Macro to get the SPI3 clock source.\r
2467   * @retval The clock source can be one of the following values:\r
2468   *             @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL\r
2469   *             @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2\r
2470   *             @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3\r
2471   *             @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock  = CLKP\r
2472   *             @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock\r
2473   */\r
2474 #define __HAL_RCC_GET_SPI3_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))\r
2475 \r
2476 /**\r
2477   * @brief  Macro to Configure the SPI4/5 clock source.\r
2478   * @param  __RCC_SPI45CLKSource__ defines the SPI4/5 clock source. This clock is derived\r
2479   *         from system PCLK, PLL2, PLL3, OSC\r
2480   *          This parameter can be one of the following values:\r
2481   *             @arg RCC_SPI45CLKSOURCE_D2PCLK1:SPI4/5 clock = D2PCLK1\r
2482   *             @arg RCC_SPI45CLKSOURCE_PLL2:   SPI4/5 clock = PLL2\r
2483   *             @arg RCC_SPI45CLKSOURCE_PLL3:   SPI4/5 clock = PLL3\r
2484   *             @arg RCC_SPI45CLKSOURCE_HSI:    SPI4/5 clock = HSI\r
2485   *             @arg RCC_SPI45CLKSOURCE_CSI:    SPI4/5 clock = CSI\r
2486   *             @arg RCC_SPI45CLKSOURCE_HSE:    SPI4/5 clock = HSE\r
2487   * @retval None\r
2488   */\r
2489 #define __HAL_RCC_SPI45_CONFIG(__RCC_SPI45CLKSource__ )\\r
2490                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL, (__RCC_SPI45CLKSource__))\r
2491 \r
2492 /** @brief  Macro to get the SPI4/5 clock source.\r
2493   * @retval The clock source can be one of the following values:\r
2494   *             @arg RCC_SPI45CLKSOURCE_D2PCLK1:SPI4/5 clock = D2PCLK1\r
2495   *             @arg RCC_SPI45CLKSOURCE_PLL2:   SPI4/5 clock = PLL2\r
2496   *             @arg RCC_SPI45CLKSOURCE_PLL3:   SPI4/5 clock = PLL3\r
2497   *             @arg RCC_SPI45CLKSOURCE_HSI:    SPI4/5 clock = HSI\r
2498   *             @arg RCC_SPI45CLKSOURCE_CSI:    SPI4/5 clock = CSI\r
2499   *             @arg RCC_SPI45CLKSOURCE_HSE:    SPI4/5 clock = HSE\r
2500 */\r
2501 #define __HAL_RCC_GET_SPI45_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL)))\r
2502 \r
2503 /**\r
2504   * @brief  Macro to Configure the SPI4 clock source.\r
2505   * @param  __RCC_SPI4CLKSource__ defines the SPI4 clock source. This clock is derived\r
2506   *         from system PCLK, PLL2, PLL3, OSC\r
2507   *          This parameter can be one of the following values:\r
2508   *             @arg RCC_SPI4CLKSOURCE_D2PCLK1:SPI4 clock = D2PCLK1\r
2509   *             @arg RCC_SPI4CLKSOURCE_PLL2:   SPI4 clock = PLL2\r
2510   *             @arg RCC_SPI4CLKSOURCE_PLL3:   SPI4 clock = PLL3\r
2511   *             @arg RCC_SPI4CLKSOURCE_HSI:    SPI4 clock = HSI\r
2512   *             @arg RCC_SPI4CLKSOURCE_CSI:    SPI4 clock = CSI\r
2513   *             @arg RCC_SPI4CLKSOURCE_HSE:    SPI4 clock = HSE\r
2514   * @retval None\r
2515   */\r
2516 #define __HAL_RCC_SPI4_CONFIG(__RCC_SPI4CLKSource__ )\\r
2517                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL, (__RCC_SPI4CLKSource__))\r
2518 \r
2519 /** @brief  Macro to get the SPI4 clock source.\r
2520   * @retval The clock source can be one of the following values:\r
2521   *             @arg RCC_SPI4CLKSOURCE_D2PCLK1:SPI4 clock = D2PCLK1\r
2522   *             @arg RCC_SPI4CLKSOURCE_PLL2:   SPI4 clock = PLL2\r
2523   *             @arg RCC_SPI4CLKSOURCE_PLL3:   SPI4 clock = PLL3\r
2524   *             @arg RCC_SPI4CLKSOURCE_HSI:    SPI4 clock = HSI\r
2525   *             @arg RCC_SPI4CLKSOURCE_CSI:    SPI4 clock = CSI\r
2526   *             @arg RCC_SPI4CLKSOURCE_HSE:    SPI4 clock = HSE\r
2527 */\r
2528 #define __HAL_RCC_GET_SPI4_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL)))\r
2529 \r
2530 /**\r
2531   * @brief  Macro to Configure the SPI5 clock source.\r
2532   * @param  __RCC_SPI5CLKSource__ defines the SPI5 clock source. This clock is derived\r
2533   *         from system PCLK, PLL2, PLL3, OSC\r
2534   *          This parameter can be one of the following values:\r
2535   *             @arg RCC_SPI5CLKSOURCE_D2PCLK1:SPI5 clock = D2PCLK1\r
2536   *             @arg RCC_SPI5CLKSOURCE_PLL2:   SPI5 clock = PLL2\r
2537   *             @arg RCC_SPI5CLKSOURCE_PLL3:   SPI5 clock = PLL3\r
2538   *             @arg RCC_SPI5CLKSOURCE_HSI:    SPI5 clock = HSI\r
2539   *             @arg RCC_SPI5CLKSOURCE_CSI:    SPI5 clock = CSI\r
2540   *             @arg RCC_SPI5CLKSOURCE_HSE:    SPI5 clock = HSE\r
2541   * @retval None\r
2542   */\r
2543 #define __HAL_RCC_SPI5_CONFIG(__RCC_SPI5CLKSource__ )\\r
2544                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL, (__RCC_SPI5CLKSource__))\r
2545 \r
2546 /** @brief  Macro to get the SPI5 clock source.\r
2547   * @retval The clock source can be one of the following values:\r
2548   *             @arg RCC_SPI5CLKSOURCE_D2PCLK1:SPI5 clock = D2PCLK1\r
2549   *             @arg RCC_SPI5CLKSOURCE_PLL2:   SPI5 clock = PLL2\r
2550   *             @arg RCC_SPI5CLKSOURCE_PLL3:   SPI5 clock = PLL3\r
2551   *             @arg RCC_SPI5CLKSOURCE_HSI:    SPI5 clock = HSI\r
2552   *             @arg RCC_SPI5CLKSOURCE_CSI:    SPI5 clock = CSI\r
2553   *             @arg RCC_SPI5CLKSOURCE_HSE:    SPI5 clock = HSE\r
2554 */\r
2555 #define __HAL_RCC_GET_SPI5_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL)))\r
2556 \r
2557 /**\r
2558   * @brief  Macro to Configure the SPI6 clock source.\r
2559   * @param  __RCC_SPI6CLKSource__ defines the SPI6 clock source. This clock is derived\r
2560   *         from system PCLK, PLL2, PLL3, OSC\r
2561   *          This parameter can be one of the following values:\r
2562   *             @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1\r
2563   *             @arg RCC_SPI6CLKSOURCE_PLL2:   SPI6 clock = PLL2\r
2564   *             @arg RCC_SPI6CLKSOURCE_PLL3:   SPI6 clock = PLL3\r
2565   *             @arg RCC_SPI6CLKSOURCE_HSI:    SPI6 clock = HSI\r
2566   *             @arg RCC_SPI6CLKSOURCE_CSI:    SPI6 clock = CSI\r
2567   *             @arg RCC_SPI6CLKSOURCE_HSE:    SPI6 clock = HSE\r
2568   * @retval None\r
2569   */\r
2570 #define __HAL_RCC_SPI6_CONFIG(__RCC_SPI6CLKSource__ )\\r
2571                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL, (__RCC_SPI6CLKSource__))\r
2572 \r
2573 /** @brief  Macro to get the SPI6 clock source.\r
2574   * @retval The clock source can be one of the following values:\r
2575   *             @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1\r
2576   *             @arg RCC_SPI6CLKSOURCE_PLL2:   SPI6 clock = PLL2\r
2577   *             @arg RCC_SPI6CLKSOURCE_PLL3:   SPI6 clock = PLL3\r
2578   *             @arg RCC_SPI6CLKSOURCE_HSI:    SPI6 clock = HSI\r
2579   *             @arg RCC_SPI6CLKSOURCE_CSI:    SPI6 clock = CSI\r
2580   *             @arg RCC_SPI6CLKSOURCE_HSE:    SPI6 clock = HSE\r
2581 */\r
2582 #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL)))\r
2583 \r
2584 /** @brief  Macro to configure the SDMMC clock\r
2585   * @param  __SDMMCCLKSource__ specifies  clock source  for SDMMC\r
2586   *         This parameter can be one of the following values:\r
2587   *            @arg RCC_SDMMCCLKSOURCE_PLL:  PLLQ selected as SDMMC clock\r
2588   *            @arg RCC_SDMMCCLKSOURCE_PLL2: PLL2R selected as SDMMC clock\r
2589   */\r
2590 #define __HAL_RCC_SDMMC_CONFIG(__SDMMCCLKSource__) \\r
2591                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL, (uint32_t)(__SDMMCCLKSource__))\r
2592 \r
2593 /** @brief  Macro to get the SDMMC clock\r
2594   */\r
2595 #define __HAL_RCC_GET_SDMMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL)))\r
2596 \r
2597 /** @brief macro to configure the RNG clock (RNGCLK).\r
2598   *\r
2599   * @param  __RNGCLKSource__ specifies the RNG clock source.\r
2600   *          This parameter can be one of the following values:\r
2601   *            @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock\r
2602   *            @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock\r
2603   *            @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock\r
2604   *            @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock\r
2605   */\r
2606 #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \\r
2607                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL, (uint32_t)(__RNGCLKSource__))\r
2608 \r
2609 /** @brief  macro to get the RNG clock source.\r
2610   * @retval The clock source can be one of the following values:\r
2611   *            @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock\r
2612   *            @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock\r
2613   *            @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock\r
2614   *            @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock\r
2615   */\r
2616 #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL)))\r
2617 \r
2618 \r
2619 /** @defgroup RCCEx_HRTIMx_Clock_Config RCC Extended HRTIMx Clock Config\r
2620   * @{\r
2621   */\r
2622 /** @brief  Macro to configure the HRTIM1 prescaler clock source.\r
2623   * @param  __HRTIM1CLKSource__ specifies the HRTIM1 prescaler clock source.\r
2624   *         This parameter can be one of the following values:\r
2625   *            @arg @ref RCC_HRTIM1CLK_TIMCLK    Timers  clock  selected as HRTIM1 prescaler clock\r
2626   *            @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock\r
2627   */\r
2628 #define __HAL_RCC_HRTIM1_CONFIG(__HRTIM1CLKSource__) \\r
2629                   MODIFY_REG(RCC->CFGR, RCC_CFGR_HRTIMSEL, (uint32_t)(__HRTIM1CLKSource__))\r
2630 \r
2631 /** @brief  Macro to get the HRTIM1 clock source.\r
2632   * @retval The clock source can be one of the following values:\r
2633   *            @arg @ref RCC_HRTIM1CLK_TIMCLK   Timers  clock  selected as HRTIM1 prescaler clock\r
2634   *            @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock\r
2635   */\r
2636 #define __HAL_RCC_GET_HRTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HRTIMSEL)))\r
2637 \r
2638 /** @brief  Macro to configure the Timers clocks prescalers\r
2639   * @param  __PRESC__  specifies the Timers clocks prescalers selection\r
2640   *         This parameter can be one of the following values:\r
2641   *            @arg RCC_TIMPRES_DESACTIVATED: The Timers kernels clocks prescaler is\r
2642   *                 equal to rcc_hclk1 if D2PPREx is corresponding to division by 1 or 2,\r
2643   *                 else it is equal to 2 x Frcc_pclkx_d2 (default after reset)\r
2644   *            @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is\r
2645   *                 equal to rcc_hclk1 if D2PPREx is corresponding to division by 1, 2 or 4,\r
2646   *                 else it is equal to 4 x Frcc_pclkx_d2\r
2647   */\r
2648 #define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) do {RCC->CFGR &= ~(RCC_CFGR_TIMPRE);\\r
2649                                                  RCC->CFGR |= (__PRESC__);       \\r
2650                                                 }while(0)\r
2651 \r
2652 /**\r
2653   * @}\r
2654   */\r
2655 /**\r
2656   * @brief  Enable the specified CRS interrupts.\r
2657   * @param  __INTERRUPT__ specifies the CRS interrupt sources to be enabled.\r
2658   *          This parameter can be any combination of the following values:\r
2659   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt\r
2660   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt\r
2661   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt\r
2662   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt\r
2663   * @retval None\r
2664   */\r
2665 #define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__)   SET_BIT(CRS->CR, (__INTERRUPT__))\r
2666 \r
2667 /**\r
2668   * @brief  Disable the specified CRS interrupts.\r
2669   * @param  __INTERRUPT__ specifies the CRS interrupt sources to be disabled.\r
2670   *          This parameter can be any combination of the following values:\r
2671   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt\r
2672   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt\r
2673   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt\r
2674   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt\r
2675   * @retval None\r
2676   */\r
2677 #define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__)  CLEAR_BIT(CRS->CR, (__INTERRUPT__))\r
2678 \r
2679 /** @brief  Check whether the CRS interrupt has occurred or not.\r
2680   * @param  __INTERRUPT__ specifies the CRS interrupt source to check.\r
2681   *         This parameter can be one of the following values:\r
2682   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt\r
2683   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt\r
2684   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt\r
2685   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt\r
2686   * @retval The new state of __INTERRUPT__ (SET or RESET).\r
2687   */\r
2688 #define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__)  ((READ_BIT(CRS->CR, (__INTERRUPT__)) != 0U) ? SET : RESET)\r
2689 \r
2690 /** @brief  Clear the CRS interrupt pending bits\r
2691   * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r
2692   *         This parameter can be any combination of the following values:\r
2693   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt\r
2694   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt\r
2695   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt\r
2696   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt\r
2697   *              @arg @ref RCC_CRS_IT_TRIMOVF  Trimming overflow or underflow interrupt\r
2698   *              @arg @ref RCC_CRS_IT_SYNCERR  SYNC error interrupt\r
2699   *              @arg @ref RCC_CRS_IT_SYNCMISS  SYNC missed interrupt\r
2700   */\r
2701 /* CRS IT Error Mask */\r
2702 #define  RCC_CRS_IT_ERROR_MASK                 ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS))\r
2703 \r
2704 #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__)  do { \\r
2705                                                  if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != 0U) \\r
2706                                                  { \\r
2707                                                    WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \\r
2708                                                  } \\r
2709                                                  else \\r
2710                                                  { \\r
2711                                                    WRITE_REG(CRS->ICR, (__INTERRUPT__)); \\r
2712                                                  } \\r
2713                                                } while(0)\r
2714 \r
2715 /**\r
2716   * @brief  Check whether the specified CRS flag is set or not.\r
2717   * @param  __FLAG__ specifies the flag to check.\r
2718   *          This parameter can be one of the following values:\r
2719   *              @arg @ref RCC_CRS_FLAG_SYNCOK  SYNC event OK\r
2720   *              @arg @ref RCC_CRS_FLAG_SYNCWARN  SYNC warning\r
2721   *              @arg @ref RCC_CRS_FLAG_ERR  Error\r
2722   *              @arg @ref RCC_CRS_FLAG_ESYNC  Expected SYNC\r
2723   *              @arg @ref RCC_CRS_FLAG_TRIMOVF  Trimming overflow or underflow\r
2724   *              @arg @ref RCC_CRS_FLAG_SYNCERR  SYNC error\r
2725   *              @arg @ref RCC_CRS_FLAG_SYNCMISS  SYNC missed\r
2726   * @retval The new state of _FLAG_ (TRUE or FALSE).\r
2727   */\r
2728 #define __HAL_RCC_CRS_GET_FLAG(__FLAG__)  (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__))\r
2729 \r
2730 /**\r
2731   * @brief  Clear the CRS specified FLAG.\r
2732   * @param __FLAG__ specifies the flag to clear.\r
2733   *          This parameter can be one of the following values:\r
2734   *              @arg @ref RCC_CRS_FLAG_SYNCOK  SYNC event OK\r
2735   *              @arg @ref RCC_CRS_FLAG_SYNCWARN  SYNC warning\r
2736   *              @arg @ref RCC_CRS_FLAG_ERR  Error\r
2737   *              @arg @ref RCC_CRS_FLAG_ESYNC  Expected SYNC\r
2738   *              @arg @ref RCC_CRS_FLAG_TRIMOVF  Trimming overflow or underflow\r
2739   *              @arg @ref RCC_CRS_FLAG_SYNCERR  SYNC error\r
2740   *              @arg @ref RCC_CRS_FLAG_SYNCMISS  SYNC missed\r
2741   * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS and consequently RCC_CRS_FLAG_ERR\r
2742   * @retval None\r
2743   */\r
2744 \r
2745 /* CRS Flag Error Mask */\r
2746 #define RCC_CRS_FLAG_ERROR_MASK                ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS))\r
2747 \r
2748 #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__)     do { \\r
2749                                                  if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != 0U) \\r
2750                                                  { \\r
2751                                                    WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \\r
2752                                                  } \\r
2753                                                  else \\r
2754                                                  { \\r
2755                                                    WRITE_REG(CRS->ICR, (__FLAG__)); \\r
2756                                                  } \\r
2757                                                } while(0)\r
2758 \r
2759  /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features\r
2760   * @{\r
2761   */\r
2762 /**\r
2763   * @brief  Enable the oscillator clock for frequency error counter.\r
2764   * @note   when the CEN bit is set the CRS_CFGR register becomes write-protected.\r
2765   * @retval None\r
2766   */\r
2767 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE()  SET_BIT(CRS->CR, CRS_CR_CEN)\r
2768 \r
2769 /**\r
2770   * @brief  Disable the oscillator clock for frequency error counter.\r
2771   * @retval None\r
2772   */\r
2773 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN)\r
2774 \r
2775 /**\r
2776   * @brief  Enable the automatic hardware adjustment of TRIM bits.\r
2777   * @note   When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected.\r
2778   * @retval None\r
2779   */\r
2780 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE()     SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)\r
2781 \r
2782 /**\r
2783   * @brief  Enable or disable the automatic hardware adjustment of TRIM bits.\r
2784   * @retval None\r
2785   */\r
2786 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE()    CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)\r
2787 \r
2788 /**\r
2789   * @brief  Macro to calculate reload value to be set in CRS register according to target and sync frequencies\r
2790   * @note   The RELOAD value should be selected according to the ratio between the target frequency and the frequency\r
2791   *             of the synchronization source after pre-scaling. It is then decreased by one in order to\r
2792   *             reach the expected synchronization on the zero value. The formula is the following:\r
2793   *             RELOAD = (fTARGET / fSYNC) -1\r
2794   * @param  __FTARGET__ Target frequency (value in Hz)\r
2795   * @param  __FSYNC__ Synchronization signal frequency (value in Hz)\r
2796   * @retval None\r
2797   */\r
2798 #define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)  (((__FTARGET__) / (__FSYNC__)) - 1U)\r
2799 \r
2800 \r
2801 /**\r
2802   * @}\r
2803   */\r
2804 \r
2805 \r
2806 /**\r
2807   * @}\r
2808   */\r
2809 \r
2810 \r
2811 /* Exported functions --------------------------------------------------------*/\r
2812 /** @addtogroup RCCEx_Exported_Functions_Group1\r
2813   * @{\r
2814   */\r
2815 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);\r
2816 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);\r
2817 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);\r
2818 uint32_t HAL_RCCEx_GetD1PCLK1Freq(void);\r
2819 uint32_t HAL_RCCEx_GetD3PCLK1Freq(void);\r
2820 uint32_t HAL_RCCEx_GetD1SysClockFreq(void);\r
2821 void     HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef* PLL1_Clocks);\r
2822 void     HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef* PLL2_Clocks);\r
2823 void     HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef* PLL3_Clocks);\r
2824 /**\r
2825   * @}\r
2826   */\r
2827 \r
2828 /** @addtogroup RCCEx_Exported_Functions_Group2\r
2829   * @{\r
2830   */\r
2831 void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk);\r
2832 void HAL_RCCEx_KerWakeUpStopCLKConfig(uint32_t WakeUpClk);\r
2833 void HAL_RCCEx_EnableLSECSS(void);\r
2834 void HAL_RCCEx_DisableLSECSS(void);\r
2835 #if defined(DUAL_CORE)\r
2836 void HAL_RCCEx_EnableBootCore(uint32_t RCC_BootCx);\r
2837 #endif /*DUAL_CORE*/\r
2838 void HAL_RCCEx_WWDGxSysResetConfig(uint32_t RCC_WWDGx);\r
2839 /**\r
2840   * @}\r
2841   */\r
2842 \r
2843 \r
2844 /** @addtogroup RCCEx_Exported_Functions_Group3\r
2845   * @{\r
2846   */\r
2847 \r
2848 void     HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit);\r
2849 void     HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void);\r
2850 void     HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo);\r
2851 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout);\r
2852 void     HAL_RCCEx_CRS_IRQHandler(void);\r
2853 void     HAL_RCCEx_CRS_SyncOkCallback(void);\r
2854 void     HAL_RCCEx_CRS_SyncWarnCallback(void);\r
2855 void     HAL_RCCEx_CRS_ExpectedSyncCallback(void);\r
2856 void     HAL_RCCEx_CRS_ErrorCallback(uint32_t Error);\r
2857 \r
2858 /**\r
2859   * @}\r
2860   */\r
2861 \r
2862  /* Private macros ------------------------------------------------------------*/\r
2863 /** @addtogroup RCCEx_Private_Macros RCCEx Private Macros\r
2864   * @{\r
2865   */\r
2866 /** @defgroup RCCEx_IS_RCC_Definitions RCC Private macros to check input parameters\r
2867   * @{\r
2868   */\r
2869 \r
2870 #define IS_RCC_PLL2CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL2_DIVP) || \\r
2871                                          ((VALUE) == RCC_PLL2_DIVQ)  || \\r
2872                                          ((VALUE) == RCC_PLL2_DIVR))\r
2873 \r
2874 #define IS_RCC_PLL3CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL3_DIVP) || \\r
2875                                           ((VALUE) == RCC_PLL3_DIVQ) || \\r
2876                                           ((VALUE) == RCC_PLL3_DIVR))\r
2877 \r
2878 #define IS_RCC_USART16CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART16CLKSOURCE_D2PCLK2)|| \\r
2879                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL2)   || \\r
2880                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL3)   || \\r
2881                                          ((SOURCE) == RCC_USART16CLKSOURCE_CSI)    || \\r
2882                                          ((SOURCE) == RCC_USART16CLKSOURCE_LSE)    || \\r
2883                                          ((SOURCE) == RCC_USART16CLKSOURCE_HSI))\r
2884 \r
2885 #define IS_RCC_USART234578CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART234578CLKSOURCE_D2PCLK1)|| \\r
2886                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL2)   || \\r
2887                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL3)   || \\r
2888                                              ((SOURCE) == RCC_USART234578CLKSOURCE_CSI)    || \\r
2889                                              ((SOURCE) == RCC_USART234578CLKSOURCE_LSE)    || \\r
2890                                              ((SOURCE) == RCC_USART234578CLKSOURCE_HSI))\r
2891 \r
2892 #define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_D2PCLK2)|| \\r
2893                                         ((SOURCE) == RCC_USART1CLKSOURCE_PLL2)   || \\r
2894                                         ((SOURCE) == RCC_USART1CLKSOURCE_PLL3)   || \\r
2895                                         ((SOURCE) == RCC_USART1CLKSOURCE_CSI)    || \\r
2896                                         ((SOURCE) == RCC_USART1CLKSOURCE_LSE)    || \\r
2897                                         ((SOURCE) == RCC_USART1CLKSOURCE_HSI))\r
2898 \r
2899 #define IS_RCC_USART2CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART2CLKSOURCE_D2PCLK1)|| \\r
2900                                         ((SOURCE) == RCC_USART2CLKSOURCE_PLL2)   || \\r
2901                                         ((SOURCE) == RCC_USART2CLKSOURCE_PLL3)   || \\r
2902                                         ((SOURCE) == RCC_USART2CLKSOURCE_CSI)    || \\r
2903                                         ((SOURCE) == RCC_USART2CLKSOURCE_LSE)    || \\r
2904                                         ((SOURCE) == RCC_USART2CLKSOURCE_HSI))\r
2905 \r
2906 #define IS_RCC_USART3CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART3CLKSOURCE_D2PCLK1)|| \\r
2907                                         ((SOURCE) == RCC_USART3CLKSOURCE_PLL2)   || \\r
2908                                         ((SOURCE) == RCC_USART3CLKSOURCE_PLL3)   || \\r
2909                                         ((SOURCE) == RCC_USART3CLKSOURCE_CSI)    || \\r
2910                                         ((SOURCE) == RCC_USART3CLKSOURCE_LSE)    || \\r
2911                                         ((SOURCE) == RCC_USART3CLKSOURCE_HSI))\r
2912 \r
2913 #define IS_RCC_UART4CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART4CLKSOURCE_D2PCLK1) || \\r
2914                                         ((SOURCE) == RCC_UART4CLKSOURCE_PLL2)   || \\r
2915                                         ((SOURCE) == RCC_UART4CLKSOURCE_PLL3)   || \\r
2916                                         ((SOURCE) == RCC_UART4CLKSOURCE_CSI)    || \\r
2917                                         ((SOURCE) == RCC_UART4CLKSOURCE_LSE)    || \\r
2918                                         ((SOURCE) == RCC_UART4CLKSOURCE_HSI))\r
2919 \r
2920 #define IS_RCC_UART5CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART5CLKSOURCE_D2PCLK1) || \\r
2921                                         ((SOURCE) == RCC_UART5CLKSOURCE_PLL2)   || \\r
2922                                         ((SOURCE) == RCC_UART5CLKSOURCE_PLL3)   || \\r
2923                                         ((SOURCE) == RCC_UART5CLKSOURCE_CSI)    || \\r
2924                                         ((SOURCE) == RCC_UART5CLKSOURCE_LSE)    || \\r
2925                                         ((SOURCE) == RCC_UART5CLKSOURCE_HSI))\r
2926 \r
2927 #define IS_RCC_USART6CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART6CLKSOURCE_D2PCLK2)|| \\r
2928                                         ((SOURCE) == RCC_USART6CLKSOURCE_PLL2)   || \\r
2929                                         ((SOURCE) == RCC_USART6CLKSOURCE_PLL3)   || \\r
2930                                         ((SOURCE) == RCC_USART6CLKSOURCE_CSI)    || \\r
2931                                         ((SOURCE) == RCC_USART6CLKSOURCE_LSE)    || \\r
2932                                         ((SOURCE) == RCC_USART6CLKSOURCE_HSI))\r
2933 \r
2934 #define IS_RCC_UART7CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART7CLKSOURCE_D2PCLK1)|| \\r
2935                                         ((SOURCE) == RCC_UART7CLKSOURCE_PLL2)  || \\r
2936                                         ((SOURCE) == RCC_UART7CLKSOURCE_PLL3)  || \\r
2937                                         ((SOURCE) == RCC_UART7CLKSOURCE_CSI)   || \\r
2938                                         ((SOURCE) == RCC_UART7CLKSOURCE_LSE)   || \\r
2939                                         ((SOURCE) == RCC_UART7CLKSOURCE_HSI))\r
2940 \r
2941 #define IS_RCC_UART8CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART8CLKSOURCE_D2PCLK1)|| \\r
2942                                         ((SOURCE) == RCC_UART8CLKSOURCE_PLL2)  || \\r
2943                                         ((SOURCE) == RCC_UART8CLKSOURCE_PLL3)  || \\r
2944                                         ((SOURCE) == RCC_UART8CLKSOURCE_CSI)   || \\r
2945                                         ((SOURCE) == RCC_UART8CLKSOURCE_LSE)   || \\r
2946                                         ((SOURCE) == RCC_UART8CLKSOURCE_HSI))\r
2947 \r
2948 #define IS_RCC_LPUART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPUART1CLKSOURCE_D3PCLK1) || \\r
2949                                         ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL2)     || \\r
2950                                         ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL3)     || \\r
2951                                         ((SOURCE) == RCC_LPUART1CLKSOURCE_CSI)      || \\r
2952                                         ((SOURCE) == RCC_LPUART1CLKSOURCE_LSE)      || \\r
2953                                         ((SOURCE) == RCC_LPUART1CLKSOURCE_HSI))\r
2954 \r
2955 #define IS_RCC_I2C123CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C123CLKSOURCE_PLL3)   || \\r
2956                                           ((SOURCE) == RCC_I2C123CLKSOURCE_HSI)    || \\r
2957                                           ((SOURCE) == RCC_I2C123CLKSOURCE_D2PCLK1)|| \\r
2958                                           ((SOURCE) == RCC_I2C123CLKSOURCE_CSI))\r
2959 \r
2960 #define IS_RCC_I2C1CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C1CLKSOURCE_PLL3)   || \\r
2961                                         ((SOURCE) == RCC_I2C1CLKSOURCE_HSI)    || \\r
2962                                         ((SOURCE) == RCC_I2C1CLKSOURCE_D2PCLK1)|| \\r
2963                                         ((SOURCE) == RCC_I2C1CLKSOURCE_CSI))\r
2964 \r
2965 #define IS_RCC_I2C2CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C2CLKSOURCE_PLL3)   || \\r
2966                                         ((SOURCE) == RCC_I2C2CLKSOURCE_HSI)    || \\r
2967                                         ((SOURCE) == RCC_I2C2CLKSOURCE_D2PCLK1)|| \\r
2968                                         ((SOURCE) == RCC_I2C2CLKSOURCE_CSI))\r
2969 \r
2970 #define IS_RCC_I2C3CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C3CLKSOURCE_PLL3)   || \\r
2971                                         ((SOURCE) == RCC_I2C3CLKSOURCE_HSI)    || \\r
2972                                         ((SOURCE) == RCC_I2C3CLKSOURCE_D2PCLK1)|| \\r
2973                                         ((SOURCE) == RCC_I2C3CLKSOURCE_CSI))\r
2974 \r
2975 #define IS_RCC_I2C4CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C4CLKSOURCE_PLL3)   || \\r
2976                                         ((SOURCE) == RCC_I2C4CLKSOURCE_HSI)    || \\r
2977                                         ((SOURCE) == RCC_I2C4CLKSOURCE_D3PCLK1)|| \\r
2978                                         ((SOURCE) == RCC_I2C3CLKSOURCE_CSI))\r
2979 \r
2980 #define IS_RCC_RNGCLKSOURCE(SOURCE)    (((SOURCE) == RCC_RNGCLKSOURCE_HSI48)|| \\r
2981                                         ((SOURCE) == RCC_RNGCLKSOURCE_PLL)  || \\r
2982                                         ((SOURCE) == RCC_RNGCLKSOURCE_LSE)  || \\r
2983                                         ((SOURCE) == RCC_RNGCLKSOURCE_LSI))\r
2984 \r
2985 #define IS_RCC_HRTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_HRTIM1CLK_TIMCLK) || \\r
2986                                         ((SOURCE) == RCC_HRTIM1CLK_CPUCLK))\r
2987 \r
2988 #define IS_RCC_USBCLKSOURCE(SOURCE)    (((SOURCE) == RCC_USBCLKSOURCE_PLL)  || \\r
2989                                         ((SOURCE) == RCC_USBCLKSOURCE_PLL3) || \\r
2990                                         ((SOURCE) == RCC_USBCLKSOURCE_HSI48))\r
2991 \r
2992 #define IS_RCC_SAI1CLK(__SOURCE__)   \\r
2993                (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL)  || \\r
2994                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL2) || \\r
2995                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL3) || \\r
2996                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_CLKP) || \\r
2997                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN))\r
2998 \r
2999 #define IS_RCC_SAI23CLK(__SOURCE__)   \\r
3000                (((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL)  || \\r
3001                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL2) || \\r
3002                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL3) || \\r
3003                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_CLKP) || \\r
3004                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PIN))\r
3005 \r
3006 #define IS_RCC_SAI2CLK(__SOURCE__)   \\r
3007                (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL)  || \\r
3008                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL2) || \\r
3009                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL3) || \\r
3010                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_CLKP) || \\r
3011                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN))\r
3012 \r
3013 #define IS_RCC_SAI3CLK(__SOURCE__)   \\r
3014                (((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL)  || \\r
3015                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL2) || \\r
3016                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL3) || \\r
3017                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_CLKP) || \\r
3018                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PIN))\r
3019 \r
3020 #define IS_RCC_SPI123CLK(__SOURCE__)   \\r
3021                (((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL)  || \\r
3022                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL2) || \\r
3023                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL3) || \\r
3024                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_CLKP) || \\r
3025                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PIN))\r
3026 \r
3027 #define IS_RCC_SPI1CLK(__SOURCE__)   \\r
3028                (((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL)  || \\r
3029                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL2) || \\r
3030                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL3) || \\r
3031                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_CLKP) || \\r
3032                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PIN))\r
3033 \r
3034 #define IS_RCC_SPI2CLK(__SOURCE__)   \\r
3035                (((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL)  || \\r
3036                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL2) || \\r
3037                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL3) || \\r
3038                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_CLKP) || \\r
3039                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PIN))\r
3040 \r
3041 #define IS_RCC_SPI3CLK(__SOURCE__)   \\r
3042                (((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL)  || \\r
3043                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL2) || \\r
3044                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL3) || \\r
3045                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_CLKP) || \\r
3046                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PIN))\r
3047 \r
3048 #define IS_RCC_SPI45CLK(__SOURCE__)   \\r
3049                (((__SOURCE__) == RCC_SPI45CLKSOURCE_D2PCLK1)  || \\r
3050                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL2)     || \\r
3051                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL3)     || \\r
3052                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSI)      || \\r
3053                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_CSI)      || \\r
3054                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSE))\r
3055 \r
3056 #define IS_RCC_SPI4CLK(__SOURCE__)   \\r
3057                (((__SOURCE__) == RCC_SPI4CLKSOURCE_D2PCLK1)  || \\r
3058                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL2)     || \\r
3059                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL3)     || \\r
3060                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSI)      || \\r
3061                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_CSI)      || \\r
3062                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSE))\r
3063 \r
3064 #define IS_RCC_SPI5CLK(__SOURCE__)   \\r
3065                (((__SOURCE__) == RCC_SPI5CLKSOURCE_D2PCLK1)|| \\r
3066                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL2)   || \\r
3067                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL3)   || \\r
3068                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSI)    || \\r
3069                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_CSI)    || \\r
3070                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSE))\r
3071 \r
3072 #define IS_RCC_SPI6CLK(__SOURCE__)   \\r
3073                (((__SOURCE__) == RCC_SPI6CLKSOURCE_D3PCLK1) || \\r
3074                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2)    || \\r
3075                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3)    || \\r
3076                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI)     || \\r
3077                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI)     || \\r
3078                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE))\r
3079 \r
3080 #define IS_RCC_SAI4ACLK(__SOURCE__)   \\r
3081                (((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL)  || \\r
3082                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL2) || \\r
3083                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL3) || \\r
3084                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_CLKP) || \\r
3085                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PIN))\r
3086 \r
3087 #define IS_RCC_SAI4BCLK(__SOURCE__)   \\r
3088                (((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL)  || \\r
3089                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL2) || \\r
3090                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL3) || \\r
3091                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_CLKP) || \\r
3092                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PIN))\r
3093 \r
3094 #define IS_RCC_PLL3M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))\r
3095 #define IS_RCC_PLL3N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))\r
3096 #define IS_RCC_PLL3P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3097 #define IS_RCC_PLL3Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3098 #define IS_RCC_PLL3R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3099 \r
3100 #define IS_RCC_PLL2M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))\r
3101 #define IS_RCC_PLL2N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))\r
3102 #define IS_RCC_PLL2P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3103 #define IS_RCC_PLL2Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3104 #define IS_RCC_PLL2R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))\r
3105 \r
3106 #define IS_RCC_PLL2RGE_VALUE(VALUE) (((VALUE) == RCC_PLL2VCIRANGE_0)  || \\r
3107                                     ((VALUE) == RCC_PLL2VCIRANGE_1)   || \\r
3108                                     ((VALUE) == RCC_PLL2VCIRANGE_2)   || \\r
3109                                     ((VALUE) == RCC_PLL2VCIRANGE_3))\r
3110 \r
3111 #define IS_RCC_PLL3RGE_VALUE(VALUE) (((VALUE) == RCC_PLL3VCIRANGE_0)  || \\r
3112                                     ((VALUE) == RCC_PLL3VCIRANGE_1)   || \\r
3113                                     ((VALUE) == RCC_PLL3VCIRANGE_2)   || \\r
3114                                     ((VALUE) == RCC_PLL3VCIRANGE_3))\r
3115 \r
3116 #define IS_RCC_PLL2VCO_VALUE(VALUE) (((VALUE) == RCC_PLL2VCOWIDE)  || \\r
3117                                     ((VALUE) == RCC_PLL2VCOMEDIUM))\r
3118 \r
3119 #define IS_RCC_PLL3VCO_VALUE(VALUE) (((VALUE) == RCC_PLL3VCOWIDE)  || \\r
3120                                     ((VALUE) == RCC_PLL3VCOMEDIUM))\r
3121 \r
3122 #define IS_RCC_PLLFRACN_VALUE(VALUE) ((VALUE) <=8191U)\r
3123 \r
3124 #define IS_RCC_LPTIM1CLK(SOURCE)       (((SOURCE) == RCC_LPTIM1CLKSOURCE_D2PCLK1)|| \\r
3125                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL2)   || \\r
3126                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL3)   || \\r
3127                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)    || \\r
3128                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI)    || \\r
3129                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_CLKP))\r
3130 \r
3131 #define IS_RCC_LPTIM2CLK(SOURCE)       (((SOURCE) == RCC_LPTIM2CLKSOURCE_D3PCLK1)|| \\r
3132                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL2)   || \\r
3133                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL3)   || \\r
3134                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSE)    || \\r
3135                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSI)    || \\r
3136                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_CLKP))\r
3137 \r
3138 #define IS_RCC_LPTIM345CLK(SOURCE)     (((SOURCE) == RCC_LPTIM345CLKSOURCE_D3PCLK1)|| \\r
3139                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL2)   || \\r
3140                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL3)   || \\r
3141                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSE)    || \\r
3142                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSI)    || \\r
3143                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_CLKP))\r
3144 \r
3145 #define IS_RCC_LPTIM3CLK(SOURCE)       (((SOURCE) == RCC_LPTIM3CLKSOURCE_D3PCLK1)|| \\r
3146                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL2)   || \\r
3147                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL3)   || \\r
3148                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSE)    || \\r
3149                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSI)    || \\r
3150                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_CLKP))\r
3151 \r
3152 #define IS_RCC_LPTIM4CLK(SOURCE)       (((SOURCE) == RCC_LPTIM4CLKSOURCE_D3PCLK1)|| \\r
3153                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL2)   || \\r
3154                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL3)   || \\r
3155                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSE)    || \\r
3156                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSI)    || \\r
3157                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_CLKP))\r
3158 \r
3159 #define IS_RCC_LPTIM5CLK(SOURCE)       (((SOURCE) == RCC_LPTIM5CLKSOURCE_D3PCLK1)|| \\r
3160                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL2)   || \\r
3161                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL3)   || \\r
3162                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSE)    || \\r
3163                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSI)    || \\r
3164                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_CLKP))\r
3165 \r
3166 #define IS_RCC_QSPICLK(__SOURCE__)   \\r
3167                (((__SOURCE__) == RCC_QSPICLKSOURCE_D1HCLK)  || \\r
3168                 ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL)     || \\r
3169                 ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL2)    || \\r
3170                 ((__SOURCE__) == RCC_QSPICLKSOURCE_CLKP))\r
3171 \r
3172 #if defined(DSI)\r
3173 #define IS_RCC_DSICLK(__SOURCE__)   \\r
3174                (((__SOURCE__) == RCC_DSICLKSOURCE_PHY)  || \\r
3175                 ((__SOURCE__) == RCC_DSICLKSOURCE_PLL2))\r
3176 #endif /*DSI*/\r
3177 \r
3178 #define IS_RCC_FMCCLK(__SOURCE__)   \\r
3179                (((__SOURCE__) == RCC_FMCCLKSOURCE_D1HCLK)  || \\r
3180                 ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL)     || \\r
3181                 ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL2)    || \\r
3182                 ((__SOURCE__) == RCC_FMCCLKSOURCE_CLKP))\r
3183 \r
3184 #if defined(FDCAN1) || defined(FDCAN2)\r
3185 #define IS_RCC_FDCANCLK(__SOURCE__)   \\r
3186                (((__SOURCE__) == RCC_FDCANCLKSOURCE_HSE)  || \\r
3187                 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL)  || \\r
3188                 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL2))\r
3189 #endif /*FDCAN1 || FDCAN2*/\r
3190 \r
3191 #define IS_RCC_SDMMC(__SOURCE__)   \\r
3192                 (((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL)  || \\r
3193                 ((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL2))\r
3194 \r
3195 #define IS_RCC_ADCCLKSOURCE(SOURCE)    (((SOURCE) == RCC_ADCCLKSOURCE_PLL2) || \\r
3196                                         ((SOURCE) == RCC_ADCCLKSOURCE_PLL3) || \\r
3197                                         ((SOURCE) == RCC_ADCCLKSOURCE_CLKP))\r
3198 \r
3199 #define IS_RCC_SWPMI1CLKSOURCE(SOURCE) (((SOURCE) == RCC_SWPMI1CLKSOURCE_D2PCLK1) || \\r
3200                                         ((SOURCE) == RCC_SWPMI1CLKSOURCE_HSI))\r
3201 \r
3202 #define IS_RCC_DFSDM1CLKSOURCE(SOURCE)  (((SOURCE) == RCC_DFSDM1CLKSOURCE_D2PCLK1) || \\r
3203                                         ((SOURCE) == RCC_DFSDM1CLKSOURCE_SYS))\r
3204 \r
3205 #define IS_RCC_SPDIFRXCLKSOURCE(SOURCE)(((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL)  || \\r
3206                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL2) || \\r
3207                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL3) || \\r
3208                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_HSI))\r
3209 \r
3210 #define IS_RCC_CECCLKSOURCE(SOURCE)  (((SOURCE) == RCC_CECCLKSOURCE_LSE) || \\r
3211                                       ((SOURCE) == RCC_CECCLKSOURCE_LSI) || \\r
3212                                       ((SOURCE) == RCC_CECCLKSOURCE_CSI))\r
3213 \r
3214 #define IS_RCC_CLKPSOURCE(SOURCE)   (((SOURCE) == RCC_CLKPSOURCE_HSI)  || \\r
3215                                       ((SOURCE) == RCC_CLKPSOURCE_CSI) || \\r
3216                                       ((SOURCE) == RCC_CLKPSOURCE_HSE))\r
3217 #define IS_RCC_TIMPRES(VALUE)  \\r
3218                (((VALUE) == RCC_TIMPRES_DESACTIVATED) || \\r
3219                 ((VALUE) == RCC_TIMPRES_ACTIVATED))\r
3220 \r
3221 #if defined(DUAL_CORE)\r
3222 #define IS_RCC_BOOT_CORE(CORE)   (((CORE) == RCC_BOOT_C1)  || \\r
3223                                   ((CORE) == RCC_BOOT_C2))\r
3224 #endif /*DUAL_CORE*/\r
3225 \r
3226 #if defined(DUAL_CORE)\r
3227 #define IS_RCC_SCOPE_WWDG(WWDG)   (((WWDG) == RCC_WWDG1)  || \\r
3228                                   ((WWDG) == RCC_WWDG2))\r
3229 #else\r
3230 #define IS_RCC_SCOPE_WWDG(WWDG)   ((WWDG) == RCC_WWDG1)\r
3231 \r
3232 #endif /*DUAL_CORE*/\r
3233 \r
3234 #define IS_RCC_CRS_SYNC_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB2) || \\r
3235                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_LSE)  || \\r
3236                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB1) || \\r
3237                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_PIN))\r
3238 \r
3239 #define IS_RCC_CRS_SYNC_DIV(__DIV__)       (((__DIV__) == RCC_CRS_SYNC_DIV1)  || ((__DIV__) == RCC_CRS_SYNC_DIV2)  || \\r
3240                                             ((__DIV__) == RCC_CRS_SYNC_DIV4)  || ((__DIV__) == RCC_CRS_SYNC_DIV8)  || \\r
3241                                             ((__DIV__) == RCC_CRS_SYNC_DIV16) || ((__DIV__) == RCC_CRS_SYNC_DIV32) || \\r
3242                                             ((__DIV__) == RCC_CRS_SYNC_DIV64) || ((__DIV__) == RCC_CRS_SYNC_DIV128))\r
3243 \r
3244 #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \\r
3245                                                 ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING))\r
3246 \r
3247 #define IS_RCC_CRS_RELOADVALUE(__VALUE__)  (((__VALUE__) <= 0xFFFFU))\r
3248 \r
3249 #define IS_RCC_CRS_ERRORLIMIT(__VALUE__)   (((__VALUE__) <= 0xFFU))\r
3250 \r
3251 #define IS_RCC_CRS_HSI48CALIBRATION(__VALUE__) (((__VALUE__) <= 0x3FU))\r
3252 \r
3253 #define IS_RCC_CRS_FREQERRORDIR(__DIR__)   (((__DIR__) == RCC_CRS_FREQERRORDIR_UP) || \\r
3254                                             ((__DIR__) == RCC_CRS_FREQERRORDIR_DOWN))\r
3255 /**\r
3256   * @}\r
3257   */\r
3258 \r
3259 /**\r
3260   * @}\r
3261   */\r
3262 /**\r
3263   * @}\r
3264   */\r
3265 \r
3266 /**\r
3267   * @}\r
3268   */\r
3269 \r
3270 #ifdef __cplusplus\r
3271 }\r
3272 #endif\r
3273 \r
3274 #endif /* STM32H7xx_HAL_RCC_EX_H */\r
3275 \r
3276 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r