Mercurial > pub > halpp
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>© 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****/ |