comparison l476rg/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h @ 0:32a3b1785697

a rough draft of Hardware Abstraction Layer for C++ STM32L476RG drivers
author cin
date Thu, 12 Jan 2017 02:45:43 +0300
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:32a3b1785697
1 /**
2 ******************************************************************************
3 * @file stm32l4xx_hal_rcc_ex.h
4 * @author MCD Application Team
5 * @version V1.6.0
6 * @date 28-October-2016
7 * @brief Header file of RCC HAL Extended module.
8 ******************************************************************************
9 * @attention
10 *
11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
12 *
13 * Redistribution and use in source and binary forms, with or without modification,
14 * are permitted provided that the following conditions are met:
15 * 1. Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 *
35 ******************************************************************************
36 */
37
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32L4xx_HAL_RCC_EX_H
40 #define __STM32L4xx_HAL_RCC_EX_H
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32l4xx_hal_def.h"
48
49 /** @addtogroup STM32L4xx_HAL_Driver
50 * @{
51 */
52
53 /** @addtogroup RCCEx
54 * @{
55 */
56
57 /* Exported types ------------------------------------------------------------*/
58
59 /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
60 * @{
61 */
62
63 /**
64 * @brief PLLSAI1 Clock structure definition
65 */
66 typedef struct
67 {
68
69 uint32_t PLLSAI1Source; /*!< PLLSAI1Source: PLLSAI1 entry clock source.
70 This parameter must be a value of @ref RCC_PLL_Clock_Source */
71
72 uint32_t PLLSAI1M; /*!< PLLSAI1M: specifies the division factor for PLLSAI1 input clock.
73 This parameter must be a number between Min_Data = 1 and Max_Data = 8 */
74
75 uint32_t PLLSAI1N; /*!< PLLSAI1N: specifies the multiplication factor for PLLSAI1 VCO output clock.
76 This parameter must be a number between 8 and 86 or 127 depending on devices. */
77
78 uint32_t PLLSAI1P; /*!< PLLSAI1P: specifies the division factor for SAI clock.
79 This parameter must be a value of @ref RCC_PLLP_Clock_Divider */
80
81 uint32_t PLLSAI1Q; /*!< PLLSAI1Q: specifies the division factor for USB/RNG/SDMMC1 clock.
82 This parameter must be a value of @ref RCC_PLLQ_Clock_Divider */
83
84 uint32_t PLLSAI1R; /*!< PLLSAI1R: specifies the division factor for ADC clock.
85 This parameter must be a value of @ref RCC_PLLR_Clock_Divider */
86
87 uint32_t PLLSAI1ClockOut; /*!< PLLSAIClockOut: specifies PLLSAI1 output clock to be enabled.
88 This parameter must be a value of @ref RCC_PLLSAI1_Clock_Output */
89 }RCC_PLLSAI1InitTypeDef;
90
91 #if defined(RCC_PLLSAI2_SUPPORT)
92
93 /**
94 * @brief PLLSAI2 Clock structure definition
95 */
96 typedef struct
97 {
98
99 uint32_t PLLSAI2Source; /*!< PLLSAI2Source: PLLSAI2 entry clock source.
100 This parameter must be a value of @ref RCC_PLL_Clock_Source */
101
102 uint32_t PLLSAI2M; /*!< PLLSAI2M: specifies the division factor for PLLSAI2 input clock.
103 This parameter must be a number between Min_Data = 1 and Max_Data = 8 */
104
105 uint32_t PLLSAI2N; /*!< PLLSAI2N: specifies the multiplication factor for PLLSAI2 VCO output clock.
106 This parameter must be a number between 8 and 86 or 127 depending on devices. */
107
108 uint32_t PLLSAI2P; /*!< PLLSAI2P: specifies the division factor for SAI clock.
109 This parameter must be a value of @ref RCC_PLLP_Clock_Divider */
110
111 uint32_t PLLSAI2R; /*!< PLLSAI2R: specifies the division factor for ADC clock.
112 This parameter must be a value of @ref RCC_PLLR_Clock_Divider */
113
114 uint32_t PLLSAI2ClockOut; /*!< PLLSAIClockOut: specifies PLLSAI2 output clock to be enabled.
115 This parameter must be a value of @ref RCC_PLLSAI2_Clock_Output */
116 }RCC_PLLSAI2InitTypeDef;
117
118 #endif /* RCC_PLLSAI2_SUPPORT */
119
120 /**
121 * @brief RCC extended clocks structure definition
122 */
123 typedef struct
124 {
125 uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.
126 This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
127
128 RCC_PLLSAI1InitTypeDef PLLSAI1; /*!< PLLSAI1 structure parameters.
129 This parameter will be used only when PLLSAI1 is selected as Clock Source for SAI1, USB/RNG/SDMMC1 or ADC */
130
131 #if defined(RCC_PLLSAI2_SUPPORT)
132
133 RCC_PLLSAI2InitTypeDef PLLSAI2; /*!< PLLSAI2 structure parameters.
134 This parameter will be used only when PLLSAI2 is selected as Clock Source for SAI2 or ADC */
135
136 #endif /* RCC_PLLSAI2_SUPPORT */
137
138 uint32_t Usart1ClockSelection; /*!< Specifies USART1 clock source.
139 This parameter can be a value of @ref RCCEx_USART1_Clock_Source */
140
141 uint32_t Usart2ClockSelection; /*!< Specifies USART2 clock source.
142 This parameter can be a value of @ref RCCEx_USART2_Clock_Source */
143
144 #if defined(USART3)
145
146 uint32_t Usart3ClockSelection; /*!< Specifies USART3 clock source.
147 This parameter can be a value of @ref RCCEx_USART3_Clock_Source */
148
149 #endif /* USART3 */
150
151 #if defined(UART4)
152
153 uint32_t Uart4ClockSelection; /*!< Specifies UART4 clock source.
154 This parameter can be a value of @ref RCCEx_UART4_Clock_Source */
155
156 #endif /* UART4 */
157
158 #if defined(UART5)
159
160 uint32_t Uart5ClockSelection; /*!< Specifies UART5 clock source.
161 This parameter can be a value of @ref RCCEx_UART5_Clock_Source */
162
163 #endif /* UART5 */
164
165 uint32_t Lpuart1ClockSelection; /*!< Specifies LPUART1 clock source.
166 This parameter can be a value of @ref RCCEx_LPUART1_Clock_Source */
167
168 uint32_t I2c1ClockSelection; /*!< Specifies I2C1 clock source.
169 This parameter can be a value of @ref RCCEx_I2C1_Clock_Source */
170
171 #if defined(I2C2)
172
173 uint32_t I2c2ClockSelection; /*!< Specifies I2C2 clock source.
174 This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */
175
176 #endif /* I2C2 */
177
178 uint32_t I2c3ClockSelection; /*!< Specifies I2C3 clock source.
179 This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */
180
181 #if defined(I2C4)
182
183 uint32_t I2c4ClockSelection; /*!< Specifies I2C4 clock source.
184 This parameter can be a value of @ref RCCEx_I2C4_Clock_Source */
185
186 #endif /* I2C4 */
187
188 uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 clock source.
189 This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */
190
191 uint32_t Lptim2ClockSelection; /*!< Specifies LPTIM2 clock source.
192 This parameter can be a value of @ref RCCEx_LPTIM2_Clock_Source */
193
194 uint32_t Sai1ClockSelection; /*!< Specifies SAI1 clock source.
195 This parameter can be a value of @ref RCCEx_SAI1_Clock_Source */
196
197 #if defined(SAI2)
198
199 uint32_t Sai2ClockSelection; /*!< Specifies SAI2 clock source.
200 This parameter can be a value of @ref RCCEx_SAI2_Clock_Source */
201
202 #endif /* SAI2 */
203
204 #if defined(USB_OTG_FS) || defined(USB)
205
206 uint32_t UsbClockSelection; /*!< Specifies USB clock source (warning: same source for SDMMC1 and RNG).
207 This parameter can be a value of @ref RCCEx_USB_Clock_Source */
208
209 #endif /* USB_OTG_FS || USB */
210
211 #if defined(SDMMC1)
212
213 uint32_t Sdmmc1ClockSelection; /*!< Specifies SDMMC1 clock source (warning: same source for USB and RNG).
214 This parameter can be a value of @ref RCCEx_SDMMC1_Clock_Source */
215
216 #endif /* SDMMC1 */
217
218 uint32_t RngClockSelection; /*!< Specifies RNG clock source (warning: same source for USB and SDMMC1).
219 This parameter can be a value of @ref RCCEx_RNG_Clock_Source */
220
221 uint32_t AdcClockSelection; /*!< Specifies ADC interface clock source.
222 This parameter can be a value of @ref RCCEx_ADC_Clock_Source */
223
224 #if defined(SWPMI1)
225
226 uint32_t Swpmi1ClockSelection; /*!< Specifies SWPMI1 clock source.
227 This parameter can be a value of @ref RCCEx_SWPMI1_Clock_Source */
228
229 #endif /* SWPMI1 */
230
231 #if defined(DFSDM1_Filter0)
232
233 uint32_t Dfsdm1ClockSelection; /*!< Specifies DFSDM1 clock source.
234 This parameter can be a value of @ref RCCEx_DFSDM1_Clock_Source */
235
236 #endif /* DFSDM1_Filter0 */
237
238 uint32_t RTCClockSelection; /*!< Specifies RTC clock source.
239 This parameter can be a value of @ref RCC_RTC_Clock_Source */
240 }RCC_PeriphCLKInitTypeDef;
241
242 #if defined(CRS)
243
244 /**
245 * @brief RCC_CRS Init structure definition
246 */
247 typedef struct
248 {
249 uint32_t Prescaler; /*!< Specifies the division factor of the SYNC signal.
250 This parameter can be a value of @ref RCCEx_CRS_SynchroDivider */
251
252 uint32_t Source; /*!< Specifies the SYNC signal source.
253 This parameter can be a value of @ref RCCEx_CRS_SynchroSource */
254
255 uint32_t Polarity; /*!< Specifies the input polarity for the SYNC signal source.
256 This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */
257
258 uint32_t ReloadValue; /*!< Specifies the value to be loaded in the frequency error counter with each SYNC event.
259 It can be calculated in using macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)
260 This parameter must be a number between 0 and 0xFFFF or a value of @ref RCCEx_CRS_ReloadValueDefault .*/
261
262 uint32_t ErrorLimitValue; /*!< Specifies the value to be used to evaluate the captured frequency error value.
263 This parameter must be a number between 0 and 0xFF or a value of @ref RCCEx_CRS_ErrorLimitDefault */
264
265 uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator.
266 This parameter must be a number between 0 and 0x3F or a value of @ref RCCEx_CRS_HSI48CalibrationDefault */
267
268 }RCC_CRSInitTypeDef;
269
270 /**
271 * @brief RCC_CRS Synchronization structure definition
272 */
273 typedef struct
274 {
275 uint32_t ReloadValue; /*!< Specifies the value loaded in the Counter reload value.
276 This parameter must be a number between 0 and 0xFFFF */
277
278 uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming.
279 This parameter must be a number between 0 and 0x3F */
280
281 uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter
282 value latched in the time of the last SYNC event.
283 This parameter must be a number between 0 and 0xFFFF */
284
285 uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the
286 frequency error counter latched in the time of the last SYNC event.
287 It shows whether the actual frequency is below or above the target.
288 This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/
289
290 }RCC_CRSSynchroInfoTypeDef;
291
292 #endif /* CRS */
293 /**
294 * @}
295 */
296
297 /* Exported constants --------------------------------------------------------*/
298 /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
299 * @{
300 */
301
302 /** @defgroup RCCEx_LSCO_Clock_Source Low Speed Clock Source
303 * @{
304 */
305 #define RCC_LSCOSOURCE_LSI (uint32_t)0x00000000U /*!< LSI selection for low speed clock output */
306 #define RCC_LSCOSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock output */
307 /**
308 * @}
309 */
310
311 /** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection
312 * @{
313 */
314 #define RCC_PERIPHCLK_USART1 ((uint32_t)0x00000001U)
315 #define RCC_PERIPHCLK_USART2 ((uint32_t)0x00000002U)
316 #if defined(USART3)
317 #define RCC_PERIPHCLK_USART3 ((uint32_t)0x00000004U)
318 #endif
319 #if defined(UART4)
320 #define RCC_PERIPHCLK_UART4 ((uint32_t)0x00000008U)
321 #endif
322 #if defined(UART5)
323 #define RCC_PERIPHCLK_UART5 ((uint32_t)0x00000010U)
324 #endif
325 #define RCC_PERIPHCLK_LPUART1 ((uint32_t)0x00000020U)
326 #define RCC_PERIPHCLK_I2C1 ((uint32_t)0x00000040U)
327 #if defined(I2C2)
328 #define RCC_PERIPHCLK_I2C2 ((uint32_t)0x00000080U)
329 #endif
330 #define RCC_PERIPHCLK_I2C3 ((uint32_t)0x00000100U)
331 #define RCC_PERIPHCLK_LPTIM1 ((uint32_t)0x00000200U)
332 #define RCC_PERIPHCLK_LPTIM2 ((uint32_t)0x00000400U)
333 #define RCC_PERIPHCLK_SAI1 ((uint32_t)0x00000800U)
334 #if defined(SAI2)
335 #define RCC_PERIPHCLK_SAI2 ((uint32_t)0x00001000U)
336 #endif
337 #if defined(USB_OTG_FS) || defined(USB)
338 #define RCC_PERIPHCLK_USB ((uint32_t)0x00002000U)
339 #endif
340 #define RCC_PERIPHCLK_ADC ((uint32_t)0x00004000U)
341 #if defined(SWPMI1)
342 #define RCC_PERIPHCLK_SWPMI1 ((uint32_t)0x00008000U)
343 #endif
344 #if defined(DFSDM1_Filter0)
345 #define RCC_PERIPHCLK_DFSDM1 ((uint32_t)0x00010000U)
346 #endif
347 #define RCC_PERIPHCLK_RTC ((uint32_t)0x00020000U)
348 #define RCC_PERIPHCLK_RNG ((uint32_t)0x00040000U)
349 #if defined(SDMMC1)
350 #define RCC_PERIPHCLK_SDMMC1 ((uint32_t)0x00080000U)
351 #endif
352 #if defined(I2C4)
353 #define RCC_PERIPHCLK_I2C4 ((uint32_t)0x00100000U)
354 #endif
355 /**
356 * @}
357 */
358
359
360 /** @defgroup RCCEx_USART1_Clock_Source USART1 Clock Source
361 * @{
362 */
363 #define RCC_USART1CLKSOURCE_PCLK2 ((uint32_t)0x00000000U)
364 #define RCC_USART1CLKSOURCE_SYSCLK RCC_CCIPR_USART1SEL_0
365 #define RCC_USART1CLKSOURCE_HSI RCC_CCIPR_USART1SEL_1
366 #define RCC_USART1CLKSOURCE_LSE (RCC_CCIPR_USART1SEL_0 | RCC_CCIPR_USART1SEL_1)
367 /**
368 * @}
369 */
370
371 /** @defgroup RCCEx_USART2_Clock_Source USART2 Clock Source
372 * @{
373 */
374 #define RCC_USART2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
375 #define RCC_USART2CLKSOURCE_SYSCLK RCC_CCIPR_USART2SEL_0
376 #define RCC_USART2CLKSOURCE_HSI RCC_CCIPR_USART2SEL_1
377 #define RCC_USART2CLKSOURCE_LSE (RCC_CCIPR_USART2SEL_0 | RCC_CCIPR_USART2SEL_1)
378 /**
379 * @}
380 */
381
382 #if defined(USART3)
383 /** @defgroup RCCEx_USART3_Clock_Source USART3 Clock Source
384 * @{
385 */
386 #define RCC_USART3CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
387 #define RCC_USART3CLKSOURCE_SYSCLK RCC_CCIPR_USART3SEL_0
388 #define RCC_USART3CLKSOURCE_HSI RCC_CCIPR_USART3SEL_1
389 #define RCC_USART3CLKSOURCE_LSE (RCC_CCIPR_USART3SEL_0 | RCC_CCIPR_USART3SEL_1)
390 /**
391 * @}
392 */
393 #endif /* USART3 */
394
395 #if defined(UART4)
396 /** @defgroup RCCEx_UART4_Clock_Source UART4 Clock Source
397 * @{
398 */
399 #define RCC_UART4CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
400 #define RCC_UART4CLKSOURCE_SYSCLK RCC_CCIPR_UART4SEL_0
401 #define RCC_UART4CLKSOURCE_HSI RCC_CCIPR_UART4SEL_1
402 #define RCC_UART4CLKSOURCE_LSE (RCC_CCIPR_UART4SEL_0 | RCC_CCIPR_UART4SEL_1)
403 /**
404 * @}
405 */
406 #endif /* UART4 */
407
408 #if defined(UART5)
409 /** @defgroup RCCEx_UART5_Clock_Source UART5 Clock Source
410 * @{
411 */
412 #define RCC_UART5CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
413 #define RCC_UART5CLKSOURCE_SYSCLK RCC_CCIPR_UART5SEL_0
414 #define RCC_UART5CLKSOURCE_HSI RCC_CCIPR_UART5SEL_1
415 #define RCC_UART5CLKSOURCE_LSE (RCC_CCIPR_UART5SEL_0 | RCC_CCIPR_UART5SEL_1)
416 /**
417 * @}
418 */
419 #endif /* UART5 */
420
421 /** @defgroup RCCEx_LPUART1_Clock_Source LPUART1 Clock Source
422 * @{
423 */
424 #define RCC_LPUART1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
425 #define RCC_LPUART1CLKSOURCE_SYSCLK RCC_CCIPR_LPUART1SEL_0
426 #define RCC_LPUART1CLKSOURCE_HSI RCC_CCIPR_LPUART1SEL_1
427 #define RCC_LPUART1CLKSOURCE_LSE (RCC_CCIPR_LPUART1SEL_0 | RCC_CCIPR_LPUART1SEL_1)
428 /**
429 * @}
430 */
431
432 /** @defgroup RCCEx_I2C1_Clock_Source I2C1 Clock Source
433 * @{
434 */
435 #define RCC_I2C1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
436 #define RCC_I2C1CLKSOURCE_SYSCLK RCC_CCIPR_I2C1SEL_0
437 #define RCC_I2C1CLKSOURCE_HSI RCC_CCIPR_I2C1SEL_1
438 /**
439 * @}
440 */
441
442 #if defined(I2C2)
443 /** @defgroup RCCEx_I2C2_Clock_Source I2C2 Clock Source
444 * @{
445 */
446 #define RCC_I2C2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
447 #define RCC_I2C2CLKSOURCE_SYSCLK RCC_CCIPR_I2C2SEL_0
448 #define RCC_I2C2CLKSOURCE_HSI RCC_CCIPR_I2C2SEL_1
449 /**
450 * @}
451 */
452 #endif /* I2C2 */
453
454 /** @defgroup RCCEx_I2C3_Clock_Source I2C3 Clock Source
455 * @{
456 */
457 #define RCC_I2C3CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
458 #define RCC_I2C3CLKSOURCE_SYSCLK RCC_CCIPR_I2C3SEL_0
459 #define RCC_I2C3CLKSOURCE_HSI RCC_CCIPR_I2C3SEL_1
460 /**
461 * @}
462 */
463
464 #if defined(I2C4)
465 /** @defgroup RCCEx_I2C4_Clock_Source I2C4 Clock Source
466 * @{
467 */
468 #define RCC_I2C4CLKSOURCE_PCLK1 ((uint32_t)0x00000000U)
469 #define RCC_I2C4CLKSOURCE_SYSCLK RCC_CCIPR2_I2C4SEL_0
470 #define RCC_I2C4CLKSOURCE_HSI RCC_CCIPR2_I2C4SEL_1
471 /**
472 * @}
473 */
474 #endif /* I2C4 */
475
476 /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source
477 * @{
478 */
479 #define RCC_SAI1CLKSOURCE_PLLSAI1 ((uint32_t)0x00000000U)
480 #if defined(RCC_PLLSAI2_SUPPORT)
481 #define RCC_SAI1CLKSOURCE_PLLSAI2 RCC_CCIPR_SAI1SEL_0
482 #endif /* RCC_PLLSAI2_SUPPORT */
483 #define RCC_SAI1CLKSOURCE_PLL RCC_CCIPR_SAI1SEL_1
484 #define RCC_SAI1CLKSOURCE_PIN RCC_CCIPR_SAI1SEL
485 /**
486 * @}
487 */
488
489 #if defined(SAI2)
490 /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source
491 * @{
492 */
493 #define RCC_SAI2CLKSOURCE_PLLSAI1 ((uint32_t)0x00000000U)
494 #define RCC_SAI2CLKSOURCE_PLLSAI2 RCC_CCIPR_SAI2SEL_0
495 #define RCC_SAI2CLKSOURCE_PLL RCC_CCIPR_SAI2SEL_1
496 #define RCC_SAI2CLKSOURCE_PIN RCC_CCIPR_SAI2SEL
497 /**
498 * @}
499 */
500 #endif /* SAI2 */
501
502 /** @defgroup RCCEx_LPTIM1_Clock_Source LPTIM1 Clock Source
503 * @{
504 */
505 #define RCC_LPTIM1CLKSOURCE_PCLK ((uint32_t)0x00000000U)
506 #define RCC_LPTIM1CLKSOURCE_LSI RCC_CCIPR_LPTIM1SEL_0
507 #define RCC_LPTIM1CLKSOURCE_HSI RCC_CCIPR_LPTIM1SEL_1
508 #define RCC_LPTIM1CLKSOURCE_LSE RCC_CCIPR_LPTIM1SEL
509 /**
510 * @}
511 */
512
513 /** @defgroup RCCEx_LPTIM2_Clock_Source LPTIM2 Clock Source
514 * @{
515 */
516 #define RCC_LPTIM2CLKSOURCE_PCLK ((uint32_t)0x00000000U)
517 #define RCC_LPTIM2CLKSOURCE_LSI RCC_CCIPR_LPTIM2SEL_0
518 #define RCC_LPTIM2CLKSOURCE_HSI RCC_CCIPR_LPTIM2SEL_1
519 #define RCC_LPTIM2CLKSOURCE_LSE RCC_CCIPR_LPTIM2SEL
520 /**
521 * @}
522 */
523
524 #if defined(SDMMC1)
525 /** @defgroup RCCEx_SDMMC1_Clock_Source SDMMC1 Clock Source
526 * @{
527 */
528 #if defined(RCC_HSI48_SUPPORT)
529 #define RCC_SDMMC1CLKSOURCE_HSI48 ((uint32_t)0x00000000U)
530 #else
531 #define RCC_SDMMC1CLKSOURCE_NONE ((uint32_t)0x00000000U)
532 #endif /* RCC_HSI48_SUPPORT */
533 #define RCC_SDMMC1CLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0
534 #define RCC_SDMMC1CLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1
535 #define RCC_SDMMC1CLKSOURCE_MSI RCC_CCIPR_CLK48SEL
536 /**
537 * @}
538 */
539 #endif /* SDMMC1 */
540
541 /** @defgroup RCCEx_RNG_Clock_Source RNG Clock Source
542 * @{
543 */
544 #if defined(RCC_HSI48_SUPPORT)
545 #define RCC_RNGCLKSOURCE_HSI48 ((uint32_t)0x00000000U)
546 #else
547 #define RCC_RNGCLKSOURCE_NONE ((uint32_t)0x00000000U)
548 #endif /* RCC_HSI48_SUPPORT */
549 #define RCC_RNGCLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0
550 #define RCC_RNGCLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1
551 #define RCC_RNGCLKSOURCE_MSI RCC_CCIPR_CLK48SEL
552 /**
553 * @}
554 */
555
556 #if defined(USB_OTG_FS) || defined(USB)
557 /** @defgroup RCCEx_USB_Clock_Source USB Clock Source
558 * @{
559 */
560 #if defined(RCC_HSI48_SUPPORT)
561 #define RCC_USBCLKSOURCE_HSI48 ((uint32_t)0x00000000U)
562 #else
563 #define RCC_USBCLKSOURCE_NONE ((uint32_t)0x00000000U)
564 #endif /* RCC_HSI48_SUPPORT */
565 #define RCC_USBCLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0
566 #define RCC_USBCLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1
567 #define RCC_USBCLKSOURCE_MSI RCC_CCIPR_CLK48SEL
568 /**
569 * @}
570 */
571 #endif /* USB_OTG_FS || USB */
572
573 /** @defgroup RCCEx_ADC_Clock_Source ADC Clock Source
574 * @{
575 */
576 #define RCC_ADCCLKSOURCE_NONE ((uint32_t)0x00000000U)
577 #define RCC_ADCCLKSOURCE_PLLSAI1 RCC_CCIPR_ADCSEL_0
578 #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)
579 #define RCC_ADCCLKSOURCE_PLLSAI2 RCC_CCIPR_ADCSEL_1
580 #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */
581 #define RCC_ADCCLKSOURCE_SYSCLK RCC_CCIPR_ADCSEL
582 /**
583 * @}
584 */
585
586 #if defined(SWPMI1)
587 /** @defgroup RCCEx_SWPMI1_Clock_Source SWPMI1 Clock Source
588 * @{
589 */
590 #define RCC_SWPMI1CLKSOURCE_PCLK ((uint32_t)0x00000000U)
591 #define RCC_SWPMI1CLKSOURCE_HSI RCC_CCIPR_SWPMI1SEL
592 /**
593 * @}
594 */
595 #endif /* SWPMI1 */
596
597 #if defined(DFSDM1_Filter0)
598 /** @defgroup RCCEx_DFSDM1_Clock_Source DFSDM1 Clock Source
599 * @{
600 */
601 #define RCC_DFSDM1CLKSOURCE_PCLK ((uint32_t)0x00000000U)
602 #define RCC_DFSDM1CLKSOURCE_SYSCLK RCC_CCIPR_DFSDM1SEL
603 /**
604 * @}
605 */
606 #endif /* DFSDM1_Filter0 */
607
608 /** @defgroup RCCEx_EXTI_LINE_LSECSS RCC LSE CSS external interrupt line
609 * @{
610 */
611 #define RCC_EXTI_LINE_LSECSS EXTI_IMR1_IM19 /*!< External interrupt line 19 connected to the LSE CSS EXTI Line */
612 /**
613 * @}
614 */
615
616 #if defined(CRS)
617
618 /** @defgroup RCCEx_CRS_Status RCCEx CRS Status
619 * @{
620 */
621 #define RCC_CRS_NONE ((uint32_t)0x00000000U)
622 #define RCC_CRS_TIMEOUT ((uint32_t)0x00000001U)
623 #define RCC_CRS_SYNCOK ((uint32_t)0x00000002U)
624 #define RCC_CRS_SYNCWARN ((uint32_t)0x00000004U)
625 #define RCC_CRS_SYNCERR ((uint32_t)0x00000008U)
626 #define RCC_CRS_SYNCMISS ((uint32_t)0x00000010U)
627 #define RCC_CRS_TRIMOVF ((uint32_t)0x00000020U)
628 /**
629 * @}
630 */
631
632 /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource
633 * @{
634 */
635 #define RCC_CRS_SYNC_SOURCE_GPIO ((uint32_t)0x00000000U) /*!< Synchro Signal source GPIO */
636 #define RCC_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */
637 #define RCC_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/
638 /**
639 * @}
640 */
641
642 /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider
643 * @{
644 */
645 #define RCC_CRS_SYNC_DIV1 ((uint32_t)0x00000000U) /*!< Synchro Signal not divided (default) */
646 #define RCC_CRS_SYNC_DIV2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */
647 #define RCC_CRS_SYNC_DIV4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */
648 #define RCC_CRS_SYNC_DIV8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */
649 #define RCC_CRS_SYNC_DIV16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */
650 #define RCC_CRS_SYNC_DIV32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */
651 #define RCC_CRS_SYNC_DIV64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */
652 #define RCC_CRS_SYNC_DIV128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */
653 /**
654 * @}
655 */
656
657 /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity
658 * @{
659 */
660 #define RCC_CRS_SYNC_POLARITY_RISING ((uint32_t)0x00000000U) /*!< Synchro Active on rising edge (default) */
661 #define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */
662 /**
663 * @}
664 */
665
666 /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault
667 * @{
668 */
669 #define RCC_CRS_RELOADVALUE_DEFAULT ((uint32_t)0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds
670 to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */
671 /**
672 * @}
673 */
674
675 /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault
676 * @{
677 */
678 #define RCC_CRS_ERRORLIMIT_DEFAULT ((uint32_t)0x00000022U) /*!< Default Frequency error limit */
679 /**
680 * @}
681 */
682
683 /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault
684 * @{
685 */
686 #define RCC_CRS_HSI48CALIBRATION_DEFAULT ((uint32_t)0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval.
687 The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value
688 corresponds to a higher output frequency */
689 /**
690 * @}
691 */
692
693 /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection
694 * @{
695 */
696 #define RCC_CRS_FREQERRORDIR_UP ((uint32_t)0x00000000U) /*!< Upcounting direction, the actual frequency is above the target */
697 #define RCC_CRS_FREQERRORDIR_DOWN ((uint32_t)CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */
698 /**
699 * @}
700 */
701
702 /** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources
703 * @{
704 */
705 #define RCC_CRS_IT_SYNCOK CRS_CR_SYNCOKIE /*!< SYNC event OK */
706 #define RCC_CRS_IT_SYNCWARN CRS_CR_SYNCWARNIE /*!< SYNC warning */
707 #define RCC_CRS_IT_ERR CRS_CR_ERRIE /*!< Error */
708 #define RCC_CRS_IT_ESYNC CRS_CR_ESYNCIE /*!< Expected SYNC */
709 #define RCC_CRS_IT_SYNCERR CRS_CR_ERRIE /*!< SYNC error */
710 #define RCC_CRS_IT_SYNCMISS CRS_CR_ERRIE /*!< SYNC missed */
711 #define RCC_CRS_IT_TRIMOVF CRS_CR_ERRIE /*!< Trimming overflow or underflow */
712
713 /**
714 * @}
715 */
716
717 /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags
718 * @{
719 */
720 #define RCC_CRS_FLAG_SYNCOK CRS_ISR_SYNCOKF /*!< SYNC event OK flag */
721 #define RCC_CRS_FLAG_SYNCWARN CRS_ISR_SYNCWARNF /*!< SYNC warning flag */
722 #define RCC_CRS_FLAG_ERR CRS_ISR_ERRF /*!< Error flag */
723 #define RCC_CRS_FLAG_ESYNC CRS_ISR_ESYNCF /*!< Expected SYNC flag */
724 #define RCC_CRS_FLAG_SYNCERR CRS_ISR_SYNCERR /*!< SYNC error */
725 #define RCC_CRS_FLAG_SYNCMISS CRS_ISR_SYNCMISS /*!< SYNC missed*/
726 #define RCC_CRS_FLAG_TRIMOVF CRS_ISR_TRIMOVF /*!< Trimming overflow or underflow */
727
728 /**
729 * @}
730 */
731
732 #endif /* CRS */
733
734 /**
735 * @}
736 */
737
738 /* Exported macros -----------------------------------------------------------*/
739 /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
740 * @{
741 */
742
743
744 /**
745 * @brief Macro to configure the PLLSAI1 clock multiplication and division factors.
746 *
747 * @note This function must be used only when the PLLSAI1 is disabled.
748 * @note PLLSAI1 clock source is common with the main PLL (configured through
749 * __HAL_RCC_PLL_CONFIG() macro)
750 *
751 * @param __PLLSAI1N__ specifies the multiplication factor for PLLSAI1 VCO output clock.
752 * This parameter must be a number between 8 and 86.
753 * @note You have to set the PLLSAI1N parameter correctly to ensure that the VCO
754 * output frequency is between 64 and 344 MHz.
755 * PLLSAI1 clock frequency = f(PLLSAI1) multiplied by PLLSAI1N
756 *
757 * @param __PLLSAI1P__ specifies the division factor for SAI clock.
758 * This parameter must be a number in the range (7 or 17) for STM32L47xxx/L48xxx
759 * else (2 to 31).
760 * SAI1 clock frequency = f(PLLSAI1) / PLLSAI1P
761 *
762 * @param __PLLSAI1Q__ specifies the division factor for USB/RNG/SDMMC1 clock.
763 * This parameter must be in the range (2, 4, 6 or 8).
764 * USB/RNG/SDMMC1 clock frequency = f(PLLSAI1) / PLLSAI1Q
765 *
766 * @param __PLLSAI1R__ specifies the division factor for SAR ADC clock.
767 * This parameter must be in the range (2, 4, 6 or 8).
768 * ADC clock frequency = f(PLLSAI1) / PLLSAI1R
769 *
770 * @retval None
771 */
772 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT)
773
774 #define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \
775 WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | \
776 ((((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) | \
777 ((((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R)) | \
778 ((__PLLSAI1P__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV)))
779
780 #else
781
782 #define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \
783 WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | \
784 (((__PLLSAI1P__) >> 4U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P)) | \
785 ((((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) | \
786 ((((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R)))
787
788 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */
789
790 /**
791 * @brief Macro to configure the PLLSAI1 clock multiplication factor N.
792 *
793 * @note This function must be used only when the PLLSAI1 is disabled.
794 * @note PLLSAI1 clock source is common with the main PLL (configured through
795 * __HAL_RCC_PLL_CONFIG() macro)
796 *
797 * @param __PLLSAI1N__ specifies the multiplication factor for PLLSAI1 VCO output clock.
798 * This parameter must be a number between 8 and 86.
799 * @note You have to set the PLLSAI1N parameter correctly to ensure that the VCO
800 * output frequency is between 64 and 344 MHz.
801 * Use to set PLLSAI1 clock frequency = f(PLLSAI1) multiplied by PLLSAI1N
802 *
803 * @retval None
804 */
805 #define __HAL_RCC_PLLSAI1_MULN_CONFIG(__PLLSAI1N__) \
806 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N, (__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N))
807
808 /** @brief Macro to configure the PLLSAI1 clock division factor P.
809 *
810 * @note This function must be used only when the PLLSAI1 is disabled.
811 * @note PLLSAI1 clock source is common with the main PLL (configured through
812 * __HAL_RCC_PLL_CONFIG() macro)
813 *
814 * @param __PLLSAI1P__ specifies the division factor for SAI clock.
815 * This parameter must be a number in the range (7 or 17) for STM32L47xxx/L48xxx
816 * else (2 to 31).
817 * Use to set SAI1 clock frequency = f(PLLSAI1) / PLLSAI1P
818 *
819 * @retval None
820 */
821 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT)
822
823 #define __HAL_RCC_PLLSAI1_DIVP_CONFIG(__PLLSAI1P__) \
824 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV, (__PLLSAI1P__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV))
825
826 #else
827
828 #define __HAL_RCC_PLLSAI1_DIVP_CONFIG(__PLLSAI1P__) \
829 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P, ((__PLLSAI1P__) >> 4U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P))
830
831 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */
832
833 /** @brief Macro to configure the PLLSAI1 clock division factor Q.
834 *
835 * @note This function must be used only when the PLLSAI1 is disabled.
836 * @note PLLSAI1 clock source is common with the main PLL (configured through
837 * __HAL_RCC_PLL_CONFIG() macro)
838 *
839 * @param __PLLSAI1Q__ specifies the division factor for USB/RNG/SDMMC1 clock.
840 * This parameter must be in the range (2, 4, 6 or 8).
841 * Use to set USB/RNG/SDMMC1 clock frequency = f(PLLSAI1) / PLLSAI1Q
842 *
843 * @retval None
844 */
845 #define __HAL_RCC_PLLSAI1_DIVQ_CONFIG(__PLLSAI1Q__) \
846 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q, (((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q))
847
848 /** @brief Macro to configure the PLLSAI1 clock division factor R.
849 *
850 * @note This function must be used only when the PLLSAI1 is disabled.
851 * @note PLLSAI1 clock source is common with the main PLL (configured through
852 * __HAL_RCC_PLL_CONFIG() macro)
853 *
854 * @param __PLLSAI1R__ specifies the division factor for ADC clock.
855 * This parameter must be in the range (2, 4, 6 or 8)
856 * Use to set ADC clock frequency = f(PLLSAI1) / PLLSAI1R
857 *
858 * @retval None
859 */
860 #define __HAL_RCC_PLLSAI1_DIVR_CONFIG(__PLLSAI1R__) \
861 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R, (((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R))
862
863 /**
864 * @brief Macros to enable or disable the PLLSAI1.
865 * @note The PLLSAI1 is disabled by hardware when entering STOP and STANDBY modes.
866 * @retval None
867 */
868
869 #define __HAL_RCC_PLLSAI1_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLLSAI1ON)
870
871 #define __HAL_RCC_PLLSAI1_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI1ON)
872
873 /**
874 * @brief Macros to enable or disable each clock output (PLLSAI1_SAI1, PLLSAI1_USB2 and PLLSAI1_ADC1).
875 * @note Enabling and disabling those clocks can be done without the need to stop the PLL.
876 * This is mainly used to save Power.
877 * @param __PLLSAI1_CLOCKOUT__ specifies the PLLSAI1 clock to be output.
878 * This parameter can be one or a combination of the following values:
879 * @arg @ref RCC_PLLSAI1_SAI1CLK This clock is used to generate an accurate clock to achieve
880 * high-quality audio performance on SAI interface in case.
881 * @arg @ref RCC_PLLSAI1_48M2CLK This clock is used to generate the clock for the USB OTG FS (48 MHz),
882 * the random number generator (<=48 MHz) and the SDIO (<= 48 MHz).
883 * @arg @ref RCC_PLLSAI1_ADC1CLK Clock used to clock ADC peripheral.
884 * @retval None
885 */
886
887 #define __HAL_RCC_PLLSAI1CLKOUT_ENABLE(__PLLSAI1_CLOCKOUT__) SET_BIT(RCC->PLLSAI1CFGR, (__PLLSAI1_CLOCKOUT__))
888
889 #define __HAL_RCC_PLLSAI1CLKOUT_DISABLE(__PLLSAI1_CLOCKOUT__) CLEAR_BIT(RCC->PLLSAI1CFGR, (__PLLSAI1_CLOCKOUT__))
890
891 /**
892 * @brief Macro to get clock output enable status (PLLSAI1_SAI1, PLLSAI1_USB2 and PLLSAI1_ADC1).
893 * @param __PLLSAI1_CLOCKOUT__ specifies the PLLSAI1 clock to be output.
894 * This parameter can be one of the following values:
895 * @arg @ref RCC_PLLSAI1_SAI1CLK This clock is used to generate an accurate clock to achieve
896 * high-quality audio performance on SAI interface in case.
897 * @arg @ref RCC_PLLSAI1_48M2CLK This clock is used to generate the clock for the USB OTG FS (48 MHz),
898 * the random number generator (<=48 MHz) and the SDIO (<= 48 MHz).
899 * @arg @ref RCC_PLLSAI1_ADC1CLK Clock used to clock ADC peripheral.
900 * @retval SET / RESET
901 */
902 #define __HAL_RCC_GET_PLLSAI1CLKOUT_CONFIG(__PLLSAI1_CLOCKOUT__) READ_BIT(RCC->PLLSAI1CFGR, (__PLLSAI1_CLOCKOUT__))
903
904 #if defined(RCC_PLLSAI2_SUPPORT)
905
906 /**
907 * @brief Macro to configure the PLLSAI2 clock multiplication and division factors.
908 *
909 * @note This function must be used only when the PLLSAI2 is disabled.
910 * @note PLLSAI2 clock source is common with the main PLL (configured through
911 * __HAL_RCC_PLL_CONFIG() macro)
912 *
913 * @param __PLLSAI2N__ specifies the multiplication factor for PLLSAI2 VCO output clock.
914 * This parameter must be a number between 8 and 86.
915 * @note You have to set the PLLSAI2N parameter correctly to ensure that the VCO
916 * output frequency is between 64 and 344 MHz.
917 *
918 * @param __PLLSAI2P__ specifies the division factor for SAI clock.
919 * This parameter must be a number in the range (7 or 17) for STM32L47xxx/L48xxx
920 * else (2 to 31).
921 * SAI2 clock frequency = f(PLLSAI2) / PLLSAI2P
922 *
923 * @param __PLLSAI2R__ specifies the division factor for SAR ADC clock.
924 * This parameter must be in the range (2, 4, 6 or 8).
925 *
926 * @retval None
927 */
928
929 #if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT)
930
931 #define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \
932 WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | \
933 ((((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R)) | \
934 ((__PLLSAI2P__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2PDIV)))
935
936 #else
937
938 #define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \
939 WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | \
940 (((__PLLSAI2P__) >> 4U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P)) | \
941 ((((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R)))
942
943 #endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */
944
945
946 /**
947 * @brief Macro to configure the PLLSAI2 clock multiplication factor N.
948 *
949 * @note This function must be used only when the PLLSAI2 is disabled.
950 * @note PLLSAI2 clock source is common with the main PLL (configured through
951 * __HAL_RCC_PLL_CONFIG() macro)
952 *
953 * @param __PLLSAI2N__ specifies the multiplication factor for PLLSAI2 VCO output clock.
954 * This parameter must be a number between 8 and 86.
955 * @note You have to set the PLLSAI2N parameter correctly to ensure that the VCO
956 * output frequency is between 64 and 344 MHz.
957 * PLLSAI1 clock frequency = f(PLLSAI1) multiplied by PLLSAI2N
958 *
959 * @retval None
960 */
961 #define __HAL_RCC_PLLSAI2_MULN_CONFIG(__PLLSAI2N__) \
962 MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N, (__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N))
963
964 /** @brief Macro to configure the PLLSAI2 clock division factor P.
965 *
966 * @note This function must be used only when the PLLSAI2 is disabled.
967 * @note PLLSAI2 clock source is common with the main PLL (configured through
968 * __HAL_RCC_PLL_CONFIG() macro)
969 *
970 * @param __PLLSAI2P__ specifies the division factor.
971 * This parameter must be a number in the range (7 or 17).
972 * Use to set SAI2 clock frequency = f(PLLSAI2) / __PLLSAI2P__
973 *
974 * @retval None
975 */
976 #define __HAL_RCC_PLLSAI2_DIVP_CONFIG(__PLLSAI2P__) \
977 MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P, ((__PLLSAI2P__) >> 4U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P))
978
979 /** @brief Macro to configure the PLLSAI2 clock division factor R.
980 *
981 * @note This function must be used only when the PLLSAI2 is disabled.
982 * @note PLLSAI2 clock source is common with the main PLL (configured through
983 * __HAL_RCC_PLL_CONFIG() macro)
984 *
985 * @param __PLLSAI2R__ specifies the division factor.
986 * This parameter must be in the range (2, 4, 6 or 8).
987 * Use to set ADC clock frequency = f(PLLSAI2) / __PLLSAI2R__
988 *
989 * @retval None
990 */
991 #define __HAL_RCC_PLLSAI2_DIVR_CONFIG(__PLLSAI2R__) \
992 MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R, (((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R))
993
994 /**
995 * @brief Macros to enable or disable the PLLSAI2.
996 * @note The PLLSAI2 is disabled by hardware when entering STOP and STANDBY modes.
997 * @retval None
998 */
999
1000 #define __HAL_RCC_PLLSAI2_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLLSAI2ON)
1001
1002 #define __HAL_RCC_PLLSAI2_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI2ON)
1003
1004 /**
1005 * @brief Macros to enable or disable each clock output (PLLSAI2_SAI2 and PLLSAI2_ADC2).
1006 * @note Enabling and disabling those clocks can be done without the need to stop the PLL.
1007 * This is mainly used to save Power.
1008 * @param __PLLSAI2_CLOCKOUT__ specifies the PLLSAI2 clock to be output.
1009 * This parameter can be one or a combination of the following values:
1010 * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve
1011 * high-quality audio performance on SAI interface in case.
1012 * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral.
1013 * @retval None
1014 */
1015
1016 #define __HAL_RCC_PLLSAI2CLKOUT_ENABLE(__PLLSAI2_CLOCKOUT__) SET_BIT(RCC->PLLSAI2CFGR, (__PLLSAI2_CLOCKOUT__))
1017
1018 #define __HAL_RCC_PLLSAI2CLKOUT_DISABLE(__PLLSAI2_CLOCKOUT__) CLEAR_BIT(RCC->PLLSAI2CFGR, (__PLLSAI2_CLOCKOUT__))
1019
1020 /**
1021 * @brief Macro to get clock output enable status (PLLSAI2_SAI2 and PLLSAI2_ADC2).
1022 * @param __PLLSAI2_CLOCKOUT__ specifies the PLLSAI2 clock to be output.
1023 * This parameter can be one of the following values:
1024 * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve
1025 * high-quality audio performance on SAI interface in case.
1026 * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral.
1027 * @retval SET / RESET
1028 */
1029 #define __HAL_RCC_GET_PLLSAI2CLKOUT_CONFIG(__PLLSAI2_CLOCKOUT__) READ_BIT(RCC->PLLSAI2CFGR, (__PLLSAI2_CLOCKOUT__))
1030
1031 #endif /* RCC_PLLSAI2_SUPPORT */
1032
1033 /**
1034 * @brief Macro to configure the SAI1 clock source.
1035 * @param __SAI1_CLKSOURCE__ defines the SAI1 clock source. This clock is derived
1036 * from the PLLSAI1, system PLL or external clock (through a dedicated pin).
1037 * This parameter can be one of the following values:
1038 * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI1 SAI1 clock = PLLSAI1 "P" clock (PLLSAI1CLK)
1039 @if STM32L486xx
1040 * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2
1041 @endif
1042 * @arg @ref RCC_SAI1CLKSOURCE_PLL SAI1 clock = PLL "P" clock (PLLSAI3CLK if PLLSAI2 exists, else PLLSAI2CLK)
1043 * @arg @ref RCC_SAI1CLKSOURCE_PIN SAI1 clock = External Clock (SAI1_EXTCLK)
1044 *
1045 @if STM32L443xx
1046 * @note HSI16 is automatically set as SAI1 clock source when PLL are disabled for devices without PLLSAI2.
1047 @endif
1048 @if STM32L462xx
1049 * @note HSI16 is automatically set as SAI1 clock source when PLL are disabled for devices without PLLSAI2.
1050 @endif
1051 *
1052 * @retval None
1053 */
1054 #define __HAL_RCC_SAI1_CONFIG(__SAI1_CLKSOURCE__)\
1055 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI1SEL, (uint32_t)(__SAI1_CLKSOURCE__))
1056
1057 /** @brief Macro to get the SAI1 clock source.
1058 * @retval The clock source can be one of the following values:
1059 * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI1 SAI1 clock = PLLSAI1 "P" clock (PLLSAI1CLK)
1060 @if STM32L486xx
1061 * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2
1062 @endif
1063 * @arg @ref RCC_SAI1CLKSOURCE_PLL SAI1 clock = PLL "P" clock (PLLSAI3CLK if PLLSAI2 exists, else PLLSAI2CLK)
1064 * @arg @ref RCC_SAI1CLKSOURCE_PIN SAI1 clock = External Clock (SAI1_EXTCLK)
1065 *
1066 * @note Despite returned values RCC_SAI1CLKSOURCE_PLLSAI1 or RCC_SAI1CLKSOURCE_PLL, HSI16 is automatically set as SAI1
1067 * clock source when PLLs are disabled for devices without PLLSAI2.
1068 *
1069 */
1070 #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI1SEL)))
1071
1072 #if defined(SAI2)
1073
1074 /**
1075 * @brief Macro to configure the SAI2 clock source.
1076 * @param __SAI2_CLKSOURCE__ defines the SAI2 clock source. This clock is derived
1077 * from the PLLSAI2, system PLL or external clock (through a dedicated pin).
1078 * This parameter can be one of the following values:
1079 * @arg @ref RCC_SAI2CLKSOURCE_PLLSAI1 SAI2 clock = PLLSAI1 "P" clock (PLLSAI1CLK)
1080 * @arg @ref RCC_SAI2CLKSOURCE_PLLSAI2 SAI2 clock = PLLSAI2 "P" clock (PLLSAI2CLK)
1081 * @arg @ref RCC_SAI2CLKSOURCE_PLL SAI2 clock = PLL "P" clock (PLLSAI3CLK)
1082 * @arg @ref RCC_SAI2CLKSOURCE_PIN SAI2 clock = External Clock (SAI2_EXTCLK)
1083 *
1084 * @retval None
1085 */
1086 #define __HAL_RCC_SAI2_CONFIG(__SAI2_CLKSOURCE__ )\
1087 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI2SEL, (uint32_t)(__SAI2_CLKSOURCE__))
1088
1089 /** @brief Macro to get the SAI2 clock source.
1090 * @retval The clock source can be one of the following values:
1091 * @arg @ref RCC_SAI2CLKSOURCE_PLLSAI1 SAI2 clock = PLLSAI1 "P" clock (PLLSAI1CLK)
1092 * @arg @ref RCC_SAI2CLKSOURCE_PLLSAI2 SAI2 clock = PLLSAI2 "P" clock (PLLSAI2CLK)
1093 * @arg @ref RCC_SAI2CLKSOURCE_PLL SAI2 clock = PLL "P" clock (PLLSAI3CLK)
1094 * @arg @ref RCC_SAI2CLKSOURCE_PIN SAI2 clock = External Clock (SAI2_EXTCLK)
1095 */
1096 #define __HAL_RCC_GET_SAI2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI2SEL)))
1097
1098 #endif /* SAI2 */
1099
1100 /** @brief Macro to configure the I2C1 clock (I2C1CLK).
1101 *
1102 * @param __I2C1_CLKSOURCE__ specifies the I2C1 clock source.
1103 * This parameter can be one of the following values:
1104 * @arg @ref RCC_I2C1CLKSOURCE_PCLK1 PCLK1 selected as I2C1 clock
1105 * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock
1106 * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock
1107 * @retval None
1108 */
1109 #define __HAL_RCC_I2C1_CONFIG(__I2C1_CLKSOURCE__) \
1110 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C1SEL, (uint32_t)(__I2C1_CLKSOURCE__))
1111
1112 /** @brief Macro to get the I2C1 clock source.
1113 * @retval The clock source can be one of the following values:
1114 * @arg @ref RCC_I2C1CLKSOURCE_PCLK1 PCLK1 selected as I2C1 clock
1115 * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock
1116 * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock
1117 */
1118 #define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C1SEL)))
1119
1120 #if defined(I2C2)
1121
1122 /** @brief Macro to configure the I2C2 clock (I2C2CLK).
1123 *
1124 * @param __I2C2_CLKSOURCE__ specifies the I2C2 clock source.
1125 * This parameter can be one of the following values:
1126 * @arg @ref RCC_I2C2CLKSOURCE_PCLK1 PCLK1 selected as I2C2 clock
1127 * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock
1128 * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock
1129 * @retval None
1130 */
1131 #define __HAL_RCC_I2C2_CONFIG(__I2C2_CLKSOURCE__) \
1132 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C2SEL, (uint32_t)(__I2C2_CLKSOURCE__))
1133
1134 /** @brief Macro to get the I2C2 clock source.
1135 * @retval The clock source can be one of the following values:
1136 * @arg @ref RCC_I2C2CLKSOURCE_PCLK1 PCLK1 selected as I2C2 clock
1137 * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock
1138 * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock
1139 */
1140 #define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C2SEL)))
1141
1142 #endif /* I2C2 */
1143
1144 /** @brief Macro to configure the I2C3 clock (I2C3CLK).
1145 *
1146 * @param __I2C3_CLKSOURCE__ specifies the I2C3 clock source.
1147 * This parameter can be one of the following values:
1148 * @arg @ref RCC_I2C3CLKSOURCE_PCLK1 PCLK1 selected as I2C3 clock
1149 * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock
1150 * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock
1151 * @retval None
1152 */
1153 #define __HAL_RCC_I2C3_CONFIG(__I2C3_CLKSOURCE__) \
1154 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C3SEL, (uint32_t)(__I2C3_CLKSOURCE__))
1155
1156 /** @brief Macro to get the I2C3 clock source.
1157 * @retval The clock source can be one of the following values:
1158 * @arg @ref RCC_I2C3CLKSOURCE_PCLK1 PCLK1 selected as I2C3 clock
1159 * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock
1160 * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock
1161 */
1162 #define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C3SEL)))
1163
1164 #if defined(I2C4)
1165
1166 /** @brief Macro to configure the I2C4 clock (I2C4CLK).
1167 *
1168 * @param __I2C4_CLKSOURCE__ specifies the I2C4 clock source.
1169 * This parameter can be one of the following values:
1170 * @arg @ref RCC_I2C4CLKSOURCE_PCLK1 PCLK1 selected as I2C4 clock
1171 * @arg @ref RCC_I2C4CLKSOURCE_HSI HSI selected as I2C4 clock
1172 * @arg @ref RCC_I2C4CLKSOURCE_SYSCLK System Clock selected as I2C4 clock
1173 * @retval None
1174 */
1175 #define __HAL_RCC_I2C4_CONFIG(__I2C4_CLKSOURCE__) \
1176 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL, (uint32_t)(__I2C4_CLKSOURCE__))
1177
1178 /** @brief Macro to get the I2C4 clock source.
1179 * @retval The clock source can be one of the following values:
1180 * @arg @ref RCC_I2C4CLKSOURCE_PCLK1 PCLK1 selected as I2C4 clock
1181 * @arg @ref RCC_I2C4CLKSOURCE_HSI HSI selected as I2C4 clock
1182 * @arg @ref RCC_I2C4CLKSOURCE_SYSCLK System Clock selected as I2C4 clock
1183 */
1184 #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL)))
1185
1186 #endif /* I2C4 */
1187
1188
1189 /** @brief Macro to configure the USART1 clock (USART1CLK).
1190 *
1191 * @param __USART1_CLKSOURCE__ specifies the USART1 clock source.
1192 * This parameter can be one of the following values:
1193 * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock
1194 * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock
1195 * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock
1196 * @arg @ref RCC_USART1CLKSOURCE_LSE SE selected as USART1 clock
1197 * @retval None
1198 */
1199 #define __HAL_RCC_USART1_CONFIG(__USART1_CLKSOURCE__) \
1200 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART1SEL, (uint32_t)(__USART1_CLKSOURCE__))
1201
1202 /** @brief Macro to get the USART1 clock source.
1203 * @retval The clock source can be one of the following values:
1204 * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock
1205 * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock
1206 * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock
1207 * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock
1208 */
1209 #define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART1SEL)))
1210
1211 /** @brief Macro to configure the USART2 clock (USART2CLK).
1212 *
1213 * @param __USART2_CLKSOURCE__ specifies the USART2 clock source.
1214 * This parameter can be one of the following values:
1215 * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock
1216 * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock
1217 * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock
1218 * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock
1219 * @retval None
1220 */
1221 #define __HAL_RCC_USART2_CONFIG(__USART2_CLKSOURCE__) \
1222 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART2SEL, (uint32_t)(__USART2_CLKSOURCE__))
1223
1224 /** @brief Macro to get the USART2 clock source.
1225 * @retval The clock source can be one of the following values:
1226 * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock
1227 * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock
1228 * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock
1229 * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock
1230 */
1231 #define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART2SEL)))
1232
1233 #if defined(USART3)
1234
1235 /** @brief Macro to configure the USART3 clock (USART3CLK).
1236 *
1237 * @param __USART3_CLKSOURCE__ specifies the USART3 clock source.
1238 * This parameter can be one of the following values:
1239 * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock
1240 * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock
1241 * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock
1242 * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock
1243 * @retval None
1244 */
1245 #define __HAL_RCC_USART3_CONFIG(__USART3_CLKSOURCE__) \
1246 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART3SEL, (uint32_t)(__USART3_CLKSOURCE__))
1247
1248 /** @brief Macro to get the USART3 clock source.
1249 * @retval The clock source can be one of the following values:
1250 * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock
1251 * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock
1252 * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock
1253 * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock
1254 */
1255 #define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART3SEL)))
1256
1257 #endif /* USART3 */
1258
1259 #if defined(UART4)
1260
1261 /** @brief Macro to configure the UART4 clock (UART4CLK).
1262 *
1263 * @param __UART4_CLKSOURCE__ specifies the UART4 clock source.
1264 * This parameter can be one of the following values:
1265 * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock
1266 * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock
1267 * @arg @ref RCC_UART4CLKSOURCE_SYSCLK System Clock selected as UART4 clock
1268 * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock
1269 * @retval None
1270 */
1271 #define __HAL_RCC_UART4_CONFIG(__UART4_CLKSOURCE__) \
1272 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART4SEL, (uint32_t)(__UART4_CLKSOURCE__))
1273
1274 /** @brief Macro to get the UART4 clock source.
1275 * @retval The clock source can be one of the following values:
1276 * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock
1277 * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock
1278 * @arg @ref RCC_UART4CLKSOURCE_SYSCLK System Clock selected as UART4 clock
1279 * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock
1280 */
1281 #define __HAL_RCC_GET_UART4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_UART4SEL)))
1282
1283 #endif /* UART4 */
1284
1285 #if defined(UART5)
1286
1287 /** @brief Macro to configure the UART5 clock (UART5CLK).
1288 *
1289 * @param __UART5_CLKSOURCE__ specifies the UART5 clock source.
1290 * This parameter can be one of the following values:
1291 * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock
1292 * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock
1293 * @arg @ref RCC_UART5CLKSOURCE_SYSCLK System Clock selected as UART5 clock
1294 * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock
1295 * @retval None
1296 */
1297 #define __HAL_RCC_UART5_CONFIG(__UART5_CLKSOURCE__) \
1298 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART5SEL, (uint32_t)(__UART5_CLKSOURCE__))
1299
1300 /** @brief Macro to get the UART5 clock source.
1301 * @retval The clock source can be one of the following values:
1302 * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock
1303 * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock
1304 * @arg @ref RCC_UART5CLKSOURCE_SYSCLK System Clock selected as UART5 clock
1305 * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock
1306 */
1307 #define __HAL_RCC_GET_UART5_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_UART5SEL)))
1308
1309 #endif /* UART5 */
1310
1311 /** @brief Macro to configure the LPUART1 clock (LPUART1CLK).
1312 *
1313 * @param __LPUART1_CLKSOURCE__ specifies the LPUART1 clock source.
1314 * This parameter can be one of the following values:
1315 * @arg @ref RCC_LPUART1CLKSOURCE_PCLK1 PCLK1 selected as LPUART1 clock
1316 * @arg @ref RCC_LPUART1CLKSOURCE_HSI HSI selected as LPUART1 clock
1317 * @arg @ref RCC_LPUART1CLKSOURCE_SYSCLK System Clock selected as LPUART1 clock
1318 * @arg @ref RCC_LPUART1CLKSOURCE_LSE LSE selected as LPUART1 clock
1319 * @retval None
1320 */
1321 #define __HAL_RCC_LPUART1_CONFIG(__LPUART1_CLKSOURCE__) \
1322 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, (uint32_t)(__LPUART1_CLKSOURCE__))
1323
1324 /** @brief Macro to get the LPUART1 clock source.
1325 * @retval The clock source can be one of the following values:
1326 * @arg @ref RCC_LPUART1CLKSOURCE_PCLK1 PCLK1 selected as LPUART1 clock
1327 * @arg @ref RCC_LPUART1CLKSOURCE_HSI HSI selected as LPUART1 clock
1328 * @arg @ref RCC_LPUART1CLKSOURCE_SYSCLK System Clock selected as LPUART1 clock
1329 * @arg @ref RCC_LPUART1CLKSOURCE_LSE LSE selected as LPUART1 clock
1330 */
1331 #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPUART1SEL)))
1332
1333 /** @brief Macro to configure the LPTIM1 clock (LPTIM1CLK).
1334 *
1335 * @param __LPTIM1_CLKSOURCE__ specifies the LPTIM1 clock source.
1336 * This parameter can be one of the following values:
1337 * @arg @ref RCC_LPTIM1CLKSOURCE_PCLK PCLK selected as LPTIM1 clock
1338 * @arg @ref RCC_LPTIM1CLKSOURCE_LSI HSI selected as LPTIM1 clock
1339 * @arg @ref RCC_LPTIM1CLKSOURCE_HSI LSI selected as LPTIM1 clock
1340 * @arg @ref RCC_LPTIM1CLKSOURCE_LSE LSE selected as LPTIM1 clock
1341 * @retval None
1342 */
1343 #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1_CLKSOURCE__) \
1344 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL, (uint32_t)(__LPTIM1_CLKSOURCE__))
1345
1346 /** @brief Macro to get the LPTIM1 clock source.
1347 * @retval The clock source can be one of the following values:
1348 * @arg @ref RCC_LPTIM1CLKSOURCE_PCLK PCLK selected as LPUART1 clock
1349 * @arg @ref RCC_LPTIM1CLKSOURCE_LSI HSI selected as LPUART1 clock
1350 * @arg @ref RCC_LPTIM1CLKSOURCE_HSI System Clock selected as LPUART1 clock
1351 * @arg @ref RCC_LPTIM1CLKSOURCE_LSE LSE selected as LPUART1 clock
1352 */
1353 #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL)))
1354
1355 /** @brief Macro to configure the LPTIM2 clock (LPTIM2CLK).
1356 *
1357 * @param __LPTIM2_CLKSOURCE__ specifies the LPTIM2 clock source.
1358 * This parameter can be one of the following values:
1359 * @arg @ref RCC_LPTIM2CLKSOURCE_PCLK PCLK selected as LPTIM2 clock
1360 * @arg @ref RCC_LPTIM2CLKSOURCE_LSI HSI selected as LPTIM2 clock
1361 * @arg @ref RCC_LPTIM2CLKSOURCE_HSI LSI selected as LPTIM2 clock
1362 * @arg @ref RCC_LPTIM2CLKSOURCE_LSE LSE selected as LPTIM2 clock
1363 * @retval None
1364 */
1365 #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2_CLKSOURCE__) \
1366 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2_CLKSOURCE__))
1367
1368 /** @brief Macro to get the LPTIM2 clock source.
1369 * @retval The clock source can be one of the following values:
1370 * @arg @ref RCC_LPTIM2CLKSOURCE_PCLK PCLK selected as LPUART1 clock
1371 * @arg @ref RCC_LPTIM2CLKSOURCE_LSI HSI selected as LPUART1 clock
1372 * @arg @ref RCC_LPTIM2CLKSOURCE_HSI System Clock selected as LPUART1 clock
1373 * @arg @ref RCC_LPTIM2CLKSOURCE_LSE LSE selected as LPUART1 clock
1374 */
1375 #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL)))
1376
1377 #if defined(SDMMC1)
1378
1379 /** @brief Macro to configure the SDMMC1 clock.
1380 *
1381 @if STM32L443xx
1382 * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source.
1383 @endif
1384 @if STM32L462xx
1385 * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source.
1386 @endif
1387 @if STM32L486xx
1388 * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source.
1389 @endif
1390 *
1391 * @param __SDMMC1_CLKSOURCE__ specifies the SDMMC1 clock source.
1392 * This parameter can be one of the following values:
1393 @if STM32L443xx
1394 * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48
1395 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1396 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock
1397 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock
1398 @endif
1399 @if STM32L462xx
1400 * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48
1401 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1402 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock
1403 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock
1404 @endif
1405 @if STM32L486xx
1406 * @arg @ref RCC_SDMMC1CLKSOURCE_NONE No clock selected as SDMMC1 clock for devices without HSI48
1407 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1408 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock
1409 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock
1410 @endif
1411 * @retval None
1412 */
1413 #define __HAL_RCC_SDMMC1_CONFIG(__SDMMC1_CLKSOURCE__) \
1414 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__SDMMC1_CLKSOURCE__))
1415
1416 /** @brief Macro to get the SDMMC1 clock.
1417 * @retval The clock source can be one of the following values:
1418 @if STM32L443xx
1419 * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48
1420 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1421 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock
1422 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock
1423 @endif
1424 @if STM32L462xx
1425 * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48
1426 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1427 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock
1428 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock
1429 @endif
1430 @if STM32L486xx
1431 * @arg @ref RCC_SDMMC1CLKSOURCE_NONE No clock selected as SDMMC1 clock for devices without HSI48
1432 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock
1433 * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock
1434 * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock
1435 @endif
1436 */
1437 #define __HAL_RCC_GET_SDMMC1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)))
1438
1439 #endif /* SDMMC1 */
1440
1441 /** @brief Macro to configure the RNG clock.
1442 *
1443 * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source.
1444 *
1445 * @param __RNG_CLKSOURCE__ specifies the RNG clock source.
1446 * This parameter can be one of the following values:
1447 @if STM32L443xx
1448 * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48
1449 @endif
1450 @if STM32L462xx
1451 * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48
1452 @endif
1453 @if STM32L486xx
1454 * @arg @ref RCC_RNGCLKSOURCE_NONE No clock selected as RNG clock for devices without HSI48
1455 @endif
1456 * @arg @ref RCC_RNGCLKSOURCE_MSI MSI selected as RNG clock
1457 * @arg @ref RCC_RNGCLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as RNG clock
1458 * @arg @ref RCC_RNGCLKSOURCE_PLL PLL Clock selected as RNG clock
1459 * @retval None
1460 */
1461 #define __HAL_RCC_RNG_CONFIG(__RNG_CLKSOURCE__) \
1462 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__RNG_CLKSOURCE__))
1463
1464 /** @brief Macro to get the RNG clock.
1465 * @retval The clock source can be one of the following values:
1466 @if STM32L443xx
1467 * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48
1468 @endif
1469 @if STM32L462xx
1470 * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48
1471 @endif
1472 @if STM32L486xx
1473 * @arg @ref RCC_RNGCLKSOURCE_NONE No clock selected as RNG clock for devices without HSI48
1474 @endif
1475 * @arg @ref RCC_RNGCLKSOURCE_MSI MSI selected as RNG clock
1476 * @arg @ref RCC_RNGCLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as RNG clock
1477 * @arg @ref RCC_RNGCLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as RNG clock
1478 */
1479 #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)))
1480
1481 #if defined(USB_OTG_FS) || defined(USB)
1482
1483 /** @brief Macro to configure the USB clock (USBCLK).
1484 *
1485 * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source.
1486 *
1487 * @param __USB_CLKSOURCE__ specifies the USB clock source.
1488 * This parameter can be one of the following values:
1489 @if STM32L443xx
1490 * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48
1491 @endif
1492 @if STM32L462xx
1493 * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48
1494 @endif
1495 @if STM32L486xx
1496 * @arg @ref RCC_USBCLKSOURCE_NONE No clock selected as 48MHz clock for devices without HSI48
1497 @endif
1498 * @arg @ref RCC_USBCLKSOURCE_MSI MSI selected as USB clock
1499 * @arg @ref RCC_USBCLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as USB clock
1500 * @arg @ref RCC_USBCLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as USB clock
1501 * @retval None
1502 */
1503 #define __HAL_RCC_USB_CONFIG(__USB_CLKSOURCE__) \
1504 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__USB_CLKSOURCE__))
1505
1506 /** @brief Macro to get the USB clock source.
1507 * @retval The clock source can be one of the following values:
1508 @if STM32L443xx
1509 * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48
1510 @endif
1511 @if STM32L462xx
1512 * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48
1513 @endif
1514 @if STM32L486xx
1515 * @arg @ref RCC_USBCLKSOURCE_NONE No clock selected as 48MHz clock for devices without HSI48
1516 @endif
1517 * @arg @ref RCC_USBCLKSOURCE_MSI MSI selected as USB clock
1518 * @arg @ref RCC_USBCLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as USB clock
1519 * @arg @ref RCC_USBCLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as USB clock
1520 */
1521 #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)))
1522
1523 #endif /* USB_OTG_FS || USB */
1524
1525 /** @brief Macro to configure the ADC interface clock.
1526 * @param __ADC_CLKSOURCE__ specifies the ADC digital interface clock source.
1527 * This parameter can be one of the following values:
1528 * @arg @ref RCC_ADCCLKSOURCE_NONE No clock selected as ADC clock
1529 * @arg @ref RCC_ADCCLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as ADC clock
1530 @if STM32L486xx
1531 * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x devices
1532 @endif
1533 * @arg @ref RCC_ADCCLKSOURCE_SYSCLK System Clock selected as ADC clock
1534 * @retval None
1535 */
1536 #define __HAL_RCC_ADC_CONFIG(__ADC_CLKSOURCE__) \
1537 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, (uint32_t)(__ADC_CLKSOURCE__))
1538
1539 /** @brief Macro to get the ADC clock source.
1540 * @retval The clock source can be one of the following values:
1541 * @arg @ref RCC_ADCCLKSOURCE_NONE No clock selected as ADC clock
1542 * @arg @ref RCC_ADCCLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as ADC clock
1543 @if STM32L486xx
1544 * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x devices
1545 @endif
1546 * @arg @ref RCC_ADCCLKSOURCE_SYSCLK System Clock selected as ADC clock
1547 */
1548 #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_ADCSEL)))
1549
1550 #if defined(SWPMI1)
1551
1552 /** @brief Macro to configure the SWPMI1 clock.
1553 * @param __SWPMI1_CLKSOURCE__ specifies the SWPMI1 clock source.
1554 * This parameter can be one of the following values:
1555 * @arg @ref RCC_SWPMI1CLKSOURCE_PCLK PCLK Clock selected as SWPMI1 clock
1556 * @arg @ref RCC_SWPMI1CLKSOURCE_HSI HSI Clock selected as SWPMI1 clock
1557 * @retval None
1558 */
1559 #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1_CLKSOURCE__) \
1560 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL, (uint32_t)(__SWPMI1_CLKSOURCE__))
1561
1562 /** @brief Macro to get the SWPMI1 clock source.
1563 * @retval The clock source can be one of the following values:
1564 * @arg @ref RCC_SWPMI1CLKSOURCE_PCLK PCLK Clock selected as SWPMI1 clock
1565 * @arg @ref RCC_SWPMI1CLKSOURCE_HSI HSI Clock selected as SWPMI1 clock
1566 */
1567 #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL)))
1568
1569 #endif /* SWPMI1 */
1570
1571 #if defined(DFSDM1_Filter0)
1572 /** @brief Macro to configure the DFSDM1 clock.
1573 * @param __DFSDM1_CLKSOURCE__ specifies the DFSDM1 clock source.
1574 * This parameter can be one of the following values:
1575 * @arg @ref RCC_DFSDM1CLKSOURCE_PCLK PCLK Clock selected as DFSDM1 clock
1576 * @arg @ref RCC_DFSDM1CLKSOURCE_SYSCLK System Clock selected as DFSDM1 clock
1577 * @retval None
1578 */
1579 #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1_CLKSOURCE__) \
1580 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL, (uint32_t)(__DFSDM1_CLKSOURCE__))
1581
1582 /** @brief Macro to get the DFSDM1 clock source.
1583 * @retval The clock source can be one of the following values:
1584 * @arg @ref RCC_DFSDM1CLKSOURCE_PCLK PCLK Clock selected as DFSDM1 clock
1585 * @arg @ref RCC_DFSDM1CLKSOURCE_SYSCLK System Clock selected as DFSDM1 clock
1586 */
1587 #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL)))
1588
1589 #endif /* DFSDM1_Filter0 */
1590
1591 /** @defgroup RCCEx_Flags_Interrupts_Management Flags Interrupts Management
1592 * @brief macros to manage the specified RCC Flags and interrupts.
1593 * @{
1594 */
1595
1596 /** @brief Enable PLLSAI1RDY interrupt.
1597 * @retval None
1598 */
1599 #define __HAL_RCC_PLLSAI1_ENABLE_IT() SET_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE)
1600
1601 /** @brief Disable PLLSAI1RDY interrupt.
1602 * @retval None
1603 */
1604 #define __HAL_RCC_PLLSAI1_DISABLE_IT() CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE)
1605
1606 /** @brief Clear the PLLSAI1RDY interrupt pending bit.
1607 * @retval None
1608 */
1609 #define __HAL_RCC_PLLSAI1_CLEAR_IT() WRITE_REG(RCC->CICR, RCC_CICR_PLLSAI1RDYC)
1610
1611 /** @brief Check whether PLLSAI1RDY interrupt has occurred or not.
1612 * @retval TRUE or FALSE.
1613 */
1614 #define __HAL_RCC_PLLSAI1_GET_IT_SOURCE() (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI1RDYF) == RCC_CIFR_PLLSAI1RDYF)
1615
1616 /** @brief Check whether the PLLSAI1RDY flag is set or not.
1617 * @retval TRUE or FALSE.
1618 */
1619 #define __HAL_RCC_PLLSAI1_GET_FLAG() (READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == (RCC_CR_PLLSAI1RDY))
1620
1621 #if defined(RCC_PLLSAI2_SUPPORT)
1622
1623 /** @brief Enable PLLSAI2RDY interrupt.
1624 * @retval None
1625 */
1626 #define __HAL_RCC_PLLSAI2_ENABLE_IT() SET_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE)
1627
1628 /** @brief Disable PLLSAI2RDY interrupt.
1629 * @retval None
1630 */
1631 #define __HAL_RCC_PLLSAI2_DISABLE_IT() CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE)
1632
1633 /** @brief Clear the PLLSAI2RDY interrupt pending bit.
1634 * @retval None
1635 */
1636 #define __HAL_RCC_PLLSAI2_CLEAR_IT() WRITE_REG(RCC->CICR, RCC_CICR_PLLSAI2RDYC)
1637
1638 /** @brief Check whether the PLLSAI2RDY interrupt has occurred or not.
1639 * @retval TRUE or FALSE.
1640 */
1641 #define __HAL_RCC_PLLSAI2_GET_IT_SOURCE() (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI2RDYF) == RCC_CIFR_PLLSAI2RDYF)
1642
1643 /** @brief Check whether the PLLSAI2RDY flag is set or not.
1644 * @retval TRUE or FALSE.
1645 */
1646 #define __HAL_RCC_PLLSAI2_GET_FLAG() (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == (RCC_CR_PLLSAI2RDY))
1647
1648 #endif /* RCC_PLLSAI2_SUPPORT */
1649
1650
1651 /**
1652 * @brief Enable the RCC LSE CSS Extended Interrupt Line.
1653 * @retval None
1654 */
1655 #define __HAL_RCC_LSECSS_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
1656
1657 /**
1658 * @brief Disable the RCC LSE CSS Extended Interrupt Line.
1659 * @retval None
1660 */
1661 #define __HAL_RCC_LSECSS_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
1662
1663 /**
1664 * @brief Enable the RCC LSE CSS Event Line.
1665 * @retval None.
1666 */
1667 #define __HAL_RCC_LSECSS_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
1668
1669 /**
1670 * @brief Disable the RCC LSE CSS Event Line.
1671 * @retval None.
1672 */
1673 #define __HAL_RCC_LSECSS_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
1674
1675
1676 /**
1677 * @brief Enable the RCC LSE CSS Extended Interrupt Falling Trigger.
1678 * @retval None.
1679 */
1680 #define __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
1681
1682
1683 /**
1684 * @brief Disable the RCC LSE CSS Extended Interrupt Falling Trigger.
1685 * @retval None.
1686 */
1687 #define __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
1688
1689
1690 /**
1691 * @brief Enable the RCC LSE CSS Extended Interrupt Rising Trigger.
1692 * @retval None.
1693 */
1694 #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
1695
1696 /**
1697 * @brief Disable the RCC LSE CSS Extended Interrupt Rising Trigger.
1698 * @retval None.
1699 */
1700 #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
1701
1702 /**
1703 * @brief Enable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
1704 * @retval None.
1705 */
1706 #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_FALLING_EDGE() \
1707 do { \
1708 __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE(); \
1709 __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE(); \
1710 } while(0)
1711
1712 /**
1713 * @brief Disable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
1714 * @retval None.
1715 */
1716 #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_FALLING_EDGE() \
1717 do { \
1718 __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE(); \
1719 __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE(); \
1720 } while(0)
1721
1722 /**
1723 * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not.
1724 * @retval EXTI RCC LSE CSS Line Status.
1725 */
1726 #define __HAL_RCC_LSECSS_EXTI_GET_FLAG() (READ_BIT(EXTI->PR1, RCC_EXTI_LINE_LSECSS) == RCC_EXTI_LINE_LSECSS)
1727
1728 /**
1729 * @brief Clear the RCC LSE CSS EXTI flag.
1730 * @retval None.
1731 */
1732 #define __HAL_RCC_LSECSS_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR1, RCC_EXTI_LINE_LSECSS)
1733
1734 /**
1735 * @brief Generate a Software interrupt on the RCC LSE CSS EXTI line.
1736 * @retval None.
1737 */
1738 #define __HAL_RCC_LSECSS_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, RCC_EXTI_LINE_LSECSS)
1739
1740
1741 #if defined(CRS)
1742
1743 /**
1744 * @brief Enable the specified CRS interrupts.
1745 * @param __INTERRUPT__ specifies the CRS interrupt sources to be enabled.
1746 * This parameter can be any combination of the following values:
1747 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
1748 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
1749 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
1750 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
1751 * @retval None
1752 */
1753 #define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__) SET_BIT(CRS->CR, (__INTERRUPT__))
1754
1755 /**
1756 * @brief Disable the specified CRS interrupts.
1757 * @param __INTERRUPT__ specifies the CRS interrupt sources to be disabled.
1758 * This parameter can be any combination of the following values:
1759 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
1760 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
1761 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
1762 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
1763 * @retval None
1764 */
1765 #define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(CRS->CR, (__INTERRUPT__))
1766
1767 /** @brief Check whether the CRS interrupt has occurred or not.
1768 * @param __INTERRUPT__ specifies the CRS interrupt source to check.
1769 * This parameter can be one of the following values:
1770 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
1771 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
1772 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
1773 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
1774 * @retval The new state of __INTERRUPT__ (SET or RESET).
1775 */
1776 #define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__) ((READ_BIT(CRS->CR, (__INTERRUPT__)) != RESET) ? SET : RESET)
1777
1778 /** @brief Clear the CRS interrupt pending bits
1779 * @param __INTERRUPT__ specifies the interrupt pending bit to clear.
1780 * This parameter can be any combination of the following values:
1781 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
1782 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
1783 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
1784 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
1785 * @arg @ref RCC_CRS_IT_TRIMOVF Trimming overflow or underflow interrupt
1786 * @arg @ref RCC_CRS_IT_SYNCERR SYNC error interrupt
1787 * @arg @ref RCC_CRS_IT_SYNCMISS SYNC missed interrupt
1788 */
1789 /* CRS IT Error Mask */
1790 #define RCC_CRS_IT_ERROR_MASK ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS))
1791
1792 #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__) do { \
1793 if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != RESET) \
1794 { \
1795 WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \
1796 } \
1797 else \
1798 { \
1799 WRITE_REG(CRS->ICR, (__INTERRUPT__)); \
1800 } \
1801 } while(0)
1802
1803 /**
1804 * @brief Check whether the specified CRS flag is set or not.
1805 * @param __FLAG__ specifies the flag to check.
1806 * This parameter can be one of the following values:
1807 * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK
1808 * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning
1809 * @arg @ref RCC_CRS_FLAG_ERR Error
1810 * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC
1811 * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow
1812 * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error
1813 * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed
1814 * @retval The new state of _FLAG_ (TRUE or FALSE).
1815 */
1816 #define __HAL_RCC_CRS_GET_FLAG(__FLAG__) (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__))
1817
1818 /**
1819 * @brief Clear the CRS specified FLAG.
1820 * @param __FLAG__ specifies the flag to clear.
1821 * This parameter can be one of the following values:
1822 * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK
1823 * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning
1824 * @arg @ref RCC_CRS_FLAG_ERR Error
1825 * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC
1826 * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow
1827 * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error
1828 * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed
1829 * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS and consequently RCC_CRS_FLAG_ERR
1830 * @retval None
1831 */
1832
1833 /* CRS Flag Error Mask */
1834 #define RCC_CRS_FLAG_ERROR_MASK ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS))
1835
1836 #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__) do { \
1837 if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != RESET) \
1838 { \
1839 WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \
1840 } \
1841 else \
1842 { \
1843 WRITE_REG(CRS->ICR, (__FLAG__)); \
1844 } \
1845 } while(0)
1846
1847 #endif /* CRS */
1848
1849 /**
1850 * @}
1851 */
1852
1853 #if defined(CRS)
1854
1855 /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features
1856 * @{
1857 */
1858 /**
1859 * @brief Enable the oscillator clock for frequency error counter.
1860 * @note when the CEN bit is set the CRS_CFGR register becomes write-protected.
1861 * @retval None
1862 */
1863 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE() SET_BIT(CRS->CR, CRS_CR_CEN)
1864
1865 /**
1866 * @brief Disable the oscillator clock for frequency error counter.
1867 * @retval None
1868 */
1869 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN)
1870
1871 /**
1872 * @brief Enable the automatic hardware adjustement of TRIM bits.
1873 * @note When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected.
1874 * @retval None
1875 */
1876 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE() SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
1877
1878 /**
1879 * @brief Enable or disable the automatic hardware adjustement of TRIM bits.
1880 * @retval None
1881 */
1882 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
1883
1884 /**
1885 * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies
1886 * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency
1887 * of the synchronization source after prescaling. It is then decreased by one in order to
1888 * reach the expected synchronization on the zero value. The formula is the following:
1889 * RELOAD = (fTARGET / fSYNC) -1
1890 * @param __FTARGET__ Target frequency (value in Hz)
1891 * @param __FSYNC__ Synchronization signal frequency (value in Hz)
1892 * @retval None
1893 */
1894 #define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U)
1895
1896 /**
1897 * @}
1898 */
1899
1900 #endif /* CRS */
1901
1902 /**
1903 * @}
1904 */
1905
1906 /* Exported functions --------------------------------------------------------*/
1907 /** @addtogroup RCCEx_Exported_Functions
1908 * @{
1909 */
1910
1911 /** @addtogroup RCCEx_Exported_Functions_Group1
1912 * @{
1913 */
1914
1915 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
1916 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
1917 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);
1918
1919 /**
1920 * @}
1921 */
1922
1923 /** @addtogroup RCCEx_Exported_Functions_Group2
1924 * @{
1925 */
1926
1927 HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI1(RCC_PLLSAI1InitTypeDef *PLLSAI1Init);
1928 HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI1(void);
1929
1930 #if defined(RCC_PLLSAI2_SUPPORT)
1931
1932 HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI2(RCC_PLLSAI2InitTypeDef *PLLSAI2Init);
1933 HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI2(void);
1934
1935 #endif /* RCC_PLLSAI2_SUPPORT */
1936
1937 void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk);
1938 void HAL_RCCEx_StandbyMSIRangeConfig(uint32_t MSIRange);
1939 void HAL_RCCEx_EnableLSECSS(void);
1940 void HAL_RCCEx_DisableLSECSS(void);
1941 void HAL_RCCEx_EnableLSECSS_IT(void);
1942 void HAL_RCCEx_LSECSS_IRQHandler(void);
1943 void HAL_RCCEx_LSECSS_Callback(void);
1944 void HAL_RCCEx_EnableLSCO(uint32_t LSCOSource);
1945 void HAL_RCCEx_DisableLSCO(void);
1946 void HAL_RCCEx_EnableMSIPLLMode(void);
1947 void HAL_RCCEx_DisableMSIPLLMode(void);
1948
1949 /**
1950 * @}
1951 */
1952
1953 #if defined(CRS)
1954
1955 /** @addtogroup RCCEx_Exported_Functions_Group3
1956 * @{
1957 */
1958
1959 void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit);
1960 void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void);
1961 void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo);
1962 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout);
1963 void HAL_RCCEx_CRS_IRQHandler(void);
1964 void HAL_RCCEx_CRS_SyncOkCallback(void);
1965 void HAL_RCCEx_CRS_SyncWarnCallback(void);
1966 void HAL_RCCEx_CRS_ExpectedSyncCallback(void);
1967 void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error);
1968
1969 /**
1970 * @}
1971 */
1972
1973 #endif /* CRS */
1974
1975 /**
1976 * @}
1977 */
1978
1979 /* Private macros ------------------------------------------------------------*/
1980 /** @addtogroup RCCEx_Private_Macros
1981 * @{
1982 */
1983
1984 #define IS_RCC_LSCOSOURCE(__SOURCE__) (((__SOURCE__) == RCC_LSCOSOURCE_LSI) || \
1985 ((__SOURCE__) == RCC_LSCOSOURCE_LSE))
1986
1987 #if defined(STM32L431xx)
1988
1989 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
1990 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
1991 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
1992 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
1993 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
1994 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
1995 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
1996 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
1997 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
1998 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
1999 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2000 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2001 (((__SELECTION__) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1) || \
2002 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2003 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2004 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2005
2006 #elif defined(STM32L432xx) || defined(STM32L442xx)
2007
2008 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2009 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2010 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2011 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2012 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2013 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2014 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2015 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2016 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2017 (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \
2018 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2019 (((__SELECTION__) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1) || \
2020 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2021 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG))
2022
2023 #elif defined(STM32L433xx) || defined(STM32L443xx)
2024
2025 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2026 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2027 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2028 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
2029 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2030 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2031 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
2032 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2033 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2034 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2035 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2036 (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \
2037 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2038 (((__SELECTION__) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1) || \
2039 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2040 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2041 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2042
2043 #elif defined(STM32L451xx)
2044
2045 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2046 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2047 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2048 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
2049 (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \
2050 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2051 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2052 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
2053 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2054 (((__SELECTION__) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) || \
2055 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2056 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2057 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2058 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2059 (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \
2060 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2061 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2062 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2063
2064 #elif defined(STM32L452xx) || defined(STM32L462xx)
2065
2066 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2067 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2068 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2069 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
2070 (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \
2071 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2072 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2073 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
2074 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2075 (((__SELECTION__) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) || \
2076 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2077 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2078 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2079 (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \
2080 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2081 (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \
2082 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2083 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2084 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2085
2086 #elif defined(STM32L471xx)
2087
2088 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2089 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2090 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2091 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
2092 (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \
2093 (((__SELECTION__) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) || \
2094 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2095 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2096 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
2097 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2098 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2099 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2100 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2101 (((__SELECTION__) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) || \
2102 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2103 (((__SELECTION__) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1) || \
2104 (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \
2105 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2106 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2107 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2108
2109 #else
2110
2111 #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
2112 ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \
2113 (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \
2114 (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \
2115 (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \
2116 (((__SELECTION__) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) || \
2117 (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \
2118 (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \
2119 (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \
2120 (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \
2121 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \
2122 (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \
2123 (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \
2124 (((__SELECTION__) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) || \
2125 (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \
2126 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
2127 (((__SELECTION__) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1) || \
2128 (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \
2129 (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
2130 (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \
2131 (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1))
2132
2133 #endif /* STM32L431xx */
2134
2135 #define IS_RCC_USART1CLKSOURCE(__SOURCE__) \
2136 (((__SOURCE__) == RCC_USART1CLKSOURCE_PCLK2) || \
2137 ((__SOURCE__) == RCC_USART1CLKSOURCE_SYSCLK) || \
2138 ((__SOURCE__) == RCC_USART1CLKSOURCE_LSE) || \
2139 ((__SOURCE__) == RCC_USART1CLKSOURCE_HSI))
2140
2141 #define IS_RCC_USART2CLKSOURCE(__SOURCE__) \
2142 (((__SOURCE__) == RCC_USART2CLKSOURCE_PCLK1) || \
2143 ((__SOURCE__) == RCC_USART2CLKSOURCE_SYSCLK) || \
2144 ((__SOURCE__) == RCC_USART2CLKSOURCE_LSE) || \
2145 ((__SOURCE__) == RCC_USART2CLKSOURCE_HSI))
2146
2147 #if defined(USART3)
2148
2149 #define IS_RCC_USART3CLKSOURCE(__SOURCE__) \
2150 (((__SOURCE__) == RCC_USART3CLKSOURCE_PCLK1) || \
2151 ((__SOURCE__) == RCC_USART3CLKSOURCE_SYSCLK) || \
2152 ((__SOURCE__) == RCC_USART3CLKSOURCE_LSE) || \
2153 ((__SOURCE__) == RCC_USART3CLKSOURCE_HSI))
2154
2155 #endif /* USART3 */
2156
2157 #if defined(UART4)
2158
2159 #define IS_RCC_UART4CLKSOURCE(__SOURCE__) \
2160 (((__SOURCE__) == RCC_UART4CLKSOURCE_PCLK1) || \
2161 ((__SOURCE__) == RCC_UART4CLKSOURCE_SYSCLK) || \
2162 ((__SOURCE__) == RCC_UART4CLKSOURCE_LSE) || \
2163 ((__SOURCE__) == RCC_UART4CLKSOURCE_HSI))
2164
2165 #endif /* UART4 */
2166
2167 #if defined(UART5)
2168
2169 #define IS_RCC_UART5CLKSOURCE(__SOURCE__) \
2170 (((__SOURCE__) == RCC_UART5CLKSOURCE_PCLK1) || \
2171 ((__SOURCE__) == RCC_UART5CLKSOURCE_SYSCLK) || \
2172 ((__SOURCE__) == RCC_UART5CLKSOURCE_LSE) || \
2173 ((__SOURCE__) == RCC_UART5CLKSOURCE_HSI))
2174
2175 #endif /* UART5 */
2176
2177 #define IS_RCC_LPUART1CLKSOURCE(__SOURCE__) \
2178 (((__SOURCE__) == RCC_LPUART1CLKSOURCE_PCLK1) || \
2179 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_SYSCLK) || \
2180 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_LSE) || \
2181 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_HSI))
2182
2183 #define IS_RCC_I2C1CLKSOURCE(__SOURCE__) \
2184 (((__SOURCE__) == RCC_I2C1CLKSOURCE_PCLK1) || \
2185 ((__SOURCE__) == RCC_I2C1CLKSOURCE_SYSCLK)|| \
2186 ((__SOURCE__) == RCC_I2C1CLKSOURCE_HSI))
2187
2188 #if defined(I2C2)
2189
2190 #define IS_RCC_I2C2CLKSOURCE(__SOURCE__) \
2191 (((__SOURCE__) == RCC_I2C2CLKSOURCE_PCLK1) || \
2192 ((__SOURCE__) == RCC_I2C2CLKSOURCE_SYSCLK)|| \
2193 ((__SOURCE__) == RCC_I2C2CLKSOURCE_HSI))
2194
2195 #endif /* I2C2 */
2196
2197 #define IS_RCC_I2C3CLKSOURCE(__SOURCE__) \
2198 (((__SOURCE__) == RCC_I2C3CLKSOURCE_PCLK1) || \
2199 ((__SOURCE__) == RCC_I2C3CLKSOURCE_SYSCLK)|| \
2200 ((__SOURCE__) == RCC_I2C3CLKSOURCE_HSI))
2201
2202 #if defined(I2C4)
2203
2204 #define IS_RCC_I2C4CLKSOURCE(__SOURCE__) \
2205 (((__SOURCE__) == RCC_I2C4CLKSOURCE_PCLK1) || \
2206 ((__SOURCE__) == RCC_I2C4CLKSOURCE_SYSCLK)|| \
2207 ((__SOURCE__) == RCC_I2C4CLKSOURCE_HSI))
2208
2209 #endif /* I2C4 */
2210
2211 #if defined(RCC_PLLSAI2_SUPPORT)
2212
2213 #define IS_RCC_SAI1CLK(__SOURCE__) \
2214 (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI1) || \
2215 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI2) || \
2216 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL) || \
2217 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN))
2218
2219 #else
2220
2221 #define IS_RCC_SAI1CLK(__SOURCE__) \
2222 (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI1) || \
2223 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL) || \
2224 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN))
2225
2226 #endif /* RCC_PLLSAI2_SUPPORT */
2227
2228 #if defined(RCC_PLLSAI2_SUPPORT)
2229
2230 #define IS_RCC_SAI2CLK(__SOURCE__) \
2231 (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI1) || \
2232 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI2) || \
2233 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL) || \
2234 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN))
2235
2236 #endif /* RCC_PLLSAI2_SUPPORT */
2237
2238 #define IS_RCC_LPTIM1CLK(__SOURCE__) \
2239 (((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PCLK) || \
2240 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSI) || \
2241 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_HSI) || \
2242 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSE))
2243
2244 #define IS_RCC_LPTIM2CLK(__SOURCE__) \
2245 (((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PCLK) || \
2246 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSI) || \
2247 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_HSI) || \
2248 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSE))
2249
2250 #if defined(SDMMC1)
2251 #if defined(RCC_HSI48_SUPPORT)
2252
2253 #define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \
2254 (((__SOURCE__) == RCC_SDMMC1CLKSOURCE_HSI48) || \
2255 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLLSAI1) || \
2256 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL) || \
2257 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_MSI))
2258
2259 #else
2260
2261 #define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \
2262 (((__SOURCE__) == RCC_SDMMC1CLKSOURCE_NONE) || \
2263 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLLSAI1) || \
2264 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL) || \
2265 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_MSI))
2266
2267 #endif /* RCC_HSI48_SUPPORT */
2268 #endif /* SDMMC1 */
2269
2270 #if defined(RCC_HSI48_SUPPORT)
2271
2272 #define IS_RCC_RNGCLKSOURCE(__SOURCE__) \
2273 (((__SOURCE__) == RCC_RNGCLKSOURCE_HSI48) || \
2274 ((__SOURCE__) == RCC_RNGCLKSOURCE_PLLSAI1) || \
2275 ((__SOURCE__) == RCC_RNGCLKSOURCE_PLL) || \
2276 ((__SOURCE__) == RCC_RNGCLKSOURCE_MSI))
2277
2278 #else
2279
2280 #define IS_RCC_RNGCLKSOURCE(__SOURCE__) \
2281 (((__SOURCE__) == RCC_RNGCLKSOURCE_NONE) || \
2282 ((__SOURCE__) == RCC_RNGCLKSOURCE_PLLSAI1) || \
2283 ((__SOURCE__) == RCC_RNGCLKSOURCE_PLL) || \
2284 ((__SOURCE__) == RCC_RNGCLKSOURCE_MSI))
2285
2286 #endif /* RCC_HSI48_SUPPORT */
2287
2288 #if defined(USB_OTG_FS) || defined(USB)
2289 #if defined(RCC_HSI48_SUPPORT)
2290
2291 #define IS_RCC_USBCLKSOURCE(__SOURCE__) \
2292 (((__SOURCE__) == RCC_USBCLKSOURCE_HSI48) || \
2293 ((__SOURCE__) == RCC_USBCLKSOURCE_PLLSAI1) || \
2294 ((__SOURCE__) == RCC_USBCLKSOURCE_PLL) || \
2295 ((__SOURCE__) == RCC_USBCLKSOURCE_MSI))
2296
2297 #else
2298
2299 #define IS_RCC_USBCLKSOURCE(__SOURCE__) \
2300 (((__SOURCE__) == RCC_USBCLKSOURCE_NONE) || \
2301 ((__SOURCE__) == RCC_USBCLKSOURCE_PLLSAI1) || \
2302 ((__SOURCE__) == RCC_USBCLKSOURCE_PLL) || \
2303 ((__SOURCE__) == RCC_USBCLKSOURCE_MSI))
2304
2305 #endif /* RCC_HSI48_SUPPORT */
2306 #endif /* USB_OTG_FS || USB */
2307
2308 #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)
2309
2310 #define IS_RCC_ADCCLKSOURCE(__SOURCE__) \
2311 (((__SOURCE__) == RCC_ADCCLKSOURCE_NONE) || \
2312 ((__SOURCE__) == RCC_ADCCLKSOURCE_PLLSAI1) || \
2313 ((__SOURCE__) == RCC_ADCCLKSOURCE_PLLSAI2) || \
2314 ((__SOURCE__) == RCC_ADCCLKSOURCE_SYSCLK))
2315
2316 #else
2317
2318 #define IS_RCC_ADCCLKSOURCE(__SOURCE__) \
2319 (((__SOURCE__) == RCC_ADCCLKSOURCE_NONE) || \
2320 ((__SOURCE__) == RCC_ADCCLKSOURCE_PLLSAI1) || \
2321 ((__SOURCE__) == RCC_ADCCLKSOURCE_SYSCLK))
2322
2323 #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */
2324
2325 #if defined(SWPMI1)
2326
2327 #define IS_RCC_SWPMI1CLKSOURCE(__SOURCE__) \
2328 (((__SOURCE__) == RCC_SWPMI1CLKSOURCE_PCLK) || \
2329 ((__SOURCE__) == RCC_SWPMI1CLKSOURCE_HSI))
2330
2331 #endif /* SWPMI1 */
2332
2333 #if defined(DFSDM1_Filter0)
2334
2335 #define IS_RCC_DFSDM1CLKSOURCE(__SOURCE__) \
2336 (((__SOURCE__) == RCC_DFSDM1CLKSOURCE_PCLK) || \
2337 ((__SOURCE__) == RCC_DFSDM1CLKSOURCE_SYSCLK))
2338
2339 #endif /* DFSDM1_Filter0 */
2340
2341 #define IS_RCC_PLLSAI1SOURCE(__VALUE__) IS_RCC_PLLSOURCE(__VALUE__)
2342
2343 #define IS_RCC_PLLSAI1M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 8U))
2344
2345 #define IS_RCC_PLLSAI1N_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U))
2346
2347 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT)
2348 #define IS_RCC_PLLSAI1P_VALUE(__VALUE__) (((__VALUE__) >= 2U) && ((__VALUE__) <= 31U))
2349 #else
2350 #define IS_RCC_PLLSAI1P_VALUE(__VALUE__) (((__VALUE__) == 7U) || ((__VALUE__) == 17U))
2351 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */
2352
2353 #define IS_RCC_PLLSAI1Q_VALUE(__VALUE__) (((__VALUE__) == 2U) || ((__VALUE__) == 4U) || \
2354 ((__VALUE__) == 6U) || ((__VALUE__) == 8U))
2355
2356 #define IS_RCC_PLLSAI1R_VALUE(__VALUE__) (((__VALUE__) == 2U) || ((__VALUE__) == 4U) || \
2357 ((__VALUE__) == 6U) || ((__VALUE__) == 8U))
2358
2359 #if defined(RCC_PLLSAI2_SUPPORT)
2360
2361 #define IS_RCC_PLLSAI2SOURCE(__VALUE__) IS_RCC_PLLSOURCE(__VALUE__)
2362
2363 #define IS_RCC_PLLSAI2M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 8U))
2364
2365 #define IS_RCC_PLLSAI2N_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U))
2366
2367 #if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT)
2368 #define IS_RCC_PLLSAI2P_VALUE(__VALUE__) (((__VALUE__) >= 2U) && ((__VALUE__) <= 31U))
2369 #else
2370 #define IS_RCC_PLLSAI2P_VALUE(__VALUE__) (((__VALUE__) == 7U) || ((__VALUE__) == 17U))
2371 #endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */
2372
2373 #define IS_RCC_PLLSAI2R_VALUE(__VALUE__) (((__VALUE__) == 2U) || ((__VALUE__) == 4U) || \
2374 ((__VALUE__) == 6U) || ((__VALUE__) == 8U))
2375
2376 #endif /* RCC_PLLSAI2_SUPPORT */
2377
2378 #if defined(CRS)
2379
2380 #define IS_RCC_CRS_SYNC_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_CRS_SYNC_SOURCE_GPIO) || \
2381 ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_LSE) || \
2382 ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB))
2383
2384 #define IS_RCC_CRS_SYNC_DIV(__DIV__) (((__DIV__) == RCC_CRS_SYNC_DIV1) || ((__DIV__) == RCC_CRS_SYNC_DIV2) || \
2385 ((__DIV__) == RCC_CRS_SYNC_DIV4) || ((__DIV__) == RCC_CRS_SYNC_DIV8) || \
2386 ((__DIV__) == RCC_CRS_SYNC_DIV16) || ((__DIV__) == RCC_CRS_SYNC_DIV32) || \
2387 ((__DIV__) == RCC_CRS_SYNC_DIV64) || ((__DIV__) == RCC_CRS_SYNC_DIV128))
2388
2389 #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \
2390 ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING))
2391
2392 #define IS_RCC_CRS_RELOADVALUE(__VALUE__) (((__VALUE__) <= 0xFFFFU))
2393
2394 #define IS_RCC_CRS_ERRORLIMIT(__VALUE__) (((__VALUE__) <= 0xFFU))
2395
2396 #define IS_RCC_CRS_HSI48CALIBRATION(__VALUE__) (((__VALUE__) <= 0x3FU))
2397
2398 #define IS_RCC_CRS_FREQERRORDIR(__DIR__) (((__DIR__) == RCC_CRS_FREQERRORDIR_UP) || \
2399 ((__DIR__) == RCC_CRS_FREQERRORDIR_DOWN))
2400
2401 #endif /* CRS */
2402
2403 /**
2404 * @}
2405 */
2406
2407 /**
2408 * @}
2409 */
2410
2411 /**
2412 * @}
2413 */
2414
2415 #ifdef __cplusplus
2416 }
2417 #endif
2418
2419 #endif /* __STM32L4xx_HAL_RCC_EX_H */
2420
2421 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/