1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_rcc_ex.h 4 * @author MCD Application Team 5 * @brief Header file of RCC HAL Extended module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef __STM32H5xx_HAL_RCC_EX_H 21 #define __STM32H5xx_HAL_RCC_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32h5xx_hal_def.h" 29 30 /** @addtogroup STM32H5xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup RCCEx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup RCCEx_Exported_Types RCCEx Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief PLL2 Clock structure definition 45 */ 46 typedef struct 47 { 48 uint32_t PLL2Source; /*!< RCC_PLL2Source: PLL2 entry clock source. 49 This parameter must be a value of @ref RCC_PLL2_Clock_Source */ 50 51 uint32_t PLL2M; /*!< PLL2M: Division factor for PLL2 VCO input clock. 52 This parameter must be a number between Min_Data = 1 and Max_Data = 63 */ 53 54 uint32_t PLL2N; /*!< PLL2N: Multiplication factor for PLL2 VCO output clock. 55 This parameter must be a number between Min_Data = 4 and Max_Data = 512 */ 56 57 uint32_t PLL2P; /*!< PLL2P: Division factor for peripheral clock. 58 This parameter must be a number between Min_Data = 2 and Max_Data = 128 */ 59 60 uint32_t PLL2Q; /*!< PLL2Q: Division factor for peripheral clocks. 61 This parameter must be a number between Min_Data = 1 and Max_Data = 128 */ 62 63 uint32_t PLL2R; /*!< PLL2R: Division factor for peripheral clocks. 64 This parameter must be a number between Min_Data = 1 and Max_Data = 128 65 odd division factors are not allowed */ 66 67 uint32_t PLL2RGE; /*!<PLL2RGE: PLL2 clock Input range 68 This parameter must be a value of @ref RCC_PLL2_VCI_Range */ 69 70 uint32_t PLL2VCOSEL; /*!<PLL2VCOSEL: PLL2 clock Output range 71 This parameter must be a value of @ref RCC_PLL2_VCO_Range */ 72 73 uint32_t PLL2FRACN; /*!<PLL2FRACN: Specifies Fractional Part Of The Multiplication Factor for 74 PLL2 VCO It should be a value between 0 and 8191 */ 75 76 uint32_t PLL2ClockOut; /*!< PLL2ClockOut: specifies PLL2 output clock to be enabled. 77 This parameter must be a value or a combination of @ref RCC_PLL2_Clock_Output */ 78 } RCC_PLL2InitTypeDef; 79 80 81 #if defined(RCC_CR_PLL3ON) 82 /** 83 * @brief PLL3 Clock structure definition 84 */ 85 typedef struct 86 { 87 uint32_t PLL3Source; /*!< RCC_PLL3Source: PLL3 entry clock source. 88 This parameter must be a value of @ref RCC_PLL3_Clock_Source */ 89 90 uint32_t PLL3M; /*!< PLL3M: Division factor for PLL3 VCO input clock. 91 This parameter must be a number between Min_Data = 1 and Max_Data = 63 */ 92 93 uint32_t PLL3N; /*!< PLL3N: Multiplication factor for PLL3 VCO output clock. 94 This parameter must be a number between Min_Data = 4 and Max_Data = 512 */ 95 96 uint32_t PLL3P; /*!< PLL3P: Division factor for system clock. 97 This parameter must be a number between Min_Data = 2 and Max_Data = 128 */ 98 99 uint32_t PLL3Q; /*!< PLL3Q: Division factor for peripheral clocks. 100 This parameter must be a number between Min_Data = 1 and Max_Data = 128 */ 101 102 uint32_t PLL3R; /*!< PLL3R: Division factor for peripheral clocks. 103 This parameter must be a number between Min_Data = 1 and Max_Data = 128 104 odd division factors are not allowed */ 105 106 uint32_t PLL3RGE; /*!<PLL3RGE: PLL3 clock Input range 107 This parameter must be a value of @ref RCC_PLL3_VCI_Range */ 108 109 uint32_t PLL3VCOSEL; /*!<PLL3VCOSEL: PLL3 clock Output range 110 This parameter must be a value of @ref RCC_PLL3_VCO_Range */ 111 112 uint32_t PLL3FRACN; /*!<PLL3FRACN: Specifies Fractional Part Of The Multiplication Factor for 113 PLL3 VCO It should be a value between 0 and 8191 */ 114 115 uint32_t PLL3ClockOut; /*!< PLL3ClockOut: specifies PLL3 output clock to be enabled. 116 This parameter must be a value or a combination of @ref RCC_PLL3_Clock_Output */ 117 } RCC_PLL3InitTypeDef; 118 #endif /* RCC_CR_PLL3ON */ 119 120 /** 121 * @brief RCC PLL1 Clocks structure definition 122 */ 123 typedef struct 124 { 125 uint32_t PLL1_P_Frequency; 126 uint32_t PLL1_Q_Frequency; 127 uint32_t PLL1_R_Frequency; 128 } PLL1_ClocksTypeDef; 129 130 /** 131 * @brief RCC PLL2 Clocks structure definition 132 */ 133 typedef struct 134 { 135 uint32_t PLL2_P_Frequency; 136 uint32_t PLL2_Q_Frequency; 137 uint32_t PLL2_R_Frequency; 138 } PLL2_ClocksTypeDef; 139 140 #if defined(RCC_CR_PLL3ON) 141 /** 142 * @brief RCC PLL3 Clocks structure definition 143 */ 144 typedef struct 145 { 146 uint32_t PLL3_P_Frequency; 147 uint32_t PLL3_Q_Frequency; 148 uint32_t PLL3_R_Frequency; 149 } PLL3_ClocksTypeDef; 150 #endif /* RCC_CR_PLL3ON */ 151 152 153 /** 154 * @brief RCC extended clocks structure definition 155 */ 156 typedef struct 157 { 158 uint64_t PeriphClockSelection; /*!< The Extended Clock to be configured. 159 This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ 160 161 RCC_PLL2InitTypeDef PLL2; /*!< PLL2structure parameters. 162 This parameter will be used only when PLL2 is selected as kernel clock Source 163 for some peripherals */ 164 165 #if defined(RCC_CR_PLL3ON) 166 RCC_PLL3InitTypeDef PLL3; /*!< PLL3 structure parameters. 167 This parameter will be used only when PLL2 is selected as kernel clock Source 168 for some peripherals */ 169 #endif /* RCC_CR_PLL3ON */ 170 171 uint32_t CkperClockSelection; /*!< Specifies CKPER clock source 172 This parameter can be a value of @ref RCCEx_CLKP_Clock_Source */ 173 174 uint32_t Usart1ClockSelection; /*!< Specifies USART1 clock source. 175 This parameter can be a value of @ref RCCEx_USART1_Clock_Source */ 176 177 uint32_t Usart2ClockSelection; /*!< Specifies USART2 clock source. 178 This parameter can be a value of @ref RCCEx_USART2_Clock_Source */ 179 180 uint32_t Usart3ClockSelection; /*!< Specifies USART3 clock source. 181 This parameter can be a value of @ref RCCEx_USART3_Clock_Source */ 182 183 #if defined(UART4) 184 uint32_t Uart4ClockSelection; /*!< Specifies UART4 clock source. 185 This parameter can be a value of @ref RCCEx_UART4_Clock_Source */ 186 #endif /* UART4 */ 187 188 #if defined(UART5) 189 uint32_t Uart5ClockSelection; /*!< Specifies UART5 clock source. 190 This parameter can be a value of @ref RCCEx_UART5_Clock_Source */ 191 #endif /* UART5 */ 192 193 #if defined(USART6) 194 uint32_t Usart6ClockSelection; /*!< Specifies USART6 clock source. 195 This parameter can be a value of @ref RCCEx_USART6_Clock_Source */ 196 #endif /* USART6 */ 197 198 #if defined(UART7) 199 uint32_t Uart7ClockSelection; /*!< Specifies UART7 clock source. 200 This parameter can be a value of @ref RCCEx_UART7_Clock_Source */ 201 #endif /* UART7 */ 202 203 #if defined(UART8) 204 uint32_t Uart8ClockSelection; /*!< Specifies UART8 clock source. 205 This parameter can be a value of @ref RCCEx_UART8_Clock_Source */ 206 #endif /* UART8 */ 207 208 #if defined(UART9) 209 uint32_t Uart9ClockSelection; /*!< Specifies UART9 clock source. 210 This parameter can be a value of @ref RCCEx_UART9_Clock_Source */ 211 #endif /* UART9 */ 212 213 #if defined(USART10) 214 uint32_t Usart10ClockSelection; /*!< Specifies USART10 clock source. 215 This parameter can be a value of @ref RCCEx_USART10_Clock_Source */ 216 #endif /* USART10 */ 217 218 #if defined(USART11) 219 uint32_t Usart11ClockSelection; /*!< Specifies USART11 clock source. 220 This parameter can be a value of @ref RCCEx_USART11_Clock_Source */ 221 #endif /* USART11 */ 222 223 #if defined(UART12) 224 uint32_t Uart12ClockSelection; /*!< Specifies UART12 clock source. 225 This parameter can be a value of @ref RCCEx_UART12_Clock_Source */ 226 #endif /* UART12 */ 227 228 uint32_t Lpuart1ClockSelection; /*!< Specifies LPUART1 clock source. 229 This parameter can be a value of @ref RCCEx_LPUART1_Clock_Source */ 230 231 uint32_t I2c1ClockSelection; /*!< Specifies I2C1 clock source. 232 This parameter can be a value of @ref RCCEx_I2C1_Clock_Source */ 233 234 uint32_t I2c2ClockSelection; /*!< Specifies I2C2 clock source. 235 This parameter can be a value of @ref RCCEx_I2C2_Clock_Source */ 236 237 #if defined(I2C3) 238 uint32_t I2c3ClockSelection; /*!< Specifies I2C3 clock source. 239 This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ 240 #endif /* I2C3 */ 241 242 #if defined(I2C4) 243 uint32_t I2c4ClockSelection; /*!< Specifies I2C4 clock source. 244 This parameter can be a value of @ref RCCEx_I2C4_Clock_Source */ 245 #endif /* I2C4 */ 246 247 uint32_t I3c1ClockSelection; /*!< Specifies I3C1 clock source. 248 This parameter can be a value of @ref RCCEx_I3C1_Clock_Source */ 249 250 #if defined(I3C2) 251 uint32_t I3c2ClockSelection; /*!< Specifies I3C2 clock source. 252 This parameter can be a value of @ref RCCEx_I3C2_Clock_Source */ 253 #endif /* I3C2*/ 254 255 uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 clock source. 256 This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */ 257 258 uint32_t Lptim2ClockSelection; /*!< Specifies LPTIM2 clock source. 259 This parameter can be a value of @ref RCCEx_LPTIM2_Clock_Source */ 260 261 #if defined(LPTIM3) 262 uint32_t Lptim3ClockSelection; /*!< Specifies LPTIM3 clock source. 263 This parameter can be a value of @ref RCCEx_LPTIM3_Clock_Source */ 264 #endif /* LPTIM3 */ 265 266 #if defined(LPTIM4) 267 uint32_t Lptim4ClockSelection; /*!< Specifies LPTIM4 clock source. 268 This parameter can be a value of @ref RCCEx_LPTIM4_Clock_Source */ 269 #endif /* LPTIM4 */ 270 271 #if defined(LPTIM5) 272 uint32_t Lptim5ClockSelection; /*!< Specifies LPTIM5 clock source. 273 This parameter can be a value of @ref RCCEx_LPTIM5_Clock_Source */ 274 #endif /* LPTIM5 */ 275 276 #if defined(LPTIM6) 277 uint32_t Lptim6ClockSelection; /*!< Specifies LPTIM6 clock source. 278 This parameter can be a value of @ref RCCEx_LPTIM6_Clock_Source */ 279 #endif /* LPTIM6 */ 280 281 uint32_t FdcanClockSelection; /*!< Specifies FDCAN kernel clock source. 282 This parameter can be a value of @ref RCCEx_FDCAN_Clock_Source */ 283 #if defined(SAI1) 284 uint32_t Sai1ClockSelection; /*!< Specifies SAI1 clock source. 285 This parameter can be a value of @ref RCCEx_SAI1_Clock_Source */ 286 #endif /* SAI1*/ 287 288 #if defined(SAI2) 289 uint32_t Sai2ClockSelection; /*!< Specifies SAI2 clock source. 290 This parameter can be a value of @ref RCCEx_SAI2_Clock_Source */ 291 #endif /* SAI2*/ 292 293 uint32_t RngClockSelection; /*!< Specifies RNG clock source. 294 This parameter can be a value of @ref RCCEx_RNG_Clock_Source */ 295 296 #if defined(SDMMC1) 297 uint32_t Sdmmc1ClockSelection; /*!< Specifies SDMMC1 clock source. 298 This parameter can be a value of @ref RCCEx_SDMMC1_Clock_Source */ 299 #endif /* SDMMC1 */ 300 301 #if defined(SDMMC2) 302 uint32_t Sdmmc2ClockSelection; /*!< Specifies SDMMC2 clock source. 303 This parameter can be a value of @ref RCCEx_SDMMC2_Clock_Source */ 304 #endif /* SDMMC2 */ 305 306 uint32_t AdcDacClockSelection; /*!< Specifies ADC1, ADC2 and DAC interface clock source. 307 This parameter can be a value of @ref RCCEx_ADCDAC_Clock_Source */ 308 309 uint32_t DacLowPowerClockSelection; /*!< Specifies DAC low-power clock source used in Sample and hold mode. 310 This parameter can be a value of @ref RCCEx_DAC_Low_Power_Clock_Source */ 311 312 #if defined(OCTOSPI1) 313 uint32_t OspiClockSelection; /*!< Specifies OctoSPI clock source. 314 This parameter can be a value of @ref RCCEx_OSPI_Clock_Source */ 315 #endif /* OCTOSPI1 */ 316 317 uint32_t Spi1ClockSelection; /*!< Specifies SPI1 clock source. 318 This parameter can be a value of @ref RCCEx_SPI1_Clock_Source */ 319 320 uint32_t Spi2ClockSelection; /*!< Specifies SPI2 clock source. 321 This parameter can be a value of @ref RCCEx_SPI2_Clock_Source */ 322 323 uint32_t Spi3ClockSelection; /*!< Specifies SPI3 clock source. 324 This parameter can be a value of @ref RCCEx_SPI3_Clock_Source */ 325 326 #if defined(SPI4) 327 uint32_t Spi4ClockSelection; /*!< Specifies SPI4 clock source. 328 This parameter can be a value of @ref RCCEx_SPI4_Clock_Source */ 329 #endif /* SPI4 */ 330 331 #if defined(SPI5) 332 uint32_t Spi5ClockSelection; /*!< Specifies SPI5 clock source. 333 This parameter can be a value of @ref RCCEx_SPI5_Clock_Source */ 334 #endif /* SPI5 */ 335 336 #if defined(SPI6) 337 uint32_t Spi6ClockSelection; /*!< Specifies SPI6 clock source. 338 This parameter can be a value of @ref RCCEx_SPI6_Clock_Source */ 339 #endif /* SPI6 */ 340 341 uint32_t RTCClockSelection; /*!< Specifies RTC clock source. 342 This parameter can be a value of @ref RCC_RTC_Clock_Source */ 343 344 #if defined(CEC) 345 uint32_t CecClockSelection; /*!< Specifies CEC clock source. 346 This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ 347 #endif /* CEC */ 348 349 uint32_t UsbClockSelection; /*!< Specifies USB clock source. 350 This parameter can be a value of @ref RCCEx_USB_Clock_Source */ 351 352 uint32_t TimPresSelection; /*!< Specifies TIM Clock Prescalers Selection. 353 This parameter can be a value of @ref RCCEx_TIM_Prescaler_Selection */ 354 355 } RCC_PeriphCLKInitTypeDef; 356 357 #if defined(CRS) 358 359 /** 360 * @brief RCC_CRS Init structure definition 361 */ 362 typedef struct 363 { 364 uint32_t Prescaler; /*!< Specifies the division factor of the SYNC signal. 365 This parameter can be a value of @ref RCCEx_CRS_SynchroDivider */ 366 367 uint32_t Source; /*!< Specifies the SYNC signal source. 368 This parameter can be a value of @ref RCCEx_CRS_SynchroSource */ 369 370 uint32_t Polarity; /*!< Specifies the input polarity for the SYNC signal source. 371 This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */ 372 373 uint32_t ReloadValue; /*!< Specifies the value to be loaded in the frequency error counter with each SYNC 374 event. It can be calculated in using macro 375 __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) 376 This parameter must be a number between 0 and 0xFFFF or a value of 377 @ref RCCEx_CRS_ReloadValueDefault .*/ 378 379 uint32_t ErrorLimitValue; /*!< Specifies the value to be used to evaluate the captured frequency error value. 380 This parameter must be a number between 0 and 0xFF or a value of 381 @ref RCCEx_CRS_ErrorLimitDefault */ 382 383 uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator. 384 This parameter must be a number between 0 and 0x7F or a value of 385 @ref RCCEx_CRS_HSI48CalibrationDefault */ 386 387 } RCC_CRSInitTypeDef; 388 389 /** 390 * @brief RCC_CRS Synchronization structure definition 391 */ 392 typedef struct 393 { 394 uint32_t ReloadValue; /*!< Specifies the value loaded in the Counter reload value. 395 This parameter must be a number between 0 and 0xFFFF */ 396 397 uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming. 398 This parameter must be a number between 0 and 0x3F */ 399 400 uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter 401 value latched in the time of the last SYNC event. 402 This parameter must be a number between 0 and 0xFFFF */ 403 404 uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the 405 frequency error counter latched in the time of the last SYNC event. 406 It shows whether the actual frequency is below or above the target. 407 This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection */ 408 409 } RCC_CRSSynchroInfoTypeDef; 410 411 #endif /* CRS */ 412 /** 413 * @} 414 */ 415 416 417 /* Exported constants --------------------------------------------------------*/ 418 /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants 419 * @{ 420 */ 421 422 /** @defgroup RCCEx_LSCO_Clock_Source Low Speed Microcontroller Clock Output Source 423 * @{ 424 */ 425 #define RCC_LSCOSOURCE_LSI 0x00000000U /*!< LSI selection for low speed microcontroller clock output */ 426 #define RCC_LSCOSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed microcontroller clock output */ 427 /** 428 * @} 429 */ 430 431 /** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection 432 * @{ 433 */ 434 #define RCC_PERIPHCLK_USART1 ((uint64_t)0x00000001U) 435 #define RCC_PERIPHCLK_USART2 ((uint64_t)0x00000002U) 436 #define RCC_PERIPHCLK_USART3 ((uint64_t)0x00000004U) 437 #if defined(UART4) 438 #define RCC_PERIPHCLK_UART4 ((uint64_t)0x00000008U) 439 #endif /* UART4 */ 440 #if defined(UART5) 441 #define RCC_PERIPHCLK_UART5 ((uint64_t)0x00000010U) 442 #endif /* UART5 */ 443 #if defined(USART6) 444 #define RCC_PERIPHCLK_USART6 ((uint64_t)0x00000020U) 445 #endif /* USART6 */ 446 #if defined(UART7) 447 #define RCC_PERIPHCLK_UART7 ((uint64_t)0x00000040U) 448 #endif /* UART7 */ 449 #if defined(UART8) 450 #define RCC_PERIPHCLK_UART8 ((uint64_t)0x00000080U) 451 #endif /* UART8 */ 452 #if defined(UART9) 453 #define RCC_PERIPHCLK_UART9 ((uint64_t)0x00000100U) 454 #endif /* UART9 */ 455 #if defined(USART10) 456 #define RCC_PERIPHCLK_USART10 ((uint64_t)0x00000200U) 457 #endif /* USART10 */ 458 #if defined(USART11) 459 #define RCC_PERIPHCLK_USART11 ((uint64_t)0x00000400U) 460 #endif /* USART11 */ 461 #if defined(UART12) 462 #define RCC_PERIPHCLK_UART12 ((uint64_t)0x00000800U) 463 #endif /* UART12 */ 464 #define RCC_PERIPHCLK_LPUART1 ((uint64_t)0x00001000U) 465 #define RCC_PERIPHCLK_I2C1 ((uint64_t)0x00002000U) 466 #define RCC_PERIPHCLK_I2C2 ((uint64_t)0x00004000U) 467 #if defined(I2C3) 468 #define RCC_PERIPHCLK_I2C3 ((uint64_t)0x00008000U) 469 #endif /* I2C3 */ 470 #define RCC_PERIPHCLK_I3C1 ((uint64_t)0x00010000U) 471 #define RCC_PERIPHCLK_LPTIM1 ((uint64_t)0x00020000U) 472 #define RCC_PERIPHCLK_LPTIM2 ((uint64_t)0x00040000U) 473 #if defined(SAI1) 474 #define RCC_PERIPHCLK_SAI1 ((uint64_t)0x00080000U) 475 #endif /* SAI1 */ 476 #if defined(SAI2) 477 #define RCC_PERIPHCLK_SAI2 ((uint64_t)0x00100000U) 478 #endif /* SAI2 */ 479 #define RCC_PERIPHCLK_ADCDAC ((uint64_t)0x00200000U) 480 #define RCC_PERIPHCLK_ADC RCC_PERIPHCLK_ADCDAC 481 #define RCC_PERIPHCLK_DAC RCC_PERIPHCLK_ADCDAC 482 #if defined(SDMMC1) 483 #define RCC_PERIPHCLK_SDMMC1 ((uint64_t)0x00400000U) 484 #endif /* SDMMC1 */ 485 #if defined(SDMMC2) 486 #define RCC_PERIPHCLK_SDMMC2 ((uint64_t)0x00800000U) 487 #endif /* SDMMC2 */ 488 #define RCC_PERIPHCLK_CKPER ((uint64_t)0x01000000U) 489 #define RCC_PERIPHCLK_RTC ((uint64_t)0x02000000U) 490 #define RCC_PERIPHCLK_RNG ((uint64_t)0x04000000U) 491 #define RCC_PERIPHCLK_SPI1 ((uint64_t)0x08000000U) 492 #define RCC_PERIPHCLK_SPI2 ((uint64_t)0x10000000U) 493 #define RCC_PERIPHCLK_SPI3 ((uint64_t)0x20000000U) 494 #if defined(SPI4) 495 #define RCC_PERIPHCLK_SPI4 ((uint64_t)0x40000000U) 496 #endif /* SPI4 */ 497 #if defined(SPI5) 498 #define RCC_PERIPHCLK_SPI5 ((uint64_t)0x80000000U) 499 #endif /* SPI5 */ 500 #if defined(SPI6) 501 #define RCC_PERIPHCLK_SPI6 ((uint64_t)0x100000000U) 502 #endif /* SPI6 */ 503 #if defined(OCTOSPI1) 504 #define RCC_PERIPHCLK_OSPI ((uint64_t)0x200000000U) 505 #endif /* OCTOSPI1 */ 506 #define RCC_PERIPHCLK_FDCAN ((uint64_t)0x400000000U) 507 #if defined(CEC) 508 #define RCC_PERIPHCLK_CEC ((uint64_t)0x800000000U) 509 #endif /* CEC */ 510 #define RCC_PERIPHCLK_USB ((uint64_t)0x1000000000U) 511 #if defined(LPTIM3) 512 #define RCC_PERIPHCLK_LPTIM3 ((uint64_t)0x2000000000U) 513 #endif /* LPTIM3 */ 514 #if defined(LPTIM4) 515 #define RCC_PERIPHCLK_LPTIM4 ((uint64_t)0x4000000000U) 516 #endif /* LPTIM4 */ 517 #if defined(LPTIM5) 518 #define RCC_PERIPHCLK_LPTIM5 ((uint64_t)0x8000000000U) 519 #endif /* LPTIM5 */ 520 #if defined(LPTIM6) 521 #define RCC_PERIPHCLK_LPTIM6 ((uint64_t)0x10000000000U) 522 #endif /* LPTIM6 */ 523 #define RCC_PERIPHCLK_DAC_LP ((uint64_t)0x20000000000U) 524 #if defined(I2C4) 525 #define RCC_PERIPHCLK_I2C4 ((uint64_t)0x40000000000U) 526 #endif /* I2C4 */ 527 #define RCC_PERIPHCLK_TIM ((uint64_t)0x80000000000U) 528 #if defined(I3C2) 529 #define RCC_PERIPHCLK_I3C2 ((uint64_t)0x100000000000U) 530 #endif /* I3C2 */ 531 532 /** 533 * @} 534 */ 535 536 537 /** @defgroup RCC_PLL2_Clock_Output RCC PLL2 Clock Output 538 * @{ 539 */ 540 #define RCC_PLL2_DIVP RCC_PLL2CFGR_PLL2PEN 541 #define RCC_PLL2_DIVQ RCC_PLL2CFGR_PLL2QEN 542 #define RCC_PLL2_DIVR RCC_PLL2CFGR_PLL2REN 543 /** 544 * @} 545 */ 546 547 #if defined(RCC_CR_PLL3ON) 548 /** @defgroup RCC_PLL3_Clock_Output RCC PLL3 Clock Output 549 * @{ 550 */ 551 #define RCC_PLL3_DIVP RCC_PLL3CFGR_PLL3PEN 552 #define RCC_PLL3_DIVQ RCC_PLL3CFGR_PLL3QEN 553 #define RCC_PLL3_DIVR RCC_PLL3CFGR_PLL3REN 554 /** 555 * @} 556 */ 557 #endif /* RCC_CR_PLL3ON */ 558 559 /** @defgroup RCC_PLL2_VCI_Range RCC PLL2 VCI Range 560 * @{ 561 */ 562 #define RCC_PLL2_VCIRANGE_0 (0x00000000U) /*!< Clock range frequency between 1 and 2 MHz */ 563 #define RCC_PLL2_VCIRANGE_1 RCC_PLL2CFGR_PLL2RGE_0 /*!< Clock range frequency between 2 and 4 MHz */ 564 #define RCC_PLL2_VCIRANGE_2 RCC_PLL2CFGR_PLL2RGE_1 /*!< Clock range frequency between 4 and 8 MHz */ 565 #define RCC_PLL2_VCIRANGE_3 (RCC_PLL2CFGR_PLL2RGE_0 | RCC_PLL2CFGR_PLL2RGE_1) /*!< Clock range frequency between 8 and 16 MHz */ 566 /** 567 * @} 568 */ 569 570 /** @defgroup RCC_PLL2_VCO_Range RCC PLL2 VCO Range 571 * @{ 572 */ 573 #define RCC_PLL2_VCORANGE_WIDE (0x00000000U) /*!< Wide VCO range: 192 to 836 MHz */ 574 #define RCC_PLL2_VCORANGE_MEDIUM RCC_PLL2CFGR_PLL2VCOSEL /*!< Medium VCO range: 150 to 420 MHz */ 575 576 /** 577 * @} 578 */ 579 580 /** @defgroup RCC_PLL2_Clock_Source RCC PLL2 Clock Source 581 * @{ 582 */ 583 #define RCC_PLL2_SOURCE_NONE (0x00000000U) 584 #define RCC_PLL2_SOURCE_HSI RCC_PLL2CFGR_PLL2SRC_0 585 #define RCC_PLL2_SOURCE_CSI RCC_PLL2CFGR_PLL2SRC_1 586 #define RCC_PLL2_SOURCE_HSE (RCC_PLL2CFGR_PLL2SRC_0 | RCC_PLL2CFGR_PLL2SRC_1) 587 /** 588 * @} 589 */ 590 591 #if defined(RCC_CR_PLL3ON) 592 /** @defgroup RCC_PLL3_VCI_Range RCC PLL3 VCI Range 593 * @{ 594 */ 595 #define RCC_PLL3_VCIRANGE_0 (0x00000000U) /*!< Clock range frequency between 1 and 2 MHz */ 596 #define RCC_PLL3_VCIRANGE_1 RCC_PLL3CFGR_PLL3RGE_0 /*!< Clock range frequency between 2 and 4 MHz */ 597 #define RCC_PLL3_VCIRANGE_2 RCC_PLL3CFGR_PLL3RGE_1 /*!< Clock range frequency between 4 and 8 MHz */ 598 #define RCC_PLL3_VCIRANGE_3 (RCC_PLL3CFGR_PLL3RGE_0 | RCC_PLL3CFGR_PLL3RGE_1) /*!< Clock range frequency between 8 and 16 MHz */ 599 /** 600 * @} 601 */ 602 603 /** @defgroup RCC_PLL3_VCO_Range RCC PLL3 VCO Range 604 * @{ 605 */ 606 #define RCC_PLL3_VCORANGE_WIDE (0x00000000U) /*!< Wide VCO range: 192 to 836 MHz */ 607 #define RCC_PLL3_VCORANGE_MEDIUM RCC_PLL3CFGR_PLL3VCOSEL /*!< Medium VCO range: 150 to 420 MHz */ 608 /** 609 * @} 610 */ 611 612 /** @defgroup RCC_PLL3_Clock_Source RCC PLL3 Clock Source 613 * @{ 614 */ 615 #define RCC_PLL3_SOURCE_NONE (0x00000000U) 616 #define RCC_PLL3_SOURCE_HSI RCC_PLL3CFGR_PLL3SRC_0 617 #define RCC_PLL3_SOURCE_CSI RCC_PLL3CFGR_PLL3SRC_1 618 #define RCC_PLL3_SOURCE_HSE (RCC_PLL3CFGR_PLL3SRC_0 | RCC_PLL3CFGR_PLL3SRC_1) 619 /** 620 * @} 621 */ 622 #endif /* RCC_CR_PLL3ON */ 623 624 /** @defgroup RCCEx_USART1_Clock_Source USART1 Clock Source 625 * @{ 626 */ 627 #define RCC_USART1CLKSOURCE_PCLK2 ((uint32_t)0x00000000U) 628 #define RCC_USART1CLKSOURCE_PLL2Q RCC_CCIPR1_USART1SEL_0 629 #if defined(RCC_CR_PLL3ON) 630 #define RCC_USART1CLKSOURCE_PLL3Q RCC_CCIPR1_USART1SEL_1 631 #endif /* RCC_CR_PLL3ON */ 632 #define RCC_USART1CLKSOURCE_HSI (RCC_CCIPR1_USART1SEL_0 | RCC_CCIPR1_USART1SEL_1) 633 #define RCC_USART1CLKSOURCE_CSI RCC_CCIPR1_USART1SEL_2 634 #define RCC_USART1CLKSOURCE_LSE (RCC_CCIPR1_USART1SEL_0 | RCC_CCIPR1_USART1SEL_2) 635 /** 636 * @} 637 */ 638 639 /** @defgroup RCCEx_USART2_Clock_Source USART2 Clock Source 640 * @{ 641 */ 642 #define RCC_USART2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 643 #define RCC_USART2CLKSOURCE_PLL2Q RCC_CCIPR1_USART2SEL_0 644 #if defined(RCC_CR_PLL3ON) 645 #define RCC_USART2CLKSOURCE_PLL3Q RCC_CCIPR1_USART2SEL_1 646 #endif /* RCC_CR_PLL3ON */ 647 #define RCC_USART2CLKSOURCE_HSI (RCC_CCIPR1_USART2SEL_0 | RCC_CCIPR1_USART2SEL_1) 648 #define RCC_USART2CLKSOURCE_CSI RCC_CCIPR1_USART2SEL_2 649 #define RCC_USART2CLKSOURCE_LSE (RCC_CCIPR1_USART2SEL_0 | RCC_CCIPR1_USART2SEL_2) 650 /** 651 * @} 652 */ 653 654 /** @defgroup RCCEx_USART3_Clock_Source USART3 Clock Source 655 * @{ 656 */ 657 #define RCC_USART3CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 658 #define RCC_USART3CLKSOURCE_PLL2Q RCC_CCIPR1_USART3SEL_0 659 #if defined(RCC_CR_PLL3ON) 660 #define RCC_USART3CLKSOURCE_PLL3Q RCC_CCIPR1_USART3SEL_1 661 #endif /* RCC_CR_PLL3ON */ 662 #define RCC_USART3CLKSOURCE_HSI (RCC_CCIPR1_USART3SEL_0 | RCC_CCIPR1_USART3SEL_1) 663 #define RCC_USART3CLKSOURCE_CSI RCC_CCIPR1_USART3SEL_2 664 #define RCC_USART3CLKSOURCE_LSE (RCC_CCIPR1_USART3SEL_0 | RCC_CCIPR1_USART3SEL_2) 665 /** 666 * @} 667 */ 668 669 #if defined(UART4) 670 /** @defgroup RCCEx_UART4_Clock_Source UART4 Clock Source 671 * @{ 672 */ 673 #define RCC_UART4CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 674 #define RCC_UART4CLKSOURCE_PLL2Q RCC_CCIPR1_UART4SEL_0 675 #define RCC_UART4CLKSOURCE_PLL3Q RCC_CCIPR1_UART4SEL_1 676 #define RCC_UART4CLKSOURCE_HSI (RCC_CCIPR1_UART4SEL_0 | RCC_CCIPR1_UART4SEL_1) 677 #define RCC_UART4CLKSOURCE_CSI RCC_CCIPR1_UART4SEL_2 678 #define RCC_UART4CLKSOURCE_LSE (RCC_CCIPR1_UART4SEL_0 | RCC_CCIPR1_UART4SEL_2) 679 /** 680 * @} 681 */ 682 #endif /* UART4 */ 683 684 #if defined(UART5) 685 /** @defgroup RCCEx_UART5_Clock_Source UART5 Clock Source 686 * @{ 687 */ 688 #define RCC_UART5CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 689 #define RCC_UART5CLKSOURCE_PLL2Q RCC_CCIPR1_UART5SEL_0 690 #define RCC_UART5CLKSOURCE_PLL3Q RCC_CCIPR1_UART5SEL_1 691 #define RCC_UART5CLKSOURCE_HSI (RCC_CCIPR1_UART5SEL_0 | RCC_CCIPR1_UART5SEL_1) 692 #define RCC_UART5CLKSOURCE_CSI RCC_CCIPR1_UART5SEL_2 693 #define RCC_UART5CLKSOURCE_LSE (RCC_CCIPR1_UART5SEL_0 | RCC_CCIPR1_UART5SEL_2) 694 /** 695 * @} 696 */ 697 #endif /* UART5 */ 698 699 #if defined(USART6) 700 /** @defgroup RCCEx_USART6_Clock_Source USART6 Clock Source 701 * @{ 702 */ 703 #define RCC_USART6CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 704 #define RCC_USART6CLKSOURCE_PLL2Q RCC_CCIPR1_USART6SEL_0 705 #define RCC_USART6CLKSOURCE_PLL3Q RCC_CCIPR1_USART6SEL_1 706 #define RCC_USART6CLKSOURCE_HSI (RCC_CCIPR1_USART6SEL_0 | RCC_CCIPR1_USART6SEL_1) 707 #define RCC_USART6CLKSOURCE_CSI RCC_CCIPR1_USART6SEL_2 708 #define RCC_USART6CLKSOURCE_LSE (RCC_CCIPR1_USART6SEL_0 | RCC_CCIPR1_USART6SEL_2) 709 /** 710 * @} 711 */ 712 #endif /* USART6 */ 713 714 #if defined(UART7) 715 /** @defgroup RCCEx_UART7_Clock_Source UART7 Clock Source 716 * @{ 717 */ 718 #define RCC_UART7CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 719 #define RCC_UART7CLKSOURCE_PLL2Q RCC_CCIPR1_UART7SEL_0 720 #define RCC_UART7CLKSOURCE_PLL3Q RCC_CCIPR1_UART7SEL_1 721 #define RCC_UART7CLKSOURCE_HSI (RCC_CCIPR1_UART7SEL_0 | RCC_CCIPR1_UART7SEL_1) 722 #define RCC_UART7CLKSOURCE_CSI RCC_CCIPR1_UART7SEL_2 723 #define RCC_UART7CLKSOURCE_LSE (RCC_CCIPR1_UART7SEL_0 | RCC_CCIPR1_UART7SEL_2) 724 /** 725 * @} 726 */ 727 #endif /* UART7 */ 728 729 #if defined(UART8) 730 /** @defgroup RCCEx_UART8_Clock_Source UART8 Clock Source 731 * @{ 732 */ 733 #define RCC_UART8CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 734 #define RCC_UART8CLKSOURCE_PLL2Q RCC_CCIPR1_UART8SEL_0 735 #define RCC_UART8CLKSOURCE_PLL3Q RCC_CCIPR1_UART8SEL_1 736 #define RCC_UART8CLKSOURCE_HSI (RCC_CCIPR1_UART8SEL_0 | RCC_CCIPR1_UART8SEL_1) 737 #define RCC_UART8CLKSOURCE_CSI RCC_CCIPR1_UART8SEL_2 738 #define RCC_UART8CLKSOURCE_LSE (RCC_CCIPR1_UART8SEL_0 | RCC_CCIPR1_UART8SEL_2) 739 /** 740 * @} 741 */ 742 #endif /* UART8 */ 743 744 #if defined(UART9) 745 /** @defgroup RCCEx_UART9_Clock_Source UART9 Clock Source 746 * @{ 747 */ 748 #define RCC_UART9CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 749 #define RCC_UART9CLKSOURCE_PLL2Q RCC_CCIPR1_UART9SEL_0 750 #define RCC_UART9CLKSOURCE_PLL3Q RCC_CCIPR1_UART9SEL_1 751 #define RCC_UART9CLKSOURCE_HSI (RCC_CCIPR1_UART9SEL_0 | RCC_CCIPR1_UART9SEL_1) 752 #define RCC_UART9CLKSOURCE_CSI RCC_CCIPR1_UART9SEL_2 753 #define RCC_UART9CLKSOURCE_LSE (RCC_CCIPR1_UART9SEL_0 | RCC_CCIPR1_UART9SEL_2) 754 /** 755 * @} 756 */ 757 #endif /* UART9 */ 758 759 #if defined(USART10) 760 /** @defgroup RCCEx_USART10_Clock_Source USART10 Clock Source 761 * @{ 762 */ 763 #define RCC_USART10CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 764 #define RCC_USART10CLKSOURCE_PLL2Q RCC_CCIPR1_USART10SEL_0 765 #define RCC_USART10CLKSOURCE_PLL3Q RCC_CCIPR1_USART10SEL_1 766 #define RCC_USART10CLKSOURCE_HSI (RCC_CCIPR1_USART10SEL_0 | RCC_CCIPR1_USART10SEL_1) 767 #define RCC_USART10CLKSOURCE_CSI RCC_CCIPR1_USART10SEL_2 768 #define RCC_USART10CLKSOURCE_LSE (RCC_CCIPR1_USART10SEL_0 | RCC_CCIPR1_USART10SEL_2) 769 /** 770 * @} 771 */ 772 #endif /* USART10 */ 773 774 #if defined(USART11) 775 /** @defgroup RCCEx_USART11_Clock_Source USART11 Clock Source 776 * @{ 777 */ 778 #define RCC_USART11CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 779 #define RCC_USART11CLKSOURCE_PLL2Q RCC_CCIPR2_USART11SEL_0 780 #define RCC_USART11CLKSOURCE_PLL3Q RCC_CCIPR2_USART11SEL_1 781 #define RCC_USART11CLKSOURCE_HSI (RCC_CCIPR2_USART11SEL_0 | RCC_CCIPR2_USART11SEL_1) 782 #define RCC_USART11CLKSOURCE_CSI RCC_CCIPR2_USART11SEL_2 783 #define RCC_USART11CLKSOURCE_LSE (RCC_CCIPR2_USART11SEL_0 | RCC_CCIPR2_USART11SEL_2) 784 /** 785 * @} 786 */ 787 #endif /* USART11 */ 788 789 #if defined(UART12) 790 /** @defgroup RCCEx_UART12_Clock_Source UART12 Clock Source 791 * @{ 792 */ 793 #define RCC_UART12CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 794 #define RCC_UART12CLKSOURCE_PLL2Q RCC_CCIPR2_UART12SEL_0 795 #define RCC_UART12CLKSOURCE_PLL3Q RCC_CCIPR2_UART12SEL_1 796 #define RCC_UART12CLKSOURCE_HSI (RCC_CCIPR2_UART12SEL_0 | RCC_CCIPR2_UART12SEL_1) 797 #define RCC_UART12CLKSOURCE_CSI RCC_CCIPR2_UART12SEL_2 798 #define RCC_UART12CLKSOURCE_LSE (RCC_CCIPR2_UART12SEL_0 | RCC_CCIPR2_UART12SEL_2) 799 /** 800 * @} 801 */ 802 #endif /* UART12 */ 803 804 /** @defgroup RCCEx_LPUART1_Clock_Source LPUART1 Clock Source 805 * @{ 806 */ 807 #define RCC_LPUART1CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 808 #define RCC_LPUART1CLKSOURCE_PLL2Q RCC_CCIPR3_LPUART1SEL_0 809 #if defined(RCC_CR_PLL3ON) 810 #define RCC_LPUART1CLKSOURCE_PLL3Q RCC_CCIPR3_LPUART1SEL_1 811 #endif /* RCC_CR_PLL3ON */ 812 #define RCC_LPUART1CLKSOURCE_HSI (RCC_CCIPR3_LPUART1SEL_0 | RCC_CCIPR3_LPUART1SEL_1) 813 #define RCC_LPUART1CLKSOURCE_CSI RCC_CCIPR3_LPUART1SEL_2 814 #define RCC_LPUART1CLKSOURCE_LSE (RCC_CCIPR3_LPUART1SEL_0 | RCC_CCIPR3_LPUART1SEL_2) 815 816 /** 817 * @} 818 */ 819 820 /** @defgroup RCCEx_I2C1_Clock_Source I2C1 Clock Source 821 * @{ 822 */ 823 #define RCC_I2C1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 824 #if defined(RCC_CR_PLL3ON) 825 #define RCC_I2C1CLKSOURCE_PLL3R RCC_CCIPR4_I2C1SEL_0 826 #else 827 #define RCC_I2C1CLKSOURCE_PLL2R RCC_CCIPR4_I2C1SEL_0 828 #endif /* RCC_CR_PLL3ON */ 829 #define RCC_I2C1CLKSOURCE_HSI RCC_CCIPR4_I2C1SEL_1 830 #define RCC_I2C1CLKSOURCE_CSI (RCC_CCIPR4_I2C1SEL_1 | RCC_CCIPR4_I2C1SEL_0) 831 /** 832 * @} 833 */ 834 835 /** @defgroup RCCEx_I2C2_Clock_Source I2C2 Clock Source 836 * @{ 837 */ 838 #define RCC_I2C2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 839 #if defined(RCC_CR_PLL3ON) 840 #define RCC_I2C2CLKSOURCE_PLL3R RCC_CCIPR4_I2C2SEL_0 841 #else 842 #define RCC_I2C2CLKSOURCE_PLL2R RCC_CCIPR4_I2C2SEL_0 843 #endif /* RCC_CR_PLL3ON */ 844 #define RCC_I2C2CLKSOURCE_HSI RCC_CCIPR4_I2C2SEL_1 845 #define RCC_I2C2CLKSOURCE_CSI (RCC_CCIPR4_I2C2SEL_1 | RCC_CCIPR4_I2C2SEL_0) 846 /** 847 * @} 848 */ 849 850 #if defined(I2C3) 851 /** @defgroup RCCEx_I2C3_Clock_Source I2C3 Clock Source 852 * @{ 853 */ 854 #define RCC_I2C3CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 855 #define RCC_I2C3CLKSOURCE_PLL3R RCC_CCIPR4_I2C3SEL_0 856 #define RCC_I2C3CLKSOURCE_HSI RCC_CCIPR4_I2C3SEL_1 857 #define RCC_I2C3CLKSOURCE_CSI (RCC_CCIPR4_I2C3SEL_0 | RCC_CCIPR4_I2C3SEL_1) 858 /** 859 * @} 860 */ 861 #endif /* I2C3 */ 862 863 #if defined(I2C4) 864 /** @defgroup RCCEx_I2C4_Clock_Source I2C4 Clock Source 865 * @{ 866 */ 867 #define RCC_I2C4CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 868 #define RCC_I2C4CLKSOURCE_PLL3R RCC_CCIPR4_I2C4SEL_0 869 #define RCC_I2C4CLKSOURCE_HSI RCC_CCIPR4_I2C4SEL_1 870 #define RCC_I2C4CLKSOURCE_CSI (RCC_CCIPR4_I2C4SEL_0 | RCC_CCIPR4_I2C4SEL_1) 871 /** 872 * @} 873 */ 874 #endif /* I2C4 */ 875 876 /** @defgroup RCCEx_I3C1_Clock_Source I3C1 Clock Source 877 * @{ 878 */ 879 #define RCC_I3C1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 880 #if defined(RCC_CR_PLL3ON) 881 #define RCC_I3C1CLKSOURCE_PLL3R RCC_CCIPR4_I3C1SEL_0 882 #else 883 #define RCC_I3C1CLKSOURCE_PLL2R RCC_CCIPR4_I3C1SEL_0 884 #endif /* RCC_CR_PLL3ON */ 885 #define RCC_I3C1CLKSOURCE_HSI RCC_CCIPR4_I3C1SEL_1 886 /** 887 * @} 888 */ 889 890 #if defined(I3C2) 891 /** @defgroup RCCEx_I3C2_Clock_Source I3C2 Clock Source 892 * @{ 893 */ 894 #define RCC_I3C2CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 895 #define RCC_I3C2CLKSOURCE_PLL2R RCC_CCIPR4_I3C2SEL_0 896 #define RCC_I3C2CLKSOURCE_HSI RCC_CCIPR4_I3C2SEL_1 897 /** 898 * @} 899 */ 900 #endif /* I3C2 */ 901 902 /** @defgroup RCCEx_RNG_Clock_Source RCCEx RNG Clock Source 903 * @{ 904 */ 905 #define RCC_RNGCLKSOURCE_HSI48 ((uint32_t)0x00000000U) 906 #define RCC_RNGCLKSOURCE_PLL1Q RCC_CCIPR5_RNGSEL_0 907 #define RCC_RNGCLKSOURCE_LSE RCC_CCIPR5_RNGSEL_1 908 #define RCC_RNGCLKSOURCE_LSI (RCC_CCIPR5_RNGSEL_0 | RCC_CCIPR5_RNGSEL_1) 909 /** 910 * @} 911 */ 912 913 /** @defgroup RCCEx_SPI1_Clock_Source SPI1 Clock Source 914 * @{ 915 */ 916 #define RCC_SPI1CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 917 #define RCC_SPI1CLKSOURCE_PLL2P RCC_CCIPR3_SPI1SEL_0 918 #if defined(RCC_CR_PLL3ON) 919 #define RCC_SPI1CLKSOURCE_PLL3P RCC_CCIPR3_SPI1SEL_1 920 #endif /* RCC_CR_PLL3ON */ 921 #define RCC_SPI1CLKSOURCE_PIN (RCC_CCIPR3_SPI1SEL_0 | RCC_CCIPR3_SPI1SEL_1) 922 #define RCC_SPI1CLKSOURCE_CLKP RCC_CCIPR3_SPI1SEL_2 923 /** 924 * @} 925 */ 926 927 /** @defgroup RCCEx_SPI2_Clock_Source SPI2 Clock Source 928 * @{ 929 */ 930 #define RCC_SPI2CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 931 #define RCC_SPI2CLKSOURCE_PLL2P RCC_CCIPR3_SPI2SEL_0 932 #if defined(RCC_CR_PLL3ON) 933 #define RCC_SPI2CLKSOURCE_PLL3P RCC_CCIPR3_SPI2SEL_1 934 #endif /* RCC_CR_PLL3ON */ 935 #define RCC_SPI2CLKSOURCE_PIN (RCC_CCIPR3_SPI2SEL_0 | RCC_CCIPR3_SPI2SEL_1) 936 #define RCC_SPI2CLKSOURCE_CLKP RCC_CCIPR3_SPI2SEL_2 937 /** 938 * @} 939 */ 940 941 /** @defgroup RCCEx_SPI3_Clock_Source SPI3 Clock Source 942 * @{ 943 */ 944 #define RCC_SPI3CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 945 #define RCC_SPI3CLKSOURCE_PLL2P RCC_CCIPR3_SPI3SEL_0 946 #if defined(RCC_CR_PLL3ON) 947 #define RCC_SPI3CLKSOURCE_PLL3P RCC_CCIPR3_SPI3SEL_1 948 #endif /* RCC_CR_PLL3ON */ 949 #define RCC_SPI3CLKSOURCE_PIN (RCC_CCIPR3_SPI3SEL_0 | RCC_CCIPR3_SPI3SEL_1) 950 #define RCC_SPI3CLKSOURCE_CLKP RCC_CCIPR3_SPI3SEL_2 951 /** 952 * @} 953 */ 954 955 #if defined(SPI4) 956 /** @defgroup RCCEx_SPI4_Clock_Source SPI4 Clock Source 957 * @{ 958 */ 959 #define RCC_SPI4CLKSOURCE_PCLK2 ((uint32_t)0x00000000U) 960 #define RCC_SPI4CLKSOURCE_PLL2Q RCC_CCIPR3_SPI4SEL_0 961 #define RCC_SPI4CLKSOURCE_PLL3Q RCC_CCIPR3_SPI4SEL_1 962 #define RCC_SPI4CLKSOURCE_HSI (RCC_CCIPR3_SPI4SEL_0 | RCC_CCIPR3_SPI4SEL_1) 963 #define RCC_SPI4CLKSOURCE_CSI RCC_CCIPR3_SPI4SEL_2 964 #define RCC_SPI4CLKSOURCE_HSE (RCC_CCIPR3_SPI4SEL_0 | RCC_CCIPR3_SPI4SEL_2) 965 /** 966 * @} 967 */ 968 #endif /* SPI4 */ 969 970 #if defined(SPI5) 971 /** @defgroup RCCEx_SPI5_Clock_Source SPI5 Clock Source 972 * @{ 973 */ 974 #define RCC_SPI5CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 975 #define RCC_SPI5CLKSOURCE_PLL2Q RCC_CCIPR3_SPI5SEL_0 976 #define RCC_SPI5CLKSOURCE_PLL3Q RCC_CCIPR3_SPI5SEL_1 977 #define RCC_SPI5CLKSOURCE_HSI (RCC_CCIPR3_SPI5SEL_0 | RCC_CCIPR3_SPI5SEL_1) 978 #define RCC_SPI5CLKSOURCE_CSI RCC_CCIPR3_SPI5SEL_2 979 #define RCC_SPI5CLKSOURCE_HSE (RCC_CCIPR3_SPI5SEL_0 | RCC_CCIPR3_SPI5SEL_2) 980 /** 981 * @} 982 */ 983 #endif /* SPI5 */ 984 985 #if defined(SPI6) 986 /** @defgroup RCCEx_SPI6_Clock_Source SPI6 Clock Source 987 * @{ 988 */ 989 #define RCC_SPI6CLKSOURCE_PCLK2 ((uint32_t)0x00000000U) 990 #define RCC_SPI6CLKSOURCE_PLL2Q RCC_CCIPR3_SPI6SEL_0 991 #define RCC_SPI6CLKSOURCE_PLL3Q RCC_CCIPR3_SPI6SEL_1 992 #define RCC_SPI6CLKSOURCE_HSI (RCC_CCIPR3_SPI6SEL_0 | RCC_CCIPR3_SPI6SEL_1) 993 #define RCC_SPI6CLKSOURCE_CSI RCC_CCIPR3_SPI6SEL_2 994 #define RCC_SPI6CLKSOURCE_HSE (RCC_CCIPR3_SPI6SEL_0 | RCC_CCIPR3_SPI6SEL_2) 995 /** 996 * @} 997 */ 998 #endif /* SPI6 */ 999 1000 /** @defgroup RCCEx_LPTIM1_Clock_Source LPTIM1 Clock Source 1001 * @{ 1002 */ 1003 #define RCC_LPTIM1CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 1004 #define RCC_LPTIM1CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM1SEL_0 1005 #if defined(RCC_CR_PLL3ON) 1006 #define RCC_LPTIM1CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM1SEL_1 1007 #endif /* RCC_CR_PLL3ON */ 1008 #define RCC_LPTIM1CLKSOURCE_LSE (RCC_CCIPR2_LPTIM1SEL_0 | RCC_CCIPR2_LPTIM1SEL_1) 1009 #define RCC_LPTIM1CLKSOURCE_LSI RCC_CCIPR2_LPTIM1SEL_2 1010 #define RCC_LPTIM1CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM1SEL_0 | RCC_CCIPR2_LPTIM1SEL_2) 1011 /** 1012 * @} 1013 */ 1014 1015 /** @defgroup RCCEx_LPTIM2_Clock_Source LPTIM2 Clock Source 1016 * @{ 1017 */ 1018 #define RCC_LPTIM2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) 1019 #define RCC_LPTIM2CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM2SEL_0 1020 #if defined(RCC_CR_PLL3ON) 1021 #define RCC_LPTIM2CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM2SEL_1 1022 #endif /* RCC_CR_PLL3ON */ 1023 #define RCC_LPTIM2CLKSOURCE_LSE (RCC_CCIPR2_LPTIM2SEL_0 | RCC_CCIPR2_LPTIM2SEL_1) 1024 #define RCC_LPTIM2CLKSOURCE_LSI RCC_CCIPR2_LPTIM2SEL_2 1025 #define RCC_LPTIM2CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM2SEL_0 | RCC_CCIPR2_LPTIM2SEL_2) 1026 /** 1027 * @} 1028 */ 1029 1030 #if defined(LPTIM3) 1031 /** @defgroup RCCEx_LPTIM3_Clock_Source LPTIM3 Clock Source 1032 * @{ 1033 */ 1034 #define RCC_LPTIM3CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 1035 #define RCC_LPTIM3CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM3SEL_0 1036 #define RCC_LPTIM3CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM3SEL_1 1037 #define RCC_LPTIM3CLKSOURCE_LSE (RCC_CCIPR2_LPTIM3SEL_0 | RCC_CCIPR2_LPTIM3SEL_1) 1038 #define RCC_LPTIM3CLKSOURCE_LSI RCC_CCIPR2_LPTIM3SEL_2 1039 #define RCC_LPTIM3CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM3SEL_0 | RCC_CCIPR2_LPTIM3SEL_2) 1040 /** 1041 * @} 1042 */ 1043 #endif /* LPTIM3 */ 1044 1045 #if defined(LPTIM4) 1046 /** @defgroup RCCEx_LPTIM4_Clock_Source LPTIM4 Clock Source 1047 * @{ 1048 */ 1049 #define RCC_LPTIM4CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 1050 #define RCC_LPTIM4CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM4SEL_0 1051 #define RCC_LPTIM4CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM4SEL_1 1052 #define RCC_LPTIM4CLKSOURCE_LSE (RCC_CCIPR2_LPTIM4SEL_0 | RCC_CCIPR2_LPTIM4SEL_1) 1053 #define RCC_LPTIM4CLKSOURCE_LSI RCC_CCIPR2_LPTIM4SEL_2 1054 #define RCC_LPTIM4CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM4SEL_0 | RCC_CCIPR2_LPTIM4SEL_2) 1055 /** 1056 * @} 1057 */ 1058 #endif /* LPTIM4 */ 1059 1060 #if defined(LPTIM5) 1061 /** @defgroup RCCEx_LPTIM5_Clock_Source LPTIM5 Clock Source 1062 * @{ 1063 */ 1064 #define RCC_LPTIM5CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 1065 #define RCC_LPTIM5CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM5SEL_0 1066 #define RCC_LPTIM5CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM5SEL_1 1067 #define RCC_LPTIM5CLKSOURCE_LSE (RCC_CCIPR2_LPTIM5SEL_0 | RCC_CCIPR2_LPTIM5SEL_1) 1068 #define RCC_LPTIM5CLKSOURCE_LSI RCC_CCIPR2_LPTIM5SEL_2 1069 #define RCC_LPTIM5CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM5SEL_0 | RCC_CCIPR2_LPTIM5SEL_2) 1070 /** 1071 * @} 1072 */ 1073 #endif /* LPTIM5 */ 1074 1075 #if defined(LPTIM6) 1076 /** @defgroup RCCEx_LPTIM6_Clock_Source LPTIM6 Clock Source 1077 * @{ 1078 */ 1079 #define RCC_LPTIM6CLKSOURCE_PCLK3 ((uint32_t)0x00000000U) 1080 #define RCC_LPTIM6CLKSOURCE_PLL2P RCC_CCIPR2_LPTIM6SEL_0 1081 #define RCC_LPTIM6CLKSOURCE_PLL3R RCC_CCIPR2_LPTIM6SEL_1 1082 #define RCC_LPTIM6CLKSOURCE_LSE (RCC_CCIPR2_LPTIM6SEL_0 | RCC_CCIPR2_LPTIM6SEL_1) 1083 #define RCC_LPTIM6CLKSOURCE_LSI RCC_CCIPR2_LPTIM6SEL_2 1084 #define RCC_LPTIM6CLKSOURCE_CLKP (RCC_CCIPR2_LPTIM6SEL_0 | RCC_CCIPR2_LPTIM6SEL_2) 1085 /** 1086 * @} 1087 */ 1088 #endif /* LPTIM6 */ 1089 1090 /** @defgroup RCCEx_FDCAN_Clock_Source FDCAN Kernel Clock Source 1091 * @{ 1092 */ 1093 #define RCC_FDCANCLKSOURCE_HSE ((uint32_t)0x00000000U) 1094 #define RCC_FDCANCLKSOURCE_PLL1Q RCC_CCIPR5_FDCANSEL_0 1095 #define RCC_FDCANCLKSOURCE_PLL2Q RCC_CCIPR5_FDCANSEL_1 1096 /** 1097 * @} 1098 */ 1099 1100 /** @defgroup RCCEx_ADCDAC_Clock_Source ADCDAC Kernel Clock Source 1101 * @{ 1102 */ 1103 #define RCC_ADCDACCLKSOURCE_HCLK ((uint32_t)0x00000000U) 1104 #define RCC_ADCDACCLKSOURCE_SYSCLK RCC_CCIPR5_ADCDACSEL_0 1105 #define RCC_ADCDACCLKSOURCE_PLL2R RCC_CCIPR5_ADCDACSEL_1 1106 #define RCC_ADCDACCLKSOURCE_HSE (RCC_CCIPR5_ADCDACSEL_1 | RCC_CCIPR5_ADCDACSEL_0) 1107 #define RCC_ADCDACCLKSOURCE_HSI RCC_CCIPR5_ADCDACSEL_2 1108 #define RCC_ADCDACCLKSOURCE_CSI (RCC_CCIPR5_ADCDACSEL_2 | RCC_CCIPR5_ADCDACSEL_0) 1109 1110 /** 1111 * @} 1112 */ 1113 1114 /** @defgroup RCCEx_DAC_Low_Power_Clock_Source DAC Low Power Kernel Clock Source 1115 * @{ 1116 */ 1117 #define RCC_DACLPCLKSOURCE_LSE ((uint32_t)0x00000000U) 1118 #define RCC_DACLPCLKSOURCE_LSI RCC_CCIPR5_DACSEL 1119 /** 1120 * @} 1121 */ 1122 1123 #if defined(SAI1) 1124 /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source 1125 * @{ 1126 */ 1127 #define RCC_SAI1CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 1128 #define RCC_SAI1CLKSOURCE_PLL2P RCC_CCIPR5_SAI1SEL_0 1129 #define RCC_SAI1CLKSOURCE_PLL3P RCC_CCIPR5_SAI1SEL_1 1130 #define RCC_SAI1CLKSOURCE_PIN (RCC_CCIPR5_SAI1SEL_1 | RCC_CCIPR5_SAI1SEL_0) 1131 #define RCC_SAI1CLKSOURCE_CLKP RCC_CCIPR5_SAI1SEL_2 1132 /** 1133 * @} 1134 */ 1135 #endif /* SAI1 */ 1136 1137 #if defined(SAI2) 1138 /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source 1139 * @{ 1140 */ 1141 #define RCC_SAI2CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 1142 #define RCC_SAI2CLKSOURCE_PLL2P RCC_CCIPR5_SAI2SEL_0 1143 #define RCC_SAI2CLKSOURCE_PLL3P RCC_CCIPR5_SAI2SEL_1 1144 #define RCC_SAI2CLKSOURCE_PIN (RCC_CCIPR5_SAI2SEL_1 | RCC_CCIPR5_SAI2SEL_0) 1145 #define RCC_SAI2CLKSOURCE_CLKP RCC_CCIPR5_SAI2SEL_2 1146 /** 1147 * @} 1148 */ 1149 #endif /* SAI2 */ 1150 1151 /** @defgroup RCCEx_CLKP_Clock_Source RCCEx CLKP Clock Source 1152 * @{ 1153 */ 1154 #define RCC_CLKPSOURCE_HSI (0x00000000U) 1155 #define RCC_CLKPSOURCE_CSI RCC_CCIPR5_CKERPSEL_0 1156 #define RCC_CLKPSOURCE_HSE RCC_CCIPR5_CKERPSEL_1 1157 /** 1158 * @} 1159 */ 1160 1161 #if defined(SDMMC1) 1162 /** @defgroup RCCEx_SDMMC1_Clock_Source SDMMC1 Clock Source 1163 * @{ 1164 */ 1165 #define RCC_SDMMC1CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 1166 #define RCC_SDMMC1CLKSOURCE_PLL2R RCC_CCIPR4_SDMMC1SEL 1167 /** 1168 * @} 1169 */ 1170 #endif /* SDMMC1 */ 1171 1172 #if defined(SDMMC2) 1173 /** @defgroup RCCEx_SDMMC2_Clock_Source SDMMC2 Clock Source 1174 * @{ 1175 */ 1176 #define RCC_SDMMC2CLKSOURCE_PLL1Q ((uint32_t)0x00000000U) 1177 #define RCC_SDMMC2CLKSOURCE_PLL2R RCC_CCIPR4_SDMMC2SEL 1178 /** 1179 * @} 1180 */ 1181 #endif /* SDMMC2 */ 1182 1183 #if defined(OCTOSPI1) 1184 /** @defgroup RCCEx_OSPI_Clock_Source OctoSPI Clock Source 1185 * @{ 1186 */ 1187 #define RCC_OSPICLKSOURCE_HCLK ((uint32_t)0x00000000U) 1188 #define RCC_OSPICLKSOURCE_PLL1Q RCC_CCIPR4_OCTOSPISEL_0 1189 #define RCC_OSPICLKSOURCE_PLL2R RCC_CCIPR4_OCTOSPISEL_1 1190 #define RCC_OSPICLKSOURCE_CLKP (RCC_CCIPR4_OCTOSPISEL_0 | RCC_CCIPR4_OCTOSPISEL_1) 1191 /** 1192 * @} 1193 */ 1194 #endif /* OCTOSPI1 */ 1195 1196 #if defined(CEC) 1197 /** @defgroup RCCEx_CEC_Clock_Source CEC Clock Source 1198 * @{ 1199 */ 1200 #define RCC_CECCLKSOURCE_LSE ((uint32_t)0x00000000U) 1201 #define RCC_CECCLKSOURCE_LSI RCC_CCIPR5_CECSEL_0 1202 #define RCC_CECCLKSOURCE_CSI_DIV122 RCC_CCIPR5_CECSEL_1 1203 /** 1204 * @} 1205 */ 1206 #endif /* CEC */ 1207 1208 /** @defgroup RCCEx_USB_Clock_Source RCCEx USB Clock Source 1209 * @{ 1210 */ 1211 #define RCC_USBCLKSOURCE_PLL1Q RCC_CCIPR4_USBSEL_0 1212 #if defined(RCC_CR_PLL3ON) 1213 #define RCC_USBCLKSOURCE_PLL3Q RCC_CCIPR4_USBSEL_1 1214 #else 1215 #define RCC_USBCLKSOURCE_PLL2Q RCC_CCIPR4_USBSEL_1 1216 #endif /* RCC_CR_PLL3ON */ 1217 #define RCC_USBCLKSOURCE_HSI48 RCC_CCIPR4_USBSEL 1218 /** 1219 * @} 1220 */ 1221 1222 /** @defgroup RCCEx_TIM_Prescaler_Selection RCCEx TIM Prescaler Selection 1223 * @{ 1224 */ 1225 #define RCC_TIMPRES_DEACTIVATED (0x00000000U) 1226 #define RCC_TIMPRES_ACTIVATED RCC_CFGR1_TIMPRE 1227 1228 /** 1229 * @} 1230 */ 1231 1232 #if defined(CRS) 1233 1234 /** @defgroup RCCEx_CRS_Status RCCEx CRS Status 1235 * @{ 1236 */ 1237 #define RCC_CRS_NONE ((uint32_t)0x00000000U) 1238 #define RCC_CRS_TIMEOUT ((uint32_t)0x00000001U) 1239 #define RCC_CRS_SYNCOK ((uint32_t)0x00000002U) 1240 #define RCC_CRS_SYNCWARN ((uint32_t)0x00000004U) 1241 #define RCC_CRS_SYNCERR ((uint32_t)0x00000008U) 1242 #define RCC_CRS_SYNCMISS ((uint32_t)0x00000010U) 1243 #define RCC_CRS_TRIMOVF ((uint32_t)0x00000020U) 1244 /** 1245 * @} 1246 */ 1247 1248 /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource 1249 * @{ 1250 */ 1251 #define RCC_CRS_SYNC_SOURCE_GPIO ((uint32_t)0x00000000U) /*!< Synchro Signal source GPIO */ 1252 #define RCC_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */ 1253 #define RCC_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/ 1254 /** 1255 * @} 1256 */ 1257 1258 /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider 1259 * @{ 1260 */ 1261 #define RCC_CRS_SYNC_DIV1 ((uint32_t)0x00000000U) /*!< Synchro Signal not divided (default) */ 1262 #define RCC_CRS_SYNC_DIV2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */ 1263 #define RCC_CRS_SYNC_DIV4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */ 1264 #define RCC_CRS_SYNC_DIV8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */ 1265 #define RCC_CRS_SYNC_DIV16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */ 1266 #define RCC_CRS_SYNC_DIV32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */ 1267 #define RCC_CRS_SYNC_DIV64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */ 1268 #define RCC_CRS_SYNC_DIV128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */ 1269 /** 1270 * @} 1271 */ 1272 1273 /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity 1274 * @{ 1275 */ 1276 #define RCC_CRS_SYNC_POLARITY_RISING ((uint32_t)0x00000000U) /*!< Synchro Active on rising edge (default) */ 1277 #define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */ 1278 /** 1279 * @} 1280 */ 1281 1282 /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault 1283 * @{ 1284 */ 1285 #define RCC_CRS_RELOADVALUE_DEFAULT ((uint32_t)0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds 1286 to a target frequency of 48 MHz and a synchronization 1287 signal frequency of 1 kHz (SOF signal from USB). */ 1288 /** 1289 * @} 1290 */ 1291 1292 /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault 1293 * @{ 1294 */ 1295 #define RCC_CRS_ERRORLIMIT_DEFAULT ((uint32_t)0x00000022U) /*!< Default Frequency error limit */ 1296 /** 1297 * @} 1298 */ 1299 1300 /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault 1301 * @{ 1302 */ 1303 #define RCC_CRS_HSI48CALIBRATION_DEFAULT ((uint32_t)0x00000020U) /*!< The default value is 32, which corresponds to the 1304 middle of the trimming interval. The trimming step 1305 is around 67 kHz between two consecutive TRIM 1306 steps. A higher TRIM value corresponds to a higher 1307 output frequency */ 1308 /** 1309 * @} 1310 */ 1311 1312 /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection 1313 * @{ 1314 */ 1315 #define RCC_CRS_FREQERRORDIR_UP ((uint32_t)0x00000000U) /*!< Upcounting direction, the actual frequency is above the target */ 1316 #define RCC_CRS_FREQERRORDIR_DOWN ((uint32_t)CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */ 1317 /** 1318 * @} 1319 */ 1320 1321 /** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources 1322 * @{ 1323 */ 1324 #define RCC_CRS_IT_SYNCOK CRS_CR_SYNCOKIE /*!< SYNC event OK */ 1325 #define RCC_CRS_IT_SYNCWARN CRS_CR_SYNCWARNIE /*!< SYNC warning */ 1326 #define RCC_CRS_IT_ERR CRS_CR_ERRIE /*!< Error */ 1327 #define RCC_CRS_IT_ESYNC CRS_CR_ESYNCIE /*!< Expected SYNC */ 1328 #define RCC_CRS_IT_SYNCERR CRS_CR_ERRIE /*!< SYNC error */ 1329 #define RCC_CRS_IT_SYNCMISS CRS_CR_ERRIE /*!< SYNC missed */ 1330 #define RCC_CRS_IT_TRIMOVF CRS_CR_ERRIE /*!< Trimming overflow or underflow */ 1331 /** 1332 * @} 1333 */ 1334 1335 /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags 1336 * @{ 1337 */ 1338 #define RCC_CRS_FLAG_SYNCOK CRS_ISR_SYNCOKF /*!< SYNC event OK flag */ 1339 #define RCC_CRS_FLAG_SYNCWARN CRS_ISR_SYNCWARNF /*!< SYNC warning flag */ 1340 #define RCC_CRS_FLAG_ERR CRS_ISR_ERRF /*!< Error flag */ 1341 #define RCC_CRS_FLAG_ESYNC CRS_ISR_ESYNCF /*!< Expected SYNC flag */ 1342 #define RCC_CRS_FLAG_SYNCERR CRS_ISR_SYNCERR /*!< SYNC error */ 1343 #define RCC_CRS_FLAG_SYNCMISS CRS_ISR_SYNCMISS /*!< SYNC missed*/ 1344 #define RCC_CRS_FLAG_TRIMOVF CRS_ISR_TRIMOVF /*!< Trimming overflow or underflow */ 1345 /** 1346 * @} 1347 */ 1348 1349 #endif /* CRS */ 1350 1351 /** 1352 * @} 1353 */ 1354 1355 /* Exported macros -----------------------------------------------------------*/ 1356 /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros 1357 * @{ 1358 */ 1359 1360 /** @brief Macros to enable or disable the HSI and CSI divided clock for Timers 12, 15 and LPTimer2 input capture. 1361 * @note HSI and CSI clocks without division are available when TIMIC is enabled 1362 * @retval None 1363 */ 1364 #define __HAL_RCC_TIMIC_ENABLE() SET_BIT(RCC->CCIPR1, RCC_CCIPR1_TIMICSEL) /*!< HSI/1024, CSI/128 and HSI/8 generation for Timers 12,15 and LPTimer2 Input capture */ 1365 #define __HAL_RCC_TIMIC_DISABLE() CLEAR_BIT(RCC->CCIPR1, RCC_CCIPR1_TIMICSEL) /*!< No clock available for Timers Input capture */ 1366 1367 /** @brief Macro to configure the PLL2 clock source. 1368 * @note This function must be used only when all PLL2 is disabled. 1369 * @param __PLL2SOURCE__: specifies the PLL2 entry clock source. 1370 * This parameter can be one of the following values: 1371 * @arg RCC_PLL2_SOURCE_NONE: No oscillator clock selected as PLL2 clock entry 1372 * @arg RCC_PLL2_SOURCE_CSI: CSI oscillator clock selected as PLL2 clock entry 1373 * @arg RCC_PLL2_SOURCE_HSI: HSI oscillator clock selected as PLL2 clock entry 1374 * @arg RCC_PLL2_SOURCE_HSE: HSE oscillator clock selected as PLL2 clock entry 1375 * 1376 */ 1377 #define __HAL_RCC_PLL2_PLLSOURCE_CONFIG(__PLL2SOURCE__) MODIFY_REG(RCC->PLL2CFGR, RCC_PLL2CFGR_PLL2SRC, \ 1378 (__PLL2SOURCE__)) 1379 1380 /** @brief Macro to get the oscillator used as PLL2 clock source. 1381 * @retval The oscillator used as PLL2 clock source. The returned value can be one 1382 * of the following: 1383 * - RCC_PLL2_SOURCE_NONE: No oscillator is used as PLL clock source. 1384 * - RCC_PLL2_SOURCE_CSI: CSI oscillator is used as PLL clock source. 1385 * - RCC_PLL2_SOURCE_HSI: HSI oscillator is used as PLL clock source. 1386 * - RCC_PLL2_SOURCE_HSE: HSE oscillator is used as PLL clock source. 1387 */ 1388 #define __HAL_RCC_GET_PLL2_OSCSOURCE() ((uint32_t)(RCC->PLL2CFGR & RCC_PLL2CFGR_PLL2SRC)) 1389 1390 /** 1391 * @brief Macro to configures the PLL2 source, multiplication and division factors. 1392 * @note This function must be used only when PLL2 is disabled. 1393 * 1394 * @param __PLL2SOURCE__: specifies the PLL2 entry clock source. 1395 * This parameter can be one of the following values: 1396 * @arg @ref RCC_PLL2_SOURCE_NONE No clock selected as PLL2 clock entry 1397 * @arg @ref RCC_PLL2_SOURCE_CSI CSI oscillator clock selected as PLL2 clock entry 1398 * @arg @ref RCC_PLL2_SOURCE_HSI HSI oscillator clock selected as PLL2 clock entry 1399 * @arg @ref RCC_PLL2_SOURCE_HSE HSE oscillator clock selected as PLL2 clock entry 1400 * 1401 * @param __PLL2M__ specifies the division factor of PLL2 input clock. 1402 * This parameter must be a number between Min_Data = 1 and Max_Data = 63. 1403 * 1404 * @param __PLL2N__: specifies the multiplication factor for PLL2 VCO output clock 1405 * This parameter must be a number between 4 and 512. 1406 * @note You have to set the PLL2N parameter correctly to ensure that the VCO 1407 * output frequency is between 192 and 836 MHz (Wide range) or 150 and 420 Mhz (Medium range). 1408 * PLL2 clock frequency = f(PLL2) multiplied by PLL2N 1409 * 1410 * @param __PLL2P__: specifies the division factor for peripheral kernel clocks 1411 * This parameter must be a number between 1 and 128 1412 * 1413 * @param __PLL2Q__: specifies the division factor for peripheral kernel clocks 1414 * This parameter must be a number between 1 and 128 1415 * 1416 * @param __PLL2R__: specifies the division factor for peripheral kernel clocks 1417 * This parameter must be a number between 1 and 128 1418 * 1419 * @retval None 1420 */ 1421 #define __HAL_RCC_PLL2_CONFIG(__PLL2SOURCE__, __PLL2M__, __PLL2N__, __PLL2P__, __PLL2Q__, __PLL2R__) \ 1422 do{ \ 1423 MODIFY_REG(RCC->PLL2CFGR, (RCC_PLL2CFGR_PLL2SRC | RCC_PLL2CFGR_PLL2M), \ 1424 ((__PLL2SOURCE__) << RCC_PLL2CFGR_PLL2SRC_Pos) | ((__PLL2M__) << RCC_PLL2CFGR_PLL2M_Pos)); \ 1425 WRITE_REG(RCC->PLL2DIVR , ((((__PLL2N__) - 1U) & RCC_PLL2DIVR_PLL2N) | \ 1426 ((((__PLL2P__) - 1U) << RCC_PLL2DIVR_PLL2P_Pos) & RCC_PLL2DIVR_PLL2P) | \ 1427 ((((__PLL2Q__) - 1U) << RCC_PLL2DIVR_PLL2Q_Pos) & RCC_PLL2DIVR_PLL2Q) | \ 1428 ((((__PLL2R__) - 1U) << RCC_PLL2DIVR_PLL2R_Pos) & RCC_PLL2DIVR_PLL2R))); \ 1429 } while(0) 1430 /** 1431 * @brief Macro to configure the PLL2 clock multiplication factor N. 1432 * 1433 * @note This function must be used only when the PLL2 is disabled. 1434 * @note PLL2 clock source is independent from the main PLL and is configured through 1435 * __HAL_RCC_PLL2_CONFIG() macro. 1436 * 1437 * @param __PLL2N__ specifies the multiplication factor for PLL2 VCO output clock. 1438 * This parameter must be a number between 4 and 512. 1439 * @note You have to set the PLL2N parameter correctly to ensure that the VCO 1440 * output frequency is between 192 and 836 MHz (Wide range) or 150 and 420 Mhz (Medium range). 1441 * PLL2 clock frequency = f(PLL2) multiplied by PLL2N 1442 * 1443 * @retval None 1444 */ 1445 #define __HAL_RCC_PLL2_MULN_CONFIG(__PLL2N__) \ 1446 MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_N2, ((__PLL2N__) - 1U) << RCC_PLL2DIVR_N2_Pos) 1447 1448 /** @brief Macro to configure the PLL2 input clock division factor M. 1449 * 1450 * @note This function must be used only when the PLL2 is disabled. 1451 * @note PLL2 clock source is independent from the main PLL and is configured through 1452 * __HAL_RCC_PLL2_CONFIG() macro. 1453 * 1454 * @param __PLL2M__ specifies the division factor for PLL2 clock. 1455 * This parameter must be a number between Min_Data = 1 and Max_Data = 63. 1456 * In order to save power when PLL2 is not used, the value of PLL2M must be set to 0. 1457 * 1458 * @retval None 1459 */ 1460 #define __HAL_RCC_PLL2_DIVM_CONFIG(__PLL2M__) \ 1461 MODIFY_REG(RCC->PLL2CFGR, RCC_PLL2CFGR_DIVM2, (__PLL2M__) << RCC_PLL2CFGR_DIVM2_Pos) 1462 1463 /** @brief Macro to configure the PLL2 clock division factor P. 1464 * 1465 * @note This function must be used only when the PLL2 is disabled. 1466 * @note PLL2 clock source is independent from the main PLL and is configured through 1467 * __HAL_RCC_PLL2_CONFIG() macro. 1468 * 1469 * @param __PLL2P__ specifies the division factor for PLL2 output P clock. 1470 * This parameter must be a number in the range (1 to 128). 1471 * Use to set PLL2 output P clock frequency = f(PLL2) / PLL2P 1472 * 1473 * @retval None 1474 */ 1475 #define __HAL_RCC_PLL2_DIVP_CONFIG(__PLL2P__) \ 1476 MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_P2, ((__PLL2P__) - 1U) << RCC_PLL2DIVR_P2_Pos) 1477 1478 /** @brief Macro to configure the PLL2 clock division factor Q. 1479 * 1480 * @note This function must be used only when the PLL2 is disabled. 1481 * @note PLL2 clock source is independent from the main PLL and is configured through 1482 * __HAL_RCC_PLL2_CONFIG() macro. 1483 * 1484 * @param __PLL2Q__ specifies the division factor for PLL2 output Q clock. 1485 * This parameter must be a number in the range (1 to 128). 1486 * Use to set PLL2 output Q clock frequency = f(PLL2) / PLL2Q 1487 * 1488 * @retval None 1489 */ 1490 #define __HAL_RCC_PLL2_DIVQ_CONFIG(__PLL2Q__) \ 1491 MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_Q2, ((__PLL2Q__) - 1U) << RCC_PLL2DIVR_Q2_Pos) 1492 1493 /** @brief Macro to configure the PLL2 clock division factor R. 1494 * 1495 * @note This function must be used only when the PLL2 is disabled. 1496 * @note PLL2 clock source is independent from the main PLL and is configured through 1497 * __HAL_RCC_PLL2_CONFIG() macro. 1498 * 1499 * @param __PLL2R__ specifies the division factor for PLL2 output R clock. 1500 * This parameter must be a number in the range (1 to 128). 1501 * Use to set PLL2 output R clock frequency = f(PLL2) / PLL2R 1502 * 1503 * @retval None 1504 */ 1505 #define __HAL_RCC_PLL2_DIVR_CONFIG(__PLL2R__) \ 1506 MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_R2, ((__PLL2R__) - 1U) << RCC_PLL2DIVR_R2_Pos) 1507 1508 /** @brief Macros to enable or disable the PLL2. 1509 * @note After enabling PLL2, the application software should wait on 1510 * PLL2RDY flag to be set indicating that PLL2 clock is stable and can 1511 * be used as kernel clock source. 1512 * @note The PLL2 is disabled by hardware when entering STOP and STANDBY modes. 1513 * @retval None 1514 */ 1515 #define __HAL_RCC_PLL2_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLL2ON) 1516 #define __HAL_RCC_PLL2_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON) 1517 1518 /** 1519 * @brief Enables or disables each clock output (PLL2_P_CLK, PLL2_Q_CLK, PLL2_R_CLK) 1520 * @note Enabling/disabling those clocks can be done at any time without the need to stop the PLL2, 1521 * This is mainly used to save Power. 1522 * @param __PLL2_CLOCKOUT__ specifies the PLL2 clock to be output. 1523 * This parameter can be one or a combination of the following values: 1524 * @arg RCC_PLL2_DIVP: This clock is used to generate an accurate kernel clock to achieve 1525 * high-quality audio performance on SAI interface, SPI/I2S and LPTIM peripherals. 1526 * @arg RCC_PLL2_DIVQ: This clock is used to generate kernel clock for the random number generator RNG 1527 * (<=48 MHz), SPI, FDCAN and UART/USART peripherals. 1528 * @arg RCC_PLL2_DIVR: This clock is used to generate kernel clock for ADC and DAC peripherals. 1529 * @retval None 1530 */ 1531 #define __HAL_RCC_PLL2_CLKOUT_ENABLE(__PLL2_CLOCKOUT__) SET_BIT(RCC->PLL2CFGR, (__PLL2_CLOCKOUT__)) 1532 #define __HAL_RCC_PLL2_CLKOUT_DISABLE(__PLL2_CLOCKOUT__) CLEAR_BIT(RCC->PLL2CFGR, (__PLL2_CLOCKOUT__)) 1533 1534 /** 1535 * @brief Macro to get the PLL2 clock output enable status. 1536 * @param __PLL2_CLOCKOUT__ specifies the PLL2 clock to be output. 1537 * This parameter can be one or a combination of the following values: 1538 * @arg RCC_PLL2_DIVP: This clock is used to generate an accurate kernel clock to achieve 1539 * high-quality audio performance on SAI interface, SPI/I2S and LPTIM peripherals. 1540 * @arg RCC_PLL2_DIVQ: This clock is used to generate kernel clock for the random number generator RNG 1541 * (<=48 MHz), SPI, FDCAN and UART/USART peripherals. 1542 * @arg RCC_PLL2_DIVR: This clock is used to generate kernel clock for ADC and DAC peripherals. 1543 * @retval SET / RESET 1544 */ 1545 #define __HAL_RCC_GET_PLL2_CLKOUT_CONFIG(__PLL2_CLOCKOUT__) READ_BIT(RCC->PLL2CFGR, (__PLL2_CLOCKOUT__)) 1546 1547 /** 1548 * @brief Enables or disables Fractional Part Of The Multiplication Factor of PLL2 VCO 1549 * @note Enabling/disabling Fractional Part can be done at any time without the need to stop the PLL2 1550 * @retval None 1551 */ 1552 #define __HAL_RCC_PLL2_FRACN_ENABLE() SET_BIT(RCC->PLL2CFGR, RCC_PLL2CFGR_PLL2FRACEN) 1553 #define __HAL_RCC_PLL2_FRACN_DISABLE() CLEAR_BIT(RCC->PLL2CFGR, RCC_PLL2CFGR_PLL2FRACEN) 1554 1555 /** 1556 * @brief Macro to configures PLL2 clock Fractional Part Of The Multiplication Factor 1557 * 1558 * @note These bits can be written at any time, allowing dynamic fine-tuning of the PLL2 VCO 1559 * 1560 * @param __PLL2FRACN__: Specifies Fractional Part Of The Multiplication factor for PLL2 VCO 1561 * It should be a value between 0 and 8191 1562 * @note Warning: the software has to set correctly these bits to insure that the VCO 1563 * output frequency is between its valid frequency range, which is: 1564 * 192 to 836 MHz if PLL2VCOSEL = 0 1565 * 150 to 420 MHz if PLL2VCOSEL = 1. 1566 * 1567 * @retval None 1568 */ 1569 #define __HAL_RCC_PLL2_FRACN_CONFIG(__PLL2FRACN__) MODIFY_REG(RCC->PLL2FRACR, RCC_PLL2FRACR_PLL2FRACN, \ 1570 (uint32_t)(__PLL2FRACN__) << RCC_PLL2FRACR_PLL2FRACN_Pos) 1571 1572 /** @brief Macro to select the PLL2 reference frequency range. 1573 * @param __PLL2VCIRange__: specifies the PLL2 input frequency range 1574 * This parameter can be one of the following values: 1575 * @arg RCC_PLL2_VCIRANGE_0: Range frequency is between 1 and 2 MHz 1576 * @arg RCC_PLL2_VCIRANGE_1: Range frequency is between 2 and 4 MHz 1577 * @arg RCC_PLL2_VCIRANGE_2: Range frequency is between 4 and 8 MHz 1578 * @arg RCC_PLL2_VCIRANGE_3: Range frequency is between 8 and 16 MHz 1579 * @retval None 1580 */ 1581 #define __HAL_RCC_PLL2_VCIRANGE(__PLL2VCIRange__) \ 1582 MODIFY_REG(RCC->PLL2CFGR, RCC_PLL2CFGR_PLL2RGE, (__PLL2VCIRange__)) 1583 1584 /** @brief Macro to select the PLL2 reference frequency range. 1585 * @param __RCC_PLL2VCORange__: specifies the PLL2 output frequency range 1586 * This parameter can be one of the following values: 1587 * @arg RCC_PLL2_VCORANGE_WIDE: Range frequency is between 192 and 836 MHz 1588 * @arg RCC_PLL2_VCORANGE_MEDIUM: Range frequency is between 150 and 420 MHz 1589 * 1590 * @retval None 1591 */ 1592 #define __HAL_RCC_PLL2_VCORANGE(__RCC_PLL2VCORange__) \ 1593 MODIFY_REG(RCC->PLL2CFGR, RCC_PLL2CFGR_PLL2VCOSEL, (__RCC_PLL2VCORange__)) 1594 1595 #if defined(RCC_CR_PLL3ON) 1596 /** @brief Macro to configure the PLL3 clock source. 1597 * @note This function must be used only when all PLL3 is disabled. 1598 * @param __PLL3SOURCE__: specifies the PLL3 entry clock source. 1599 * This parameter can be one of the following values: 1600 * @arg RCC_PLL3_SOURCE_NONE: No oscillator clock selected as PLL3 clock entry 1601 * @arg RCC_PLL3_SOURCE_CSI: CSI oscillator clock selected as PLL3 clock entry 1602 * @arg RCC_PLL3_SOURCE_HSI: HSI oscillator clock selected as PLL3 clock entry 1603 * @arg RCC_PLL3_SOURCE_HSE: HSE oscillator clock selected as PLL3 clock entry 1604 * 1605 */ 1606 #define __HAL_RCC_PLL3_PLLSOURCE_CONFIG(__PLL3SOURCE__) MODIFY_REG(RCC->PLL3CFGR, RCC_PLL3CFGR_PLL3SRC, \ 1607 (__PLL3SOURCE__)) 1608 1609 /** @brief Macro to get the oscillator used as PLL3 clock source. 1610 * @retval The oscillator used as PLL3 clock source. The returned value can be one 1611 * of the following: 1612 * - RCC_PLL3_SOURCE_NONE: No oscillator is used as PLL3 clock source. 1613 * - RCC_PLL3_SOURCE_CSI: CSI oscillator is used as PLL3 clock source. 1614 * - RCC_PLL3_SOURCE_HSI: HSI oscillator is used as PLL3 clock source. 1615 * - RCC_PLL3_SOURCE_HSE: HSE oscillator is used as PLL3 clock source. 1616 */ 1617 #define __HAL_RCC_GET_PLL3_OSCSOURCE() ((uint32_t)(RCC->PLL3CFGR & RCC_PLL3CFGR_PLL3SRC)) 1618 1619 /** 1620 * @brief Macro to configures the PLL3 source, multiplication and division factors. 1621 * @note This function must be used only when PLL3 is disabled. 1622 * 1623 * @param __PLL3SOURCE__: specifies the PLL3 entry clock source. 1624 * This parameter can be one of the following values: 1625 * @arg @ref RCC_PLL3_SOURCE_NONE No clock selected as PLL3 clock entry 1626 * @arg @ref RCC_PLL3_SOURCE_CSI CSI oscillator clock selected as PLL3 clock entry 1627 * @arg @ref RCC_PLL3_SOURCE_HSI HSI oscillator clock selected as PLL3 clock entry 1628 * @arg @ref RCC_PLL3_SOURCE_HSE HSE oscillator clock selected as PLL3 clock entry 1629 * 1630 * @param __PLL3M__ specifies the division factor of PLL3 input clock. 1631 * This parameter must be a number between Min_Data = 1 and Max_Data = 63. 1632 * 1633 * @param __PLL3N__: specifies the multiplication factor for PLL3 VCO output clock 1634 * This parameter must be a number between 4 and 512. 1635 * @note You have to set the PLL3N parameter correctly to ensure that the VCO 1636 * output frequency is between 150 and 420 MHz (when in medium VCO range) 1637 * or between 192 and 836 MHZ (when in wide VCO range) 1638 * 1639 * @param __PLL3P__: specifies the division factor for peripheral kernel clocks 1640 * This parameter must be a number between 1 and 128 1641 * 1642 * @param __PLL3Q__: specifies the division factor for peripheral kernel clocks 1643 * This parameter must be a number between 1 and 128 1644 * 1645 * @param __PLL3R__: specifies the division factor for peripheral kernel clocks 1646 * This parameter must be a number between 1 and 128 1647 * 1648 * @retval None 1649 */ 1650 #define __HAL_RCC_PLL3_CONFIG(__PLL3SOURCE__, __PLL3M__, __PLL3N__, __PLL3P__, __PLL3Q__, __PLL3R__) \ 1651 do{\ 1652 MODIFY_REG(RCC->PLL3CFGR, (RCC_PLL3CFGR_PLL3SRC | RCC_PLL3CFGR_PLL3M), \ 1653 ((__PLL3SOURCE__) << RCC_PLL3CFGR_PLL3SRC_Pos) | ((__PLL3M__) << RCC_PLL3CFGR_PLL3M_Pos)); \ 1654 WRITE_REG(RCC->PLL3DIVR , ( (((__PLL3N__) - 1U) & RCC_PLL3DIVR_PLL3N) | \ 1655 ((((__PLL3P__) - 1U) << RCC_PLL3DIVR_PLL3P_Pos) & RCC_PLL3DIVR_PLL3P) | \ 1656 ((((__PLL3Q__) - 1U) << RCC_PLL3DIVR_PLL3Q_Pos) & RCC_PLL3DIVR_PLL3Q) | \ 1657 ((((__PLL3R__) - 1U) << RCC_PLL3DIVR_PLL3R_Pos) & RCC_PLL3DIVR_PLL3R))); \ 1658 } while(0) 1659 1660 /** 1661 * @brief Macro to configure the PLL3 clock multiplication factor N. 1662 * 1663 * @note This function must be used only when the PLL3 is disabled. 1664 * @note PLL3 clock source is independent from the main PLL and is configured through 1665 * __HAL_RCC_PLL3_CONFIG() macro. 1666 * 1667 * @param __PLL3N__ specifies the multiplication factor for PLL3 VCO output clock. 1668 * This parameter must be a number between 8 and 86. 1669 * @note You have to set the PLL3N parameter correctly to ensure that the VCO 1670 * output frequency is between 192 and 836 MHz (Wide range) or 150 and 420 Mhz (Medium range). 1671 * PLL3 clock frequency = f(PLL3) multiplied by PLL3N 1672 * 1673 * @retval None 1674 */ 1675 #define __HAL_RCC_PLL3_MULN_CONFIG(__PLL3N__) \ 1676 MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_N3, ((__PLL3N__) - 1U) << RCC_PLL3DIVR_N3_Pos) 1677 1678 /** @brief Macro to configure the PLL3 input clock division factor M. 1679 * 1680 * @note This function must be used only when the PLL3 is disabled. 1681 * @note PLL3 clock source is independent from the main PLL and is configured through 1682 * __HAL_RCC_PLL3_CONFIG() macro. 1683 * 1684 * @param __PLL3M__ specifies the division factor for PLL3 clock. 1685 * This parameter must be a number between Min_Data = 1 and Max_Data = 63. 1686 * In order to save power when PLL3 is not used, the value of PLL3M must be set to 0. 1687 * 1688 * @retval None 1689 */ 1690 #define __HAL_RCC_PLL3_DIVM_CONFIG(__PLL3M__) \ 1691 MODIFY_REG(RCC->PLL3CFGR, RCC_PLL3CFGR_DIVM3, (__PLL3M__) << RCC_PLL3CFGR_DIVM3_Pos) 1692 1693 /** @brief Macro to configure the PLL3 clock division factor P. 1694 * 1695 * @note This function must be used only when the PLL3 is disabled. 1696 * @note PLL3 clock source is independent from the main PLL and is configured through 1697 * __HAL_RCC_PLL3_CONFIG() macro. 1698 * 1699 * @param __PLL3P__ specifies the division factor for PLL3 output P clock. 1700 * This parameter must be a number in the range (1 to 128). 1701 * Use to set PLL3 output P clock frequency = f(PLL3) / PLL3P 1702 * 1703 * @retval None 1704 */ 1705 #define __HAL_RCC_PLL3_DIVP_CONFIG(__PLL3P__) \ 1706 MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_P3, ((__PLL3P__) - 1U) << RCC_PLL3DIVR_P3_Pos) 1707 1708 /** @brief Macro to configure the PLL3 clock division factor Q. 1709 * 1710 * @note This function must be used only when the PLL3 is disabled. 1711 * @note PLL3 clock source is independent from the main PLL and is configured through 1712 * __HAL_RCC_PLL3_CONFIG() macro. 1713 * 1714 * @param __PLL3Q__ specifies the division factor for PLL3 output Q clock. 1715 * This parameter must be a number in the range (1 to 128). 1716 * Use to set PLL3 output Q clock frequency = f(PLL3) / PLL3Q 1717 * 1718 * @retval None 1719 */ 1720 #define __HAL_RCC_PLL3_DIVQ_CONFIG(__PLL3Q__) \ 1721 MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_Q3, ((__PLL3Q__) - 1U) << RCC_PLL3DIVR_Q3_Pos) 1722 1723 /** @brief Macro to configure the PLL3 clock division factor R. 1724 * 1725 * @note This function must be used only when the PLL3 is disabled. 1726 * @note PLL3 clock source is independent from the main PLL and is configured through 1727 * __HAL_RCC_PLL3_CONFIG() macro. 1728 * 1729 * @param __PLL3R__ specifies the division factor for PLL3 output R clock. 1730 * This parameter must be a number in the range (1 to 128). 1731 * Use to set PLL3 output R clock frequency = f(PLL3) / PLL3R 1732 * 1733 * @retval None 1734 */ 1735 #define __HAL_RCC_PLL3_DIVR_CONFIG(__PLL3R__) \ 1736 MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_R3, ((__PLL3R__) - 1U) << RCC_PLL3DIVR_R3_Pos) 1737 1738 /** 1739 * @brief Macro to configures PLL3 clock Fractional Part of The Multiplication Factor 1740 * 1741 * @note These bits can be written at any time, allowing dynamic fine-tuning of the PLL3 VCO 1742 * 1743 * @param __PLL3FRACN__: specifies Fractional Part Of The Multiplication Factor for PLL3 VCO 1744 * It should be a value between 0 and 8191 1745 * @note Warning: the software has to set correctly these bits to insure that the VCO 1746 * output frequency is between its valid frequency range, which is: 1747 * 192 to 836 MHz if PLL3VCOSEL = 0 1748 * 150 to 420 MHz if PLL3VCOSEL = 1. 1749 * 1750 * @retval None 1751 */ 1752 #define __HAL_RCC_PLL3_FRACN_CONFIG(__PLL3FRACN__) MODIFY_REG(RCC->PLL3FRACR, RCC_PLL3FRACR_PLL3FRACN, \ 1753 (uint32_t)(__PLL3FRACN__) << RCC_PLL3FRACR_PLL3FRACN_Pos) 1754 1755 /** @brief Macro to select the PLL3 reference frequency range. 1756 * @param __PLL3VCIRange__: specifies the PLL3 input frequency range 1757 * This parameter can be one of the following values: 1758 * @arg RCC_PLL3_VCIRANGE_0: Range frequency is between 1 and 2 MHz 1759 * @arg RCC_PLL3_VCIRANGE_1: Range frequency is between 2 and 4 MHz 1760 * @arg RCC_PLL3_VCIRANGE_2: Range frequency is between 4 and 8 MHz 1761 * @arg RCC_PLL3_VCIRANGE_3: Range frequency is between 8 and 16 MHz 1762 * 1763 * @retval None 1764 */ 1765 #define __HAL_RCC_PLL3_VCIRANGE(__PLL3VCIRange__) \ 1766 MODIFY_REG(RCC->PLL3CFGR, RCC_PLL3CFGR_PLL3RGE, (__PLL3VCIRange__)) 1767 1768 /** @brief Macro to select the PLL3 reference frequency range. 1769 * @param __RCC_PLL3VCORange__: specifies the PLL3 input frequency range 1770 * This parameter can be one of the following values: 1771 * @arg RCC_PLL3VCOWIDE: Range frequency is between 192 and 836 MHz 1772 * @arg RCC_PLL3VCOMEDIUM: Range frequency is between 150 and 420 MHz 1773 * 1774 * @retval None 1775 */ 1776 #define __HAL_RCC_PLL3_VCORANGE(__RCC_PLL3VCORange__) \ 1777 MODIFY_REG(RCC->PLL3CFGR, RCC_PLL3CFGR_PLL3VCOSEL, (__RCC_PLL3VCORange__)) 1778 1779 /** 1780 * @brief Macros to enable or disable the PLL3. 1781 * @note The PLL3 is disabled by hardware when entering STOP and STANDBY modes. 1782 * @retval None 1783 */ 1784 1785 /** @brief Macros to enable or disable the main PLL3. 1786 * @note After enabling PLL3, the application software should wait on 1787 * PLL3RDY flag to be set indicating that PLL3 clock is stable and can 1788 * be used as kernel clock source. 1789 * @note PLL3 is disabled by hardware when entering STOP and STANDBY modes. 1790 */ 1791 #define __HAL_RCC_PLL3_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLL3ON) 1792 #define __HAL_RCC_PLL3_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON) 1793 1794 /** 1795 * @brief Enables or disables Fractional Part Of The Multiplication Factor of PLL3 VCO 1796 * @note Enabling/disabling Fractional Part can be done at any time without the need to stop the PLL3 1797 * @retval None 1798 */ 1799 #define __HAL_RCC_PLL3_FRACN_ENABLE() SET_BIT(RCC->PLL3CFGR, RCC_PLL3CFGR_PLL3FRACEN) 1800 #define __HAL_RCC_PLL3_FRACN_DISABLE() CLEAR_BIT(RCC->PLL3CFGR, RCC_PLL3CFGR_PLL3FRACEN) 1801 1802 /** 1803 * @brief Enables or disables each clock output (PLL3_P_CLK, PLL3_Q_CLK, PLL3_R_CLK) 1804 * @note Enabling/disabling Those Clocks can be any time without the need to stop the PLL3, 1805 * This is mainly used to save Power. 1806 * @param __PLL3_CLOCKOUT__: specifies the PLL3 clock to be outputted 1807 * This parameter can be one of the following values: 1808 * @arg RCC_PLL3_DIVP: This clock is used to generate an accurate clock to achieve 1809 * high-quality audio performance on SAI and SPI/I2S interfaces. 1810 * @arg RCC_PLL3_DIVQ: This clock is used to generate kernel clock for SPI, LPUART, UART/USART 1811 * and USB peripherals. 1812 * @arg RCC_PLL3_DIVR: This clock is used to generate kernel clock for I2C, I3C and LPTIM peripherals. 1813 * 1814 * @retval None 1815 */ 1816 #define __HAL_RCC_PLL3_CLKOUT_ENABLE(__PLL3_CLOCKOUT__) SET_BIT(RCC->PLL3CFGR, (__PLL3_CLOCKOUT__)) 1817 #define __HAL_RCC_PLL3_CLKOUT_DISABLE(__PLL3_CLOCKOUT__) CLEAR_BIT(RCC->PLL3CFGR, (__PLL3_CLOCKOUT__)) 1818 1819 /** 1820 * @brief Macro to get clock output enable status (PLL3_SAI2). 1821 * @param __PLL3_CLOCKOUT__ specifies the PLL3 clock to be output. 1822 * This parameter can be one or a combination of the following values: 1823 * @arg RCC_PLL3_DIVP: This clock is used to generate an accurate clock to achieve 1824 * high-quality audio performance on SAI and SPI/I2S interfaces. 1825 * @arg RCC_PLL3_DIVQ: This clock is used to generate kernel clock for SPI, LPUART, UART/USART 1826 * and USB peripherals. 1827 * @arg RCC_PLL3_DIVR: This clock is used to generate kernel clock for I2C, I3C and LPTIM peripherals. 1828 * 1829 * @retval SET / RESET 1830 */ 1831 #define __HAL_RCC_GET_PLL3_CLKOUT_CONFIG(__PLL3_CLOCKOUT__) READ_BIT(RCC->PLL3CFGR, (__PLL3_CLOCKOUT__)) 1832 #endif /* RCC_CR_PLL3ON */ 1833 1834 /** @brief Macro to configure the ADC and DAC kernel clock source. 1835 * @param __ADCDAC_CLKSOURCE__ specifies the ADC and DAC kernel clock source. 1836 * This parameter can be one of the following values: 1837 * @arg @ref RCC_ADCDACCLKSOURCE_HCLK AHB bus clock selected as ADC and DAC kernel clock 1838 * @arg @ref RCC_ADCDACCLKSOURCE_SYSCLK System clock selected as ADC and DAC kernel clock 1839 * @arg @ref RCC_ADCDACCLKSOURCE_PLL2R PLL2R clock selected as ADC and DAC kernel clock 1840 * @arg @ref RCC_ADCDACCLKSOURCE_HSE HSE clock selected as ADC and DAC kernel clock 1841 * @arg @ref RCC_ADCDACCLKSOURCE_HSI HSI clock selected as ADC and DAC kernel clock 1842 * @arg @ref RCC_ADCDACCLKSOURCE_CSI CSI clock selected as ADC and DAC kernel clock 1843 * @retval None 1844 */ 1845 #define __HAL_RCC_ADCDAC_CONFIG(__ADCDAC_CLKSOURCE__) \ 1846 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_ADCDACSEL, (uint32_t)(__ADCDAC_CLKSOURCE__)) 1847 1848 /** @brief Macro to get the ADC and DAC kernel clock source. 1849 * @retval The clock source can be one of the following values: 1850 * @arg @ref RCC_ADCDACCLKSOURCE_HCLK AHB Bus clock used as ADC and DAC kernel clock 1851 * @arg @ref RCC_ADCDACCLKSOURCE_SYSCLK System clock used as ADC and DAC kernel clock 1852 * @arg @ref RCC_ADCDACCLKSOURCE_PLL2R PLL2R clock used as ADC and DAC kernel clock 1853 * @arg @ref RCC_ADCDACCLKSOURCE_HSE HSE oscillator used as ADC and DAC kernel clock 1854 * @arg @ref RCC_ADCDACCLKSOURCE_HSI HSI oscillator used as ADC and DAC kernel clock 1855 * @arg @ref RCC_ADCDACCLKSOURCE_CSI CSI oscillator used as ADC and DAC kernel clock 1856 */ 1857 #define __HAL_RCC_GET_ADCDAC_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_ADCDACSEL))) 1858 1859 /** @brief Macro to configure the DAC kernel clock source in low-power mode. 1860 * @param __DACLPCLKSOURCE__ specifies the DAC kernel clock source in low-power mode. 1861 * This parameter can be one of the following values: 1862 * @arg @ref RCC_DACLPCLKSOURCE_LSE LSE oscillator selected as DAC kernel clock in low-power mode 1863 * @arg @ref RCC_DACLPCLKSOURCE_LSI LSI oscillator selected as DAC kernel clock in low-power mode 1864 * @retval None 1865 */ 1866 #define __HAL_RCC_DAC_LP_CONFIG(__DACLPCLKSOURCE__) \ 1867 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_DACSEL, (uint32_t)(__DACLPCLKSOURCE__)) 1868 1869 /** @brief Macro to get the DAC kernel clock source in low-power mode. 1870 * @retval The clock source can be one of the following values: 1871 * @arg @ref RCC_DACLPCLKSOURCE_LSE LSE oscillator used as DAC kernel clock in low-power mode 1872 * @arg @ref RCC_DACLPCLKSOURCE_LSI LSI oscillator used as DAC kernel clock in low-power mode 1873 */ 1874 #define __HAL_RCC_GET_DAC_LP_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_DACSEL))) 1875 1876 /** @brief Macro to configure the FDCAN kernel clock (FDCANCLK). 1877 * 1878 * @param __FDCAN_CLKSOURCE__ specifies the FDCAN kernel clock source. 1879 * This parameter can be one of the following values: 1880 * @arg @ref RCC_FDCANCLKSOURCE_HSE HSE oscillator selected as FDCAN kernel clock 1881 * @arg @ref RCC_FDCANCLKSOURCE_PLL1Q PLL1Q Clock selected as FDCAN kernel clock 1882 * @arg @ref RCC_FDCANCLKSOURCE_PLL2Q PLL2Q Clock selected as FDCAN kernel clock 1883 * @retval None 1884 */ 1885 #define __HAL_RCC_FDCAN_CONFIG(__FDCAN_CLKSOURCE__) \ 1886 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_FDCANSEL, (uint32_t)(__FDCAN_CLKSOURCE__)) 1887 1888 /** @brief Macro to get the FDCAN clock source. 1889 * @retval The clock source can be one of the following values: 1890 * @arg @ref RCC_FDCANCLKSOURCE_HSE HSE oscillator selected as FDCAN kernel clock 1891 * @arg @ref RCC_FDCANCLKSOURCE_PLL1Q PLL1Q Clock selected as FDCAN kernel clock 1892 * @arg @ref RCC_FDCANCLKSOURCE_PLL2Q PLL2Q Clock selected as FDCAN kernel clock 1893 */ 1894 #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_FDCANSEL))) 1895 1896 /** @brief Macro to configure the LPTIM1 clock (LPTIM1CLK). 1897 * 1898 * @param __LPTIM1_CLKSOURCE__ specifies the LPTIM1 clock source. 1899 * This parameter can be one of the following values: 1900 * @arg @ref RCC_LPTIM1CLKSOURCE_PCLK3 PCLK3 selected as LPTIM1 clock 1901 * @arg @ref RCC_LPTIM1CLKSOURCE_PLL2P PLL2P selected as LPTIM1 clock 1902 * @arg @ref RCC_LPTIM1CLKSOURCE_PLL3R PLL3R selected as LPTIM1 clock (*) 1903 * @arg @ref RCC_LPTIM1CLKSOURCE_LSE LSE selected as LPTIM1 clock 1904 * @arg @ref RCC_LPTIM1CLKSOURCE_LSI LSI selected as LPTIM1 clock 1905 * @arg @ref RCC_LPTIM1CLKSOURCE_CLKP CLKP selected as LPTIM1 clock 1906 * @retval None 1907 * 1908 * (*) : For stm32h56xxx and stm32h57xxx family lines. 1909 */ 1910 #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1_CLKSOURCE__) \ 1911 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM1SEL, (uint32_t)(__LPTIM1_CLKSOURCE__)) 1912 1913 /** @brief Macro to get the LPTIM1 clock source. 1914 * @retval The clock source can be one of the following values: 1915 * @arg @ref RCC_LPTIM1CLKSOURCE_PCLK3 PCLK3 selected as LPTIM1 clock 1916 * @arg @ref RCC_LPTIM1CLKSOURCE_PLL2P PLL2P selected as LPTIM1 clock 1917 * @arg @ref RCC_LPTIM1CLKSOURCE_PLL3R PLL3R selected as LPTIM1 clock (*) 1918 * @arg @ref RCC_LPTIM1CLKSOURCE_LSE LSE selected as LPTIM1 clock 1919 * @arg @ref RCC_LPTIM1CLKSOURCE_LSI LSI selected as LPTIM1 clock 1920 * @arg @ref RCC_LPTIM1CLKSOURCE_CLKP CLKP selected as LPTIM1 clock 1921 * 1922 * (*) : For stm32h56xxx and stm32h57xxx family lines. 1923 */ 1924 #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM1SEL))) 1925 1926 /** @brief Macro to configure the LPTIM2 clock (LPTIM2CLK). 1927 * 1928 * @param __LPTIM2_CLKSOURCE__ specifies the LPTIM2 clock source. 1929 * This parameter can be one of the following values: 1930 * @arg @ref RCC_LPTIM2CLKSOURCE_PCLK1 PCLK1 selected as LPTIM2 clock 1931 * @arg @ref RCC_LPTIM2CLKSOURCE_PLL2P PLL2P selected as LPTIM2 clock 1932 * @arg @ref RCC_LPTIM2CLKSOURCE_PLL3R PLL3R selected as LPTIM2 clock (*) 1933 * @arg @ref RCC_LPTIM2CLKSOURCE_LSE LSE selected as LPTIM2 clock 1934 * @arg @ref RCC_LPTIM2CLKSOURCE_LSI LSI selected as LPTIM2 clock 1935 * @arg @ref RCC_LPTIM2CLKSOURCE_CLKP CLKP selected as LPTIM2 clock 1936 * @retval None 1937 * 1938 * (*) : For stm32h56xxx and stm32h57xxx family lines. 1939 */ 1940 #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2_CLKSOURCE__) \ 1941 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM2SEL, (uint32_t)(__LPTIM2_CLKSOURCE__)) 1942 1943 /** @brief Macro to get the LPTIM2 clock source. 1944 * @retval The clock source can be one of the following values: 1945 * @arg @ref RCC_LPTIM2CLKSOURCE_PCLK1 PCLK1 selected as LPTIM2 clock 1946 * @arg @ref RCC_LPTIM2CLKSOURCE_PLL2P PLL2P selected as LPTIM2 clock 1947 * @arg @ref RCC_LPTIM2CLKSOURCE_PLL3R PLL3R selected as LPTIM2 clock (*) 1948 * @arg @ref RCC_LPTIM2CLKSOURCE_LSE LSE selected as LPTIM2 clock 1949 * @arg @ref RCC_LPTIM2CLKSOURCE_LSI LSI selected as LPTIM2 clock 1950 * @arg @ref RCC_LPTIM2CLKSOURCE_CLKP CLKP selected as LPTIM2 clock 1951 * 1952 * (*) : For stm32h56xxx and stm32h57xxx family lines. 1953 */ 1954 #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM2SEL))) 1955 1956 #if defined(LPTIM3) 1957 /** @brief Macro to configure the LPTIM3 clock (LPTIM3CLK). 1958 * 1959 * @param __LPTIM3_CLKSOURCE__ specifies the LPTIM3 clock source. 1960 * This parameter can be one of the following values: 1961 * @arg @ref RCC_LPTIM3CLKSOURCE_PCLK3 PCLK3 selected as LPTIM3 clock 1962 * @arg @ref RCC_LPTIM3CLKSOURCE_PLL2P PLL2P selected as LPTIM3 clock 1963 * @arg @ref RCC_LPTIM3CLKSOURCE_PLL3R PLL3R selected as LPTIM3 clock 1964 * @arg @ref RCC_LPTIM3CLKSOURCE_LSE LSE selected as LPTIM3 clock 1965 * @arg @ref RCC_LPTIM3CLKSOURCE_LSI LSI selected as LPTIM3 clock 1966 * @arg @ref RCC_LPTIM3CLKSOURCE_CLKP CLKP selected as LPTIM3 clock 1967 * @retval None 1968 */ 1969 #define __HAL_RCC_LPTIM3_CONFIG(__LPTIM3_CLKSOURCE__) \ 1970 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM3SEL, (uint32_t)(__LPTIM3_CLKSOURCE__)) 1971 1972 /** @brief Macro to get the LPTIM3 clock source. 1973 * @retval The clock source can be one of the following values: 1974 * @arg @ref RCC_LPTIM3CLKSOURCE_PCLK3 PCLK3 selected as LPTIM3 clock 1975 * @arg @ref RCC_LPTIM3CLKSOURCE_PLL2P PLL2P selected as LPTIM3 clock 1976 * @arg @ref RCC_LPTIM3CLKSOURCE_PLL3R PLL3R selected as LPTIM3 clock 1977 * @arg @ref RCC_LPTIM3CLKSOURCE_LSE LSE selected as LPTIM3 clock 1978 * @arg @ref RCC_LPTIM3CLKSOURCE_LSI LSI selected as LPTIM3 clock 1979 * @arg @ref RCC_LPTIM3CLKSOURCE_CLKP CLKP selected as LPTIM3 clock 1980 */ 1981 #define __HAL_RCC_GET_LPTIM3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM3SEL))) 1982 #endif /* LPTIM3 */ 1983 1984 #if defined(LPTIM4) 1985 /** @brief Macro to configure the LPTIM4 clock (LPTIM4CLK). 1986 * 1987 * @param __LPTIM4_CLKSOURCE__ specifies the LPTIM4 clock source. 1988 * This parameter can be one of the following values: 1989 * @arg @ref RCC_LPTIM4CLKSOURCE_PCLK3 PCLK3 selected as LPTIM4 clock 1990 * @arg @ref RCC_LPTIM4CLKSOURCE_PLL2P PLL2P selected as LPTIM4 clock 1991 * @arg @ref RCC_LPTIM4CLKSOURCE_PLL3R PLL3R selected as LPTIM4 clock 1992 * @arg @ref RCC_LPTIM4CLKSOURCE_LSE LSE selected as LPTIM4 clock 1993 * @arg @ref RCC_LPTIM4CLKSOURCE_LSI LSI selected as LPTIM4 clock 1994 * @arg @ref RCC_LPTIM4CLKSOURCE_CLKP CLKP selected as LPTIM4 clock 1995 * @retval None 1996 */ 1997 #define __HAL_RCC_LPTIM4_CONFIG(__LPTIM4_CLKSOURCE__) \ 1998 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM4SEL, (uint32_t)(__LPTIM4_CLKSOURCE__)) 1999 2000 /** @brief Macro to get the LPTIM4 clock source. 2001 * @retval The clock source can be one of the following values: 2002 * @arg @ref RCC_LPTIM4CLKSOURCE_PCLK3 PCLK3 selected as LPTIM4 clock 2003 * @arg @ref RCC_LPTIM4CLKSOURCE_PLL2P PLL2P selected as LPTIM4 clock 2004 * @arg @ref RCC_LPTIM4CLKSOURCE_PLL3R PLL3R selected as LPTIM4 clock 2005 * @arg @ref RCC_LPTIM4CLKSOURCE_LSE LSE selected as LPTIM4 clock 2006 * @arg @ref RCC_LPTIM4CLKSOURCE_LSI LSI selected as LPTIM4 clock 2007 * @arg @ref RCC_LPTIM4CLKSOURCE_CLKP CLKP selected as LPTIM4 clock 2008 */ 2009 #define __HAL_RCC_GET_LPTIM4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM4SEL))) 2010 #endif /* LPTIM4 */ 2011 2012 #if defined(LPTIM5) 2013 /** @brief Macro to configure the LPTIM5 clock (LPTIM5CLK). 2014 * 2015 * @param __LPTIM5_CLKSOURCE__ specifies the LPTIM5 clock source. 2016 * This parameter can be one of the following values: 2017 * @arg @ref RCC_LPTIM5CLKSOURCE_PCLK3 PCLK3 selected as LPTIM5 clock 2018 * @arg @ref RCC_LPTIM5CLKSOURCE_PLL2P PLL2P selected as LPTIM5 clock 2019 * @arg @ref RCC_LPTIM5CLKSOURCE_PLL3R PLL3R selected as LPTIM5 clock 2020 * @arg @ref RCC_LPTIM5CLKSOURCE_LSE LSE selected as LPTIM5 clock 2021 * @arg @ref RCC_LPTIM5CLKSOURCE_LSI LSI selected as LPTIM5 clock 2022 * @arg @ref RCC_LPTIM5CLKSOURCE_CLKP CLKP selected as LPTIM5 clock 2023 * @retval None 2024 */ 2025 #define __HAL_RCC_LPTIM5_CONFIG(__LPTIM5_CLKSOURCE__) \ 2026 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM5SEL, (uint32_t)(__LPTIM5_CLKSOURCE__)) 2027 2028 /** @brief Macro to get the LPTIM5 clock source. 2029 * @retval The clock source can be one of the following values: 2030 * @arg @ref RCC_LPTIM5CLKSOURCE_PCLK3 PCLK3 selected as LPTIM5 clock 2031 * @arg @ref RCC_LPTIM5CLKSOURCE_PLL2P PLL2P selected as LPTIM5 clock 2032 * @arg @ref RCC_LPTIM5CLKSOURCE_PLL3R PLL3R selected as LPTIM5 clock 2033 * @arg @ref RCC_LPTIM5CLKSOURCE_LSE LSE selected as LPTIM5 clock 2034 * @arg @ref RCC_LPTIM5CLKSOURCE_LSI LSI selected as LPTIM5 clock 2035 * @arg @ref RCC_LPTIM5CLKSOURCE_CLKP CLKP selected as LPTIM5 clock 2036 */ 2037 #define __HAL_RCC_GET_LPTIM5_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM5SEL))) 2038 #endif /* LPTIM5 */ 2039 2040 #if defined(LPTIM6) 2041 /** @brief Macro to configure the LPTIM6 clock (LPTIM6CLK). 2042 * 2043 * @param __LPTIM6_CLKSOURCE__ specifies the LPTIM6 clock source. 2044 * This parameter can be one of the following values: 2045 * @arg @ref RCC_LPTIM6CLKSOURCE_PCLK3 PCLK3 selected as LPTIM6 clock 2046 * @arg @ref RCC_LPTIM6CLKSOURCE_PLL2P PLL2P selected as LPTIM6 clock 2047 * @arg @ref RCC_LPTIM6CLKSOURCE_PLL3R PLL3R selected as LPTIM6 clock 2048 * @arg @ref RCC_LPTIM6CLKSOURCE_LSE LSE selected as LPTIM6 clock 2049 * @arg @ref RCC_LPTIM6CLKSOURCE_LSI LSI selected as LPTIM6 clock 2050 * @arg @ref RCC_LPTIM6CLKSOURCE_CLKP CLKP selected as LPTIM6 clock 2051 * @retval None 2052 */ 2053 #define __HAL_RCC_LPTIM6_CONFIG(__LPTIM6_CLKSOURCE__) \ 2054 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_LPTIM6SEL, (uint32_t)(__LPTIM6_CLKSOURCE__)) 2055 2056 /** @brief Macro to get the LPTIM6 clock source. 2057 * @retval The clock source can be one of the following values: 2058 * @arg @ref RCC_LPTIM6CLKSOURCE_PCLK3 PCLK3 selected as LPTIM6 clock 2059 * @arg @ref RCC_LPTIM6CLKSOURCE_PLL2P PLL2P selected as LPTIM6 clock 2060 * @arg @ref RCC_LPTIM6CLKSOURCE_PLL3R PLL3R selected as LPTIM6 clock 2061 * @arg @ref RCC_LPTIM6CLKSOURCE_LSE LSE selected as LPTIM6 clock 2062 * @arg @ref RCC_LPTIM6CLKSOURCE_LSI LSI selected as LPTIM6 clock 2063 * @arg @ref RCC_LPTIM6CLKSOURCE_CLKP CLKP selected as LPTIM6 clock 2064 */ 2065 #define __HAL_RCC_GET_LPTIM6_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_LPTIM6SEL))) 2066 #endif /* LPTIM6 */ 2067 2068 /** @brief macro to configure the SPI1 clock source. 2069 * @retval The clock source can be one of the following values: 2070 * @arg RCC_SPI1CLKSOURCE_PLL1Q PLL1Q selected as SPI1 clock 2071 * @arg RCC_SPI1CLKSOURCE_PLL2P PLL2P selected as SPI1 clock 2072 * @arg RCC_SPI1CLKSOURCE_PLL3P PLL3P selected as SPI1 clock (*) 2073 * @arg RCC_SPI1CLKSOURCE_PIN External Clock selected as SPI1 clock 2074 * @arg RCC_SPI1CLKSOURCE_CLKP CLKP selected as SPI1 clock 2075 * 2076 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2077 */ 2078 #define __HAL_RCC_SPI1_CONFIG(__SPI1CLKSource__) \ 2079 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI1SEL, (uint32_t)(__SPI1CLKSource__)) 2080 2081 /** @brief macro to get the SPI1 clock source. 2082 * @retval The clock source can be one of the following values: 2083 * @arg RCC_SPI1CLKSOURCE_PLL1Q PLL1Q selected as SPI1 clock 2084 * @arg RCC_SPI1CLKSOURCE_PLL2P PLL2P selected as SPI1 clock 2085 * @arg RCC_SPI1CLKSOURCE_PLL3P PLL3P selected as SPI1 clock (*) 2086 * @arg RCC_SPI1CLKSOURCE_PIN External Clock selected as SPI1 clock 2087 * @arg RCC_SPI1CLKSOURCE_CLKP CLKP selected as SPI1 clock 2088 * 2089 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2090 */ 2091 #define __HAL_RCC_GET_SPI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI1SEL))) 2092 2093 /** @brief macro to configure the SPI2 clock source. 2094 * @retval The clock source can be one of the following values: 2095 * @arg RCC_SPI2CLKSOURCE_PLL1Q PLL1Q selected as SPI2 clock 2096 * @arg RCC_SPI2CLKSOURCE_PLL2P PLL2P selected as SPI2 clock 2097 * @arg RCC_SPI2CLKSOURCE_PLL3P PLL3P selected as SPI2 clock (*) 2098 * @arg RCC_SPI2CLKSOURCE_PIN External Clock selected as SPI2 clock 2099 * @arg RCC_SPI2CLKSOURCE_CLKP CLKP selected as SPI2 clock 2100 * 2101 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2102 */ 2103 #define __HAL_RCC_SPI2_CONFIG(__SPI2CLKSource__) \ 2104 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI2SEL, (uint32_t)(__SPI2CLKSource__)) 2105 2106 /** @brief macro to get the SPI2 clock source. 2107 * @retval The clock source can be one of the following values: 2108 * @arg RCC_SPI2CLKSOURCE_PLL1Q PLL1Q selected as SPI2 clock 2109 * @arg RCC_SPI2CLKSOURCE_PLL2P PLL2P selected as SPI2 clock 2110 * @arg RCC_SPI2CLKSOURCE_PLL3P PLL3P selected as SPI2 clock (*) 2111 * @arg RCC_SPI2CLKSOURCE_PIN External Clock selected as SPI2 clock 2112 * @arg RCC_SPI2CLKSOURCE_CLKP CLKP selected as SPI2 clock 2113 * 2114 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2115 */ 2116 #define __HAL_RCC_GET_SPI2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI2SEL))) 2117 2118 /** @brief macro to configure the SPI3 clock source. 2119 * @retval The clock source can be one of the following values: 2120 * @arg RCC_SPI3CLKSOURCE_PLL1Q PLL1Q used as SPI3 clock 2121 * @arg RCC_SPI3CLKSOURCE_PLL2P PLL2P used as SPI3 clock 2122 * @arg RCC_SPI3CLKSOURCE_PLL3P PLL3P used as SPI3 clock (*) 2123 * @arg RCC_SPI3CLKSOURCE_PIN External Clock used as SPI3 clock 2124 * @arg RCC_SPI3CLKSOURCE_CLKP CLKP used as SPI3 clock 2125 * 2126 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2127 */ 2128 #define __HAL_RCC_SPI3_CONFIG(__SPI3CLKSource__) \ 2129 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI3SEL, (uint32_t)(__SPI3CLKSource__)) 2130 2131 /** @brief macro to get the SPI3 clock source. 2132 * @retval The clock source can be one of the following values: 2133 * @arg RCC_SPI3CLKSOURCE_PLL1Q PLL1Q used as SPI3 clock 2134 * @arg RCC_SPI3CLKSOURCE_PLL2P PLL2P used as SPI3 clock 2135 * @arg RCC_SPI3CLKSOURCE_PLL3P PLL3P used as SPI3 clock (*) 2136 * @arg RCC_SPI3CLKSOURCE_PIN External Clock used as SPI3 clock 2137 * @arg RCC_SPI3CLKSOURCE_CLKP CLKP used as SPI3 clock 2138 * 2139 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2140 */ 2141 #define __HAL_RCC_GET_SPI3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI3SEL))) 2142 2143 #if defined(SPI4) 2144 /** @brief macro to configure the SPI4 clock source. 2145 * @retval The clock source can be one of the following values: 2146 * @arg RCC_SPI4CLKSOURCE_PCLK2 PCLK2 used as SPI4 clock 2147 * @arg RCC_SPI4CLKSOURCE_PLL2Q PLL2Q used as SPI4 clock 2148 * @arg RCC_SPI4CLKSOURCE_PLL3Q PLL3Q used as SPI4 clock 2149 * @arg RCC_SPI4CLKSOURCE_HSI HSI used as SPI4 clock 2150 * @arg RCC_SPI4CLKSOURCE_CSI CSI Clock used as SPI4 clock 2151 * @arg RCC_SPI4CLKSOURCE_HSE HSE Clock used as SPI4 clock 2152 */ 2153 #define __HAL_RCC_SPI4_CONFIG(__SPI4CLKSource__) \ 2154 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI4SEL, (uint32_t)(__SPI4CLKSource__)) 2155 2156 /** @brief macro to get the SPI4 clock source. 2157 * @retval The clock source can be one of the following values: 2158 * @arg RCC_SPI4CLKSOURCE_PCLK2 PCLK2 used as SPI4 clock 2159 * @arg RCC_SPI4CLKSOURCE_PLL2Q PLL2Q used as SPI4 clock 2160 * @arg RCC_SPI4CLKSOURCE_PLL3Q PLL3Q used as SPI4 clock 2161 * @arg RCC_SPI4CLKSOURCE_HSI HSI used as SPI4 clock 2162 * @arg RCC_SPI4CLKSOURCE_CSI CSI used as SPI4 clock 2163 * @arg RCC_SPI4CLKSOURCE_HSE HSE used as SPI4 clock 2164 */ 2165 #define __HAL_RCC_GET_SPI4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI4SEL))) 2166 #endif /* SPI4 */ 2167 2168 #if defined(SPI5) 2169 /** @brief macro to configure the SPI5 clock source. 2170 * @retval The clock source can be one of the following values: 2171 * @arg RCC_SPI5CLKSOURCE_PCLK3 PCLK3 used as SPI5 clock 2172 * @arg RCC_SPI5CLKSOURCE_PLL2Q PLL2Q used as SPI5 clock 2173 * @arg RCC_SPI5CLKSOURCE_PLL3Q PLL3Q used as SPI5 clock 2174 * @arg RCC_SPI5CLKSOURCE_HSI HSI used as SPI5 clock 2175 * @arg RCC_SPI5CLKSOURCE_CSI CSI Clock used as SPI5 clock 2176 * @arg RCC_SPI5CLKSOURCE_HSE HSE Clock used as SPI5 clock 2177 */ 2178 #define __HAL_RCC_SPI5_CONFIG(__SPI5CLKSource__) \ 2179 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI5SEL, (uint32_t)(__SPI5CLKSource__)) 2180 2181 /** @brief macro to get the SPI5 clock source. 2182 * @retval The clock source can be one of the following values: 2183 * @arg RCC_SPI5CLKSOURCE_PCLK3 PCLK3 used as SPI5 clock 2184 * @arg RCC_SPI5CLKSOURCE_PLL2Q PLL2Q used as SPI5 clock 2185 * @arg RCC_SPI5CLKSOURCE_PLL3Q PLL3Q used as SPI5 clock 2186 * @arg RCC_SPI5CLKSOURCE_HSI HSI used as SPI5 clock 2187 * @arg RCC_SPI5CLKSOURCE_CSI CSI used as SPI5 clock 2188 * @arg RCC_SPI5CLKSOURCE_HSE HSE used as SPI5 clock 2189 */ 2190 #define __HAL_RCC_GET_SPI5_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI5SEL))) 2191 #endif /* SPI5 */ 2192 2193 #if defined(SPI6) 2194 /** @brief macro to configure the SPI6 clock source. 2195 * @retval The clock source can be one of the following values: 2196 * @arg RCC_SPI6CLKSOURCE_PCLK2 PCLK2 used as SPI6 clock 2197 * @arg RCC_SPI6CLKSOURCE_PLL2Q PLL2Q used as SPI6 clock 2198 * @arg RCC_SPI6CLKSOURCE_PLL3Q PLL3Q used as SPI6 clock 2199 * @arg RCC_SPI6CLKSOURCE_HSI HSI used as SPI6 clock 2200 * @arg RCC_SPI6CLKSOURCE_CSI CSI used as SPI6 clock 2201 * @arg RCC_SPI6CLKSOURCE_HSE HSE used as SPI6 clock 2202 */ 2203 #define __HAL_RCC_SPI6_CONFIG(__SPI6CLKSource__) \ 2204 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_SPI6SEL, (uint32_t)(__SPI6CLKSource__)) 2205 2206 /** @brief macro to get the SPI6 clock source. 2207 * @retval The clock source can be one of the following values: 2208 * @arg RCC_SPI6CLKSOURCE_PCLK2 PCLK2 used as SPI6 clock 2209 * @arg RCC_SPI6CLKSOURCE_PLL2Q PLL2Q used as SPI6 clock 2210 * @arg RCC_SPI6CLKSOURCE_PLL3Q PLL3Q used as SPI6 clock 2211 * @arg RCC_SPI6CLKSOURCE_HSI HSI used as SPI6 clock 2212 * @arg RCC_SPI6CLKSOURCE_CSI CSI used as SPI6 clock 2213 * @arg RCC_SPI6CLKSOURCE_HSE HSE used as SPI6 clock 2214 */ 2215 #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_SPI6SEL))) 2216 #endif /* SPI6 */ 2217 2218 /** @brief Macro to configure the I2C1 clock (I2C1CLK). 2219 * 2220 * @param __I2C1_CLKSOURCE__ specifies the I2C1 clock source. 2221 * This parameter can be one of the following values: 2222 * @arg @ref RCC_I2C1CLKSOURCE_PCLK1 PCLK1 selected as I2C1 clock 2223 * @arg @ref RCC_I2C1CLKSOURCE_PLL3R PLL3R selected as I2C1 clock (*) 2224 * @arg @ref RCC_I2C1CLKSOURCE_PLL2R PLL2R selected as I2C1 clock (**) 2225 * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock 2226 * @arg @ref RCC_I2C1CLKSOURCE_CSI CSI selected as I2C1 clock 2227 * @retval None 2228 * 2229 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2230 * (**) : For stm32h503xx family line. 2231 */ 2232 #define __HAL_RCC_I2C1_CONFIG(__I2C1_CLKSOURCE__) \ 2233 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I2C1SEL, (uint32_t)(__I2C1_CLKSOURCE__)) 2234 2235 /** @brief Macro to get the I2C1 clock source. 2236 * @retval The clock source can be one of the following values: 2237 * @arg @ref RCC_I2C1CLKSOURCE_PCLK1 PCLK1 selected as I2C1 clock 2238 * @arg @ref RCC_I2C1CLKSOURCE_PLL3R PLL3R selected as I2C1 clock (*) 2239 * @arg @ref RCC_I2C1CLKSOURCE_PLL2R PLL2R selected as I2C1 clock (**) 2240 * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock 2241 * @arg @ref RCC_I2C1CLKSOURCE_CSI CSI selected as I2C1 clock 2242 * 2243 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2244 * (**) : For stm32h503xx family line. 2245 */ 2246 #define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I2C1SEL))) 2247 2248 /** @brief Macro to configure the I2C2 clock (I2C2CLK). 2249 * 2250 * @param __I2C2_CLKSOURCE__ specifies the I2C2 clock source. 2251 * This parameter can be one of the following values: 2252 * @arg @ref RCC_I2C2CLKSOURCE_PCLK1 PCLK1 selected as I2C2 clock 2253 * @arg @ref RCC_I2C2CLKSOURCE_PLL3R PLL3R selected as I2C2 clock (*) 2254 * @arg @ref RCC_I2C2CLKSOURCE_PLL2R PLL2R selected as I2C2 clock (**) 2255 * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock 2256 * @arg @ref RCC_I2C2CLKSOURCE_CSI CSI selected as I2C2 clock 2257 * @retval None 2258 * 2259 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2260 * (**) : For stm32h503xx family line. 2261 */ 2262 #define __HAL_RCC_I2C2_CONFIG(__I2C2_CLKSOURCE__) \ 2263 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I2C2SEL, (uint32_t)(__I2C2_CLKSOURCE__)) 2264 2265 /** @brief Macro to get the I2C2 clock source. 2266 * @retval The clock source can be one of the following values: 2267 * @arg @ref RCC_I2C2CLKSOURCE_PCLK1 PCLK1 selected as I2C2 clock 2268 * @arg @ref RCC_I2C2CLKSOURCE_PLL3R PLL3R selected as I2C2 clock (*) 2269 * @arg @ref RCC_I2C2CLKSOURCE_PLL2R PLL2R selected as I2C2 clock (**) 2270 * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock 2271 * @arg @ref RCC_I2C2CLKSOURCE_CSI CSI selected as I2C2 clock 2272 * 2273 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2274 * (**) : For stm32h503xx family line. 2275 */ 2276 #define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I2C2SEL))) 2277 2278 #if defined(I2C3) 2279 /** @brief Macro to configure the I2C3 clock (I2C3CLK). 2280 * 2281 * @param __I2C3_CLKSOURCE__ specifies the I2C3 clock source. 2282 * This parameter can be one of the following values: 2283 * @arg @ref RCC_I2C3CLKSOURCE_PCLK3 PCLK3 selected as I2C3 clock 2284 * @arg @ref RCC_I2C3CLKSOURCE_PLL3R PLL3R selected as I2C3 clock 2285 * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock 2286 * @arg @ref RCC_I2C3CLKSOURCE_CSI CSI selected as I2C3 clock 2287 * @retval None 2288 */ 2289 #define __HAL_RCC_I2C3_CONFIG(__I2C3_CLKSOURCE__) \ 2290 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I2C3SEL, (uint32_t)(__I2C3_CLKSOURCE__)) 2291 2292 /** @brief Macro to get the I2C3 clock source. 2293 * @retval The clock source can be one of the following values: 2294 * @arg @ref RCC_I2C3CLKSOURCE_PCLK3 PCLK3 selected as I2C3 clock 2295 * @arg @ref RCC_I2C3CLKSOURCE_PLL3R PLL3R selected as I2C3 clock 2296 * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock 2297 * @arg @ref RCC_I2C3CLKSOURCE_CSI CSI selected as I2C3 clock 2298 */ 2299 #define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I2C3SEL))) 2300 #endif /* I2C3 */ 2301 2302 #if defined(I2C4) 2303 /** @brief Macro to configure the I2C4 clock (I2C4CLK). 2304 * 2305 * @param __I2C4_CLKSOURCE__ specifies the I2C4 clock source. 2306 * This parameter can be one of the following values: 2307 * @arg @ref RCC_I2C4CLKSOURCE_PCLK3 PCLK3 selected as I2C4 clock 2308 * @arg @ref RCC_I2C4CLKSOURCE_PLL3R PLL3R selected as I2C4 clock 2309 * @arg @ref RCC_I2C4CLKSOURCE_HSI HSI selected as I2C4 clock 2310 * @arg @ref RCC_I2C4CLKSOURCE_CSI CSI selected as I2C4 clock 2311 * @retval None 2312 */ 2313 #define __HAL_RCC_I2C4_CONFIG(__I2C4_CLKSOURCE__) \ 2314 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I2C4SEL, (uint32_t)(__I2C4_CLKSOURCE__)) 2315 2316 /** @brief Macro to get the I2C4 clock source. 2317 * @retval The clock source can be one of the following values: 2318 * @arg @ref RCC_I2C4CLKSOURCE_PCLK3 PCLK3 selected as I2C4 clock 2319 * @arg @ref RCC_I2C4CLKSOURCE_PLL3R PLL3R selected as I2C4 clock 2320 * @arg @ref RCC_I2C4CLKSOURCE_HSI HSI selected as I2C4 clock 2321 * @arg @ref RCC_I2C4CLKSOURCE_CSI CSI selected as I2C4 clock 2322 */ 2323 #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I2C4SEL))) 2324 #endif /* I2C4 */ 2325 2326 /** @brief Macro to configure the I3C1 clock (I3C1CLK). 2327 * 2328 * @param __I3C1_CLKSOURCE__ specifies the I3C1 clock source. 2329 * This parameter can be one of the following values: 2330 * @arg @ref RCC_I3C1CLKSOURCE_PCLK1 PCLK1 selected as I3C1 clock 2331 * @arg @ref RCC_I3C1CLKSOURCE_PLL3R PLL3R selected as I3C1 clock (*) 2332 * @arg @ref RCC_I3C1CLKSOURCE_PLL2R PLL2R selected as I3C1 clock (**) 2333 * @arg @ref RCC_I3C1CLKSOURCE_HSI HSI selected as I3C1 clock 2334 * @retval None 2335 * 2336 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2337 * (**) : For stm32h503xx family line. 2338 */ 2339 #define __HAL_RCC_I3C1_CONFIG(__I3C1_CLKSOURCE__) \ 2340 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I3C1SEL, (uint32_t)(__I3C1_CLKSOURCE__)) 2341 2342 /** @brief Macro to get the I3C1 clock source. 2343 * @retval The clock source can be one of the following values: 2344 * @arg @ref RCC_I3C1CLKSOURCE_PCLK1 PCLK1 selected as I3C1 clock 2345 * @arg @ref RCC_I3C1CLKSOURCE_PLL3R PLL3R selected as I3C1 clock (*) 2346 * @arg @ref RCC_I3C1CLKSOURCE_PLL2R PLL2R selected as I3C1 clock (**) 2347 * @arg @ref RCC_I3C1CLKSOURCE_HSI HSI selected as I3C1 clock 2348 * 2349 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2350 * (**) : For stm32h503xx family line. 2351 */ 2352 #define __HAL_RCC_GET_I3C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I3C1SEL))) 2353 2354 #if defined(I3C2) 2355 /** @brief Macro to configure the I3C2 clock (I3C2CLK). 2356 * 2357 * @param __I3C2_CLKSOURCE__ specifies the I3C2 clock source. 2358 * This parameter can be one of the following values: 2359 * @arg @ref RCC_I3C2CLKSOURCE_PCLK3 PCLK3 selected as I3C2 clock 2360 * @arg @ref RCC_I3C2CLKSOURCE_PLL2R PLL2R selected as I3C2 clock 2361 * @arg @ref RCC_I3C2CLKSOURCE_HSI HSI selected as I3C2 clock 2362 * @retval None 2363 */ 2364 #define __HAL_RCC_I3C2_CONFIG(__I3C2_CLKSOURCE__) \ 2365 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_I3C2SEL, (uint32_t)(__I3C2_CLKSOURCE__)) 2366 2367 /** @brief Macro to get the I3C2 clock source. 2368 * @retval The clock source can be one of the following values: 2369 * @arg @ref RCC_I3C2CLKSOURCE_PCLK3 PCLK3 selected as I3C2 clock 2370 * @arg @ref RCC_I3C2CLKSOURCE_PLL2R PLL2R selected as I3C2 clock 2371 * @arg @ref RCC_I3C2CLKSOURCE_HSI HSI selected as I3C2 clock 2372 */ 2373 #define __HAL_RCC_GET_I3C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_I3C2SEL))) 2374 #endif /* I3C2 */ 2375 2376 /** @brief Macro to configure the USART1 clock (USART1CLK). 2377 * 2378 * @param __USART1_CLKSOURCE__ specifies the USART1 clock source. 2379 * This parameter can be one of the following values: 2380 * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock 2381 * @arg @ref RCC_USART1CLKSOURCE_PLL2Q PLL2Q selected as USART1 clock 2382 * @arg @ref RCC_USART1CLKSOURCE_PLL3Q PLL3Q selected as USART1 clock (*) 2383 * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock 2384 * @arg @ref RCC_USART1CLKSOURCE_CSI CSI selected as USART1 clock 2385 * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock 2386 * @retval None 2387 * 2388 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2389 */ 2390 #define __HAL_RCC_USART1_CONFIG(__USART1_CLKSOURCE__) \ 2391 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_USART1SEL, (uint32_t)(__USART1_CLKSOURCE__)) 2392 2393 /** @brief Macro to get the USART1 clock source. 2394 * @retval The clock source can be one of the following values: 2395 * @arg @ref RCC_USART1CLKSOURCE_PCLK2 PCLK2 selected as USART1 clock 2396 * @arg @ref RCC_USART1CLKSOURCE_PLL2Q PLL2Q selected as USART1 clock 2397 * @arg @ref RCC_USART1CLKSOURCE_PLL3Q PLL3Q selected as USART1 clock (*) 2398 * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock 2399 * @arg @ref RCC_USART1CLKSOURCE_CSI CSI selected as USART1 clock 2400 * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock 2401 * 2402 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2403 */ 2404 #define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_USART1SEL))) 2405 2406 /** @brief Macro to configure the USART2 clock (USART2CLK). 2407 * 2408 * @param __USART2_CLKSOURCE__ specifies the USART2 clock source. 2409 * This parameter can be one of the following values: 2410 * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK2 selected as USART2 clock 2411 * @arg @ref RCC_USART2CLKSOURCE_PLL2Q PLL2Q selected as USART2 clock 2412 * @arg @ref RCC_USART2CLKSOURCE_PLL3Q PLL3Q selected as USART2 clock (*) 2413 * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock 2414 * @arg @ref RCC_USART2CLKSOURCE_CSI CSI selected as USART2 clock 2415 * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock 2416 * @retval None 2417 * 2418 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2419 */ 2420 #define __HAL_RCC_USART2_CONFIG(__USART2_CLKSOURCE__) \ 2421 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_USART2SEL, (uint32_t)(__USART2_CLKSOURCE__)) 2422 2423 /** @brief Macro to get the USART2 clock source. 2424 * @retval The clock source can be one of the following values: 2425 * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK2 selected as USART2 clock 2426 * @arg @ref RCC_USART2CLKSOURCE_PLL2Q PLL2Q selected as USART2 clock 2427 * @arg @ref RCC_USART2CLKSOURCE_PLL3Q PLL3Q selected as USART2 clock (*) 2428 * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock 2429 * @arg @ref RCC_USART2CLKSOURCE_CSI CSI selected as USART2 clock 2430 * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock 2431 * 2432 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2433 */ 2434 #define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_USART2SEL))) 2435 2436 /** @brief Macro to configure the USART3 clock (USART3CLK). 2437 * 2438 * @param __USART3_CLKSOURCE__ specifies the USART3 clock source. 2439 * This parameter can be one of the following values: 2440 * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK2 selected as USART3 clock 2441 * @arg @ref RCC_USART3CLKSOURCE_PLL2Q PLL2Q selected as USART3 clock 2442 * @arg @ref RCC_USART3CLKSOURCE_PLL3Q PLL3Q selected as USART3 clock (*) 2443 * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock 2444 * @arg @ref RCC_USART3CLKSOURCE_CSI CSI selected as USART3 clock 2445 * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock 2446 * @retval None 2447 * 2448 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2449 */ 2450 #define __HAL_RCC_USART3_CONFIG(__USART3_CLKSOURCE__) \ 2451 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_USART3SEL, (uint32_t)(__USART3_CLKSOURCE__)) 2452 2453 /** @brief Macro to get the USART3 clock source. 2454 * @retval The clock source can be one of the following values: 2455 * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK2 selected as USART3 clock 2456 * @arg @ref RCC_USART3CLKSOURCE_PLL2Q PLL2Q selected as USART3 clock 2457 * @arg @ref RCC_USART3CLKSOURCE_PLL3Q PLL3Q selected as USART3 clock (*) 2458 * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock 2459 * @arg @ref RCC_USART3CLKSOURCE_CSI CSI selected as USART3 clock 2460 * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock 2461 * 2462 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2463 */ 2464 #define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_USART3SEL))) 2465 2466 #if defined(UART4) 2467 /** @brief Macro to configure the UART4 clock (UART4CLK). 2468 * 2469 * @param __UART4_CLKSOURCE__ specifies the UART4 clock source. 2470 * This parameter can be one of the following values: 2471 * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock 2472 * @arg @ref RCC_UART4CLKSOURCE_PLL2Q PLL2Q Clock selected as UART4 clock 2473 * @arg @ref RCC_UART4CLKSOURCE_PLL3Q PLL3Q Clock selected as UART4 clock 2474 * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock 2475 * @arg @ref RCC_UART4CLKSOURCE_CSI CSI selected as UART4 clock 2476 * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock 2477 * @retval None 2478 */ 2479 #define __HAL_RCC_UART4_CONFIG(__UART4_CLKSOURCE__) \ 2480 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_UART4SEL, (uint32_t)(__UART4_CLKSOURCE__)) 2481 2482 /** @brief Macro to get the UART4 clock source. 2483 * @retval The clock source can be one of the following values: 2484 * @arg @ref RCC_UART4CLKSOURCE_PCLK1 PCLK1 selected as UART4 clock 2485 * @arg @ref RCC_UART4CLKSOURCE_PLL2Q PLL2Q Clock selected as UART4 clock 2486 * @arg @ref RCC_UART4CLKSOURCE_PLL3Q PLL3Q Clock selected as UART4 clock 2487 * @arg @ref RCC_UART4CLKSOURCE_HSI HSI selected as UART4 clock 2488 * @arg @ref RCC_UART4CLKSOURCE_CSI CSI selected as UART4 clock 2489 * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock 2490 */ 2491 #define __HAL_RCC_GET_UART4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_UART4SEL))) 2492 #endif /* UART4 */ 2493 2494 #if defined(UART5) 2495 /** @brief Macro to configure the UART5 clock (UART5CLK). 2496 * 2497 * @param __UART5_CLKSOURCE__ specifies the UART5 clock source. 2498 * This parameter can be one of the following values: 2499 * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock 2500 * @arg @ref RCC_UART5CLKSOURCE_PLL2Q PLL2Q Clock selected as UART5 clock 2501 * @arg @ref RCC_UART5CLKSOURCE_PLL3Q PLL3Q Clock selected as UART5 clock 2502 * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock 2503 * @arg @ref RCC_UART5CLKSOURCE_CSI CSI selected as UART5 clock 2504 * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock 2505 * @retval None 2506 */ 2507 #define __HAL_RCC_UART5_CONFIG(__UART5_CLKSOURCE__) \ 2508 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_UART5SEL, (uint32_t)(__UART5_CLKSOURCE__)) 2509 2510 /** @brief Macro to get the UART5 clock source. 2511 * @retval The clock source can be one of the following values: 2512 * @arg @ref RCC_UART5CLKSOURCE_PCLK1 PCLK1 selected as UART5 clock 2513 * @arg @ref RCC_UART5CLKSOURCE_PLL2Q PLL2Q Clock selected as UART5 clock 2514 * @arg @ref RCC_UART5CLKSOURCE_PLL3Q PLL3Q Clock selected as UART5 clock 2515 * @arg @ref RCC_UART5CLKSOURCE_HSI HSI selected as UART5 clock 2516 * @arg @ref RCC_UART5CLKSOURCE_CSI CSI selected as UART5 clock 2517 * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock 2518 */ 2519 #define __HAL_RCC_GET_UART5_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_UART5SEL))) 2520 #endif /* UART5 */ 2521 2522 #if defined(USART6) 2523 /** @brief Macro to configure the USART6 clock (USART6CLK). 2524 * 2525 * @param __USART6_CLKSOURCE__ specifies the USART6 clock source. 2526 * This parameter can be one of the following values: 2527 * @arg @ref RCC_USART6CLKSOURCE_PCLK1 PCLK2 selected as USART6 clock 2528 * @arg @ref RCC_USART6CLKSOURCE_PLL2Q PLL2Q selected as USART6 clock 2529 * @arg @ref RCC_USART6CLKSOURCE_PLL3Q PLL3Q selected as USART6 clock 2530 * @arg @ref RCC_USART6CLKSOURCE_HSI HSI selected as USART6 clock 2531 * @arg @ref RCC_USART6CLKSOURCE_CSI CSI selected as USART6 clock 2532 * @arg @ref RCC_USART6CLKSOURCE_LSE LSE selected as USART6 clock 2533 * @retval None 2534 */ 2535 #define __HAL_RCC_USART6_CONFIG(__USART6_CLKSOURCE__) \ 2536 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_USART6SEL, (uint32_t)(__USART6_CLKSOURCE__)) 2537 2538 /** @brief Macro to get the USART6 clock source. 2539 * @retval The clock source can be one of the following values: 2540 * @arg @ref RCC_USART6CLKSOURCE_PCLK1 PCLK1 selected as USART6 clock 2541 * @arg @ref RCC_USART6CLKSOURCE_PLL2Q PLL2Q selected as USART6 clock 2542 * @arg @ref RCC_USART6CLKSOURCE_PLL3Q PLL3Q selected as USART6 clock 2543 * @arg @ref RCC_USART6CLKSOURCE_HSI HSI selected as USART6 clock 2544 * @arg @ref RCC_USART6CLKSOURCE_CSI CSI selected as USART6 clock 2545 * @arg @ref RCC_USART6CLKSOURCE_LSE LSE selected as USART6 clock 2546 */ 2547 #define __HAL_RCC_GET_USART6_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_USART6SEL))) 2548 #endif /* USART6 */ 2549 2550 #if defined(UART7) 2551 /** @brief Macro to configure the UART7 clock (UART7CLK). 2552 * 2553 * @param __UART7_CLKSOURCE__ specifies the UART7 clock source. 2554 * This parameter can be one of the following values: 2555 * @arg @ref RCC_UART7CLKSOURCE_PCLK1 PCLK1 selected as UART7 clock 2556 * @arg @ref RCC_UART7CLKSOURCE_PLL2Q PLL2Q selected as UART7 clock 2557 * @arg @ref RCC_UART7CLKSOURCE_PLL3Q PLL3Q selected as UART7 clock 2558 * @arg @ref RCC_UART7CLKSOURCE_HSI HSI selected as UART7 clock 2559 * @arg @ref RCC_UART7CLKSOURCE_CSI CSI selected as UART7 clock 2560 * @arg @ref RCC_UART7CLKSOURCE_LSE LSE selected as UART7 clock 2561 * @retval None 2562 */ 2563 #define __HAL_RCC_UART7_CONFIG(__UART7_CLKSOURCE__) \ 2564 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_UART7SEL, (uint32_t)(__UART7_CLKSOURCE__)) 2565 2566 /** @brief Macro to get the UART7 clock source. 2567 * @retval The clock source can be one of the following values: 2568 * @arg @ref RCC_UART7CLKSOURCE_PCLK1 PCLK1 selected as UART7 clock 2569 * @arg @ref RCC_UART7CLKSOURCE_PLL2Q PLL2Q selected as UART7 clock 2570 * @arg @ref RCC_UART7CLKSOURCE_PLL3Q PLL3Q selected as UART7 clock 2571 * @arg @ref RCC_UART7CLKSOURCE_HSI HSI selected as UART7 clock 2572 * @arg @ref RCC_UART7CLKSOURCE_CSI CSI selected as UART7 clock 2573 * @arg @ref RCC_UART7CLKSOURCE_LSE LSE selected as UART7 clock 2574 */ 2575 #define __HAL_RCC_GET_UART7_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_UART7SEL))) 2576 #endif /* UART5 */ 2577 2578 #if defined(UART8) 2579 /** @brief Macro to configure the UART8 clock (UART8CLK). 2580 * 2581 * @param __UART8_CLKSOURCE__ specifies the UART8 clock source. 2582 * This parameter can be one of the following values: 2583 * @arg @ref RCC_UART8CLKSOURCE_PCLK1 PCLK1 selected as UART8 clock 2584 * @arg @ref RCC_UART8CLKSOURCE_PLL2Q PLL2Q selected as UART8 clock 2585 * @arg @ref RCC_UART8CLKSOURCE_PLL3Q PLL3Q selected as UART8 clock 2586 * @arg @ref RCC_UART8CLKSOURCE_HSI HSI selected as UART8 clock 2587 * @arg @ref RCC_UART8CLKSOURCE_CSI CSI selected as UART8 clock 2588 * @arg @ref RCC_UART8CLKSOURCE_LSE LSE selected as UART8 clock 2589 * @retval None 2590 */ 2591 #define __HAL_RCC_UART8_CONFIG(__UART8_CLKSOURCE__) \ 2592 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_UART8SEL, (uint32_t)(__UART8_CLKSOURCE__)) 2593 2594 /** @brief Macro to get the UART8 clock source. 2595 * @retval The clock source can be one of the following values: 2596 * @arg @ref RCC_UART8CLKSOURCE_PCLK1 PCLK1 selected as UART8 clock 2597 * @arg @ref RCC_UART8CLKSOURCE_PLL2Q PLL2Q selected as UART8 clock 2598 * @arg @ref RCC_UART8CLKSOURCE_PLL3Q PLL3Q selected as UART8 clock 2599 * @arg @ref RCC_UART8CLKSOURCE_HSI HSI selected as UART8 clock 2600 * @arg @ref RCC_UART8CLKSOURCE_CSI CSI selected as UART8 clock 2601 * @arg @ref RCC_UART8CLKSOURCE_LSE LSE selected as UART8 clock 2602 */ 2603 #define __HAL_RCC_GET_UART8_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_UART8SEL))) 2604 #endif /* UART8 */ 2605 2606 #if defined(UART9) 2607 /** @brief Macro to configure the UART9 clock (UART9CLK). 2608 * 2609 * @param __UART9_CLKSOURCE__ specifies the UART9 clock source. 2610 * This parameter can be one of the following values: 2611 * @arg @ref RCC_UART9CLKSOURCE_PCLK1 PCLK1 selected as UART9 clock 2612 * @arg @ref RCC_UART9CLKSOURCE_PLL2Q PLL2Q selected as UART9 clock 2613 * @arg @ref RCC_UART9CLKSOURCE_PLL3Q PLL3Q selected as UART9 clock 2614 * @arg @ref RCC_UART9CLKSOURCE_HSI HSI selected as UART9 clock 2615 * @arg @ref RCC_UART9CLKSOURCE_CSI CSI selected as UART9 clock 2616 * @arg @ref RCC_UART9CLKSOURCE_LSE LSE selected as UART9 clock 2617 * @retval None 2618 */ 2619 #define __HAL_RCC_UART9_CONFIG(__UART9_CLKSOURCE__) \ 2620 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_UART9SEL, (uint32_t)(__UART9_CLKSOURCE__)) 2621 2622 /** @brief Macro to get the UART9 clock source. 2623 * @retval The clock source can be one of the following values: 2624 * @arg @ref RCC_UART9CLKSOURCE_PCLK1 PCLK1 selected as UART9 clock 2625 * @arg @ref RCC_UART9CLKSOURCE_PLL2Q PLL2Q selected as UART9 clock 2626 * @arg @ref RCC_UART9CLKSOURCE_PLL3Q PLL3Q selected as UART9 clock 2627 * @arg @ref RCC_UART9CLKSOURCE_HSI HSI selected as UART9 clock 2628 * @arg @ref RCC_UART9CLKSOURCE_CSI CSI selected as UART9 clock 2629 * @arg @ref RCC_UART9CLKSOURCE_LSE LSE selected as UART9 clock 2630 */ 2631 #define __HAL_RCC_GET_UART9_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_UART9SEL))) 2632 #endif /* UART9 */ 2633 2634 #if defined(USART10) 2635 /** @brief Macro to configure the USART10 clock (USART10CLK). 2636 * 2637 * @param __USART10_CLKSOURCE__ specifies the USART10 clock source. 2638 * This parameter can be one of the following values: 2639 * @arg @ref RCC_USART10CLKSOURCE_PCLK1 PCLK1 selected as USART10 clock 2640 * @arg @ref RCC_USART10CLKSOURCE_PLL2Q PLL2Q selected as USART10 clock 2641 * @arg @ref RCC_USART10CLKSOURCE_PLL3Q PLL3Q selected as USART10 clock 2642 * @arg @ref RCC_USART10CLKSOURCE_HSI HSI selected as USART10 clock 2643 * @arg @ref RCC_USART10CLKSOURCE_CSI CSI selected as USART10 clock 2644 * @arg @ref RCC_USART10CLKSOURCE_LSE LSE selected as USART10 clock 2645 * @retval None 2646 */ 2647 #define __HAL_RCC_USART10_CONFIG(__USART10_CLKSOURCE__) \ 2648 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_USART10SEL, (uint32_t)(__USART10_CLKSOURCE__)) 2649 2650 /** @brief Macro to get the USART10 clock source. 2651 * @retval The clock source can be one of the following values: 2652 * @arg @ref RCC_USART10CLKSOURCE_PCLK1 PCLK1 selected as USART10 clock 2653 * @arg @ref RCC_USART10CLKSOURCE_PLL2Q PLL2Q selected as USART10 clock 2654 * @arg @ref RCC_USART10CLKSOURCE_PLL3Q PLL3Q selected as USART10 clock 2655 * @arg @ref RCC_USART10CLKSOURCE_HSI HSI selected as USART10 clock 2656 * @arg @ref RCC_USART10CLKSOURCE_CSI CSI selected as USART10 clock 2657 * @arg @ref RCC_USART10CLKSOURCE_LSE LSE selected as USART10 clock 2658 */ 2659 #define __HAL_RCC_GET_USART10_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_USART10SEL))) 2660 #endif /* USART10 */ 2661 2662 #if defined(USART11) 2663 /** @brief Macro to configure the USART11 clock (USART11CLK). 2664 * 2665 * @param __USART11_CLKSOURCE__ specifies the USART11 clock source. 2666 * This parameter can be one of the following values: 2667 * @arg @ref RCC_USART11CLKSOURCE_PCLK1 PCLK1 selected as USART11 clock 2668 * @arg @ref RCC_USART11CLKSOURCE_PLL2Q PLL2Q selected as USART11 clock 2669 * @arg @ref RCC_USART11CLKSOURCE_PLL3Q PLL3Q selected as USART11 clock 2670 * @arg @ref RCC_USART11CLKSOURCE_HSI HSI selected as USART11 clock 2671 * @arg @ref RCC_USART11CLKSOURCE_CSI CSI selected as USART11 clock 2672 * @arg @ref RCC_USART11CLKSOURCE_LSE LSE selected as USART11 clock 2673 * @retval None 2674 */ 2675 #define __HAL_RCC_USART11_CONFIG(__USART11_CLKSOURCE__) \ 2676 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_USART11SEL, (uint32_t)(__USART11_CLKSOURCE__)) 2677 2678 /** @brief Macro to get the USART11 clock source. 2679 * @retval The clock source can be one of the following values: 2680 * @arg @ref RCC_USART11CLKSOURCE_PCLK1 PCLK1 selected as USART11 clock 2681 * @arg @ref RCC_USART11CLKSOURCE_PLL2Q PLL2Q selected as USART11 clock 2682 * @arg @ref RCC_USART11CLKSOURCE_PLL3Q PLL3Q selected as USART11 clock 2683 * @arg @ref RCC_USART11CLKSOURCE_HSI HSI selected as USART11 clock 2684 * @arg @ref RCC_USART11CLKSOURCE_CSI CSI selected as USART11 clock 2685 * @arg @ref RCC_USART11CLKSOURCE_LSE LSE selected as USART11 clock 2686 */ 2687 #define __HAL_RCC_GET_USART11_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_USART11SEL))) 2688 #endif /* USART11 */ 2689 2690 #if defined(UART12) 2691 /** @brief Macro to configure the UART12 clock (UART12CLK). 2692 * 2693 * @param __UART12_CLKSOURCE__ specifies the UART12 clock source. 2694 * This parameter can be one of the following values: 2695 * @arg @ref RCC_UART12CLKSOURCE_PCLK1 PCLK1 selected as UART12 clock 2696 * @arg @ref RCC_UART12CLKSOURCE_PLL2Q PLL2Q selected as UART12 clock 2697 * @arg @ref RCC_UART12CLKSOURCE_PLL3Q PLL3Q selected as UART12 clock 2698 * @arg @ref RCC_UART12CLKSOURCE_HSI HSI selected as UART12 clock 2699 * @arg @ref RCC_UART12CLKSOURCE_CSI CSI selected as UART12 clock 2700 * @arg @ref RCC_UART12CLKSOURCE_LSE LSE selected as UART12 clock 2701 * @retval None 2702 */ 2703 #define __HAL_RCC_UART12_CONFIG(__UART12_CLKSOURCE__) \ 2704 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_UART12SEL, (uint32_t)(__UART12_CLKSOURCE__)) 2705 2706 /** @brief Macro to get the UART12 clock source. 2707 * @retval The clock source can be one of the following values: 2708 * @arg @ref RCC_UART12CLKSOURCE_PCLK1 PCLK1 selected as UART12 clock 2709 * @arg @ref RCC_UART12CLKSOURCE_PLL2Q PLL2Q selected as UART12 clock 2710 * @arg @ref RCC_UART12CLKSOURCE_PLL3Q PLL3Q selected as UART12 clock 2711 * @arg @ref RCC_UART12CLKSOURCE_HSI HSI selected as UART12 clock 2712 * @arg @ref RCC_UART12CLKSOURCE_CSI CSI selected as UART12 clock 2713 * @arg @ref RCC_UART12CLKSOURCE_LSE LSE selected as UART12 clock 2714 */ 2715 #define __HAL_RCC_GET_UART12_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_UART12SEL))) 2716 #endif /* UART12 */ 2717 2718 /** @brief Macro to configure the LPUART1 clock (LPUART1CLK). 2719 * 2720 * @param __LPUART1_CLKSOURCE__ specifies the LPUART1 clock source. 2721 * This parameter can be one of the following values: 2722 * @arg @ref RCC_LPUART1CLKSOURCE_PCLK3 PCLK3 selected as LPUART1 clock 2723 * @arg @ref RCC_LPUART1CLKSOURCE_PLL2Q PLL2Q selected as LPUART1 clock 2724 * @arg @ref RCC_LPUART1CLKSOURCE_PLL3Q PLL3Q selected as LPUART1 clock (*) 2725 * @arg @ref RCC_LPUART1CLKSOURCE_HSI HSI selected as LPUART1 clock 2726 * @arg @ref RCC_LPUART1CLKSOURCE_CSI CSI selected as LPUART1 clock 2727 * @arg @ref RCC_LPUART1CLKSOURCE_LSE LSE selected as LPUART1 clock 2728 * 2729 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2730 * @retval None 2731 */ 2732 #define __HAL_RCC_LPUART1_CONFIG(__LPUART1_CLKSOURCE__) \ 2733 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_LPUART1SEL, (uint32_t)(__LPUART1_CLKSOURCE__)) 2734 2735 /** @brief Macro to get the LPUART1 clock source. 2736 * @retval The clock source can be one of the following values: 2737 * @arg @ref RCC_LPUART1CLKSOURCE_PCLK3 PCLK3 selected as LPUART1 clock 2738 * @arg @ref RCC_LPUART1CLKSOURCE_PLL2Q PLL2Q selected as LPUART1 clock 2739 * @arg @ref RCC_LPUART1CLKSOURCE_PLL3Q PLL3Q selected as LPUART1 clock (*) 2740 * @arg @ref RCC_LPUART1CLKSOURCE_HSI HSI selected as LPUART1 clock 2741 * @arg @ref RCC_LPUART1CLKSOURCE_CSI CSI selected as LPUART1 clock 2742 * @arg @ref RCC_LPUART1CLKSOURCE_LSE LSE selected as LPUART1 clock 2743 * 2744 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2745 */ 2746 #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR3, RCC_CCIPR3_LPUART1SEL))) 2747 2748 #if defined(OCTOSPI1) 2749 /** @brief Macro to configure the OctoSPI clock. 2750 * @param __OSPI_CLKSOURCE__ specifies the OctoSPI clock source. 2751 * This parameter can be one of the following values: 2752 * @arg @ref RCC_OSPICLKSOURCE_HCLK HCLK selected as OctoSPI clock 2753 * @arg @ref RCC_OSPICLKSOURCE_PLL1Q PLL1Q divider clock selected as OctoSPI clock 2754 * @arg @ref RCC_OSPICLKSOURCE_PLL2R PLL2R divider clock selected as OctoSPI clock 2755 * @arg @ref RCC_OSPICLKSOURCE_CLKP CLKP selected as OctoSPI clock 2756 * @retval None 2757 */ 2758 #define __HAL_RCC_OSPI_CONFIG(__OSPI_CLKSOURCE__) \ 2759 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_OCTOSPISEL, (uint32_t)(__OSPI_CLKSOURCE__)) 2760 2761 /** @brief Macro to get the OctoSPI clock source. 2762 * @retval The clock source can be one of the following values: 2763 * @arg @ref RCC_OSPICLKSOURCE_HCLK HCLK selected as OctoSPI clock 2764 * @arg @ref RCC_OSPICLKSOURCE_PLL1Q PLL1Q divider clock selected as OctoSPI clock 2765 * @arg @ref RCC_OSPICLKSOURCE_PLL2R PLL2R divider clock selected as OctoSPI clock 2766 * @arg @ref RCC_OSPICLKSOURCE_CLKP CLKP selected as OctoSPI clock 2767 */ 2768 #define __HAL_RCC_GET_OSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_OCTOSPISEL))) 2769 #endif /* OCTOSPI1 */ 2770 2771 #if defined(SDMMC1) 2772 /** @brief Macro to configure the SDMMC1 clock (SDMMCCLK). 2773 * 2774 * @param __SDMMC1_CLKSOURCE__: specifies the SDMMC1 clock source. 2775 * This parameter can be one of the following values: 2776 * @arg RCC_SDMMC1CLKSOURCE_PLL1Q PLL1Q selected as SDMMC1 clock 2777 * @arg RCC_SDMMC1CLKSOURCE_PLL2R PLL2R selected as SDMMC1 clock 2778 */ 2779 #define __HAL_RCC_SDMMC1_CONFIG(__SDMMC1_CLKSOURCE__) \ 2780 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_SDMMC1SEL, (uint32_t)(__SDMMC1_CLKSOURCE__)) 2781 2782 /** @brief macro to get the SDMMC1 clock source. 2783 * @retval The clock source can be one of the following values: 2784 * @arg RCC_SDMMC1CLKSOURCE_PLL1Q PLL1Q selected as SDMMC1 clock 2785 * @arg RCC_SDMMC1CLKSOURCE_PLL2R PLL2R selected as SDMMC1 clock 2786 */ 2787 #define __HAL_RCC_GET_SDMMC1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_SDMMC1SEL))) 2788 #endif /* SDMMC1 */ 2789 2790 #if defined(SDMMC2) 2791 /** @brief Macro to configure the SDMMC2 clock (SDMMCCLK). 2792 * 2793 * @param __SDMMC2_CLKSOURCE__: specifies the SDMMC2 clock source. 2794 * This parameter can be one of the following values: 2795 * @arg RCC_SDMMC2CLKSOURCE_PLL1Q PLL1Q selected as SDMMC2 clock 2796 * @arg RCC_SDMMC2CLKSOURCE_PLL2R PLL2R selected as SDMMC2 clock 2797 */ 2798 #define __HAL_RCC_SDMMC2_CONFIG(__SDMMC2_CLKSOURCE__) \ 2799 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_SDMMC2SEL, (uint32_t)(__SDMMC2_CLKSOURCE__)) 2800 2801 /** @brief macro to get the SDMMC2 clock source. 2802 * @retval The clock source can be one of the following values: 2803 * @arg RCC_SDMMC2CLKSOURCE_PLL1Q PLL1Q selected as SDMMC2 clock 2804 * @arg RCC_SDMMC2CLKSOURCE_PLL2R PLL2R selected as SDMMC2 clock 2805 */ 2806 #define __HAL_RCC_GET_SDMMC2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_SDMMC2SEL))) 2807 #endif /*SDMMC2*/ 2808 2809 /** @brief macro to configure the RNG clock (RNGCLK). 2810 * 2811 * @param __RNGCLKSource__: specifies the RNG clock source. 2812 * This parameter can be one of the following values: 2813 * @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock 2814 * @arg RCC_RNGCLKSOURCE_PLL1Q: PLL1Q selected as RNG clock 2815 * @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock 2816 * @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock 2817 */ 2818 #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \ 2819 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_RNGSEL, (uint32_t)(__RNGCLKSource__)) 2820 2821 /** @brief macro to get the RNG clock source. 2822 * @retval The clock source can be one of the following values: 2823 * @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock 2824 * @arg RCC_RNGCLKSOURCE_PLL1Q: PLL1Q selected as RNG clock 2825 * @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock 2826 * @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock 2827 */ 2828 #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_RNGSEL))) 2829 2830 #if defined(SAI1) 2831 /** 2832 * @brief Macro to configure the SAI1 clock source. 2833 * @param __SAI1_CLKSOURCE__ defines the SAI1 clock source. 2834 * This parameter can be one of the following values: 2835 * @arg @ref RCC_SAI1CLKSOURCE_PLL1Q PLL1Q selected as SAI1 clock 2836 * @arg @ref RCC_SAI1CLKSOURCE_PLL2P PLL2Pselected as SAI1 clock 2837 * @arg @ref RCC_SAI1CLKSOURCE_PLL3P PLL3P selected as SAI1 clock 2838 * @arg @ref RCC_SAI1CLKSOURCE_PIN External clock selected as SAI1 clock 2839 * @arg @ref RCC_SAI1CLKSOURCE_CLKP CLKP selected as SAI1 clock 2840 * @retval None 2841 */ 2842 #define __HAL_RCC_SAI1_CONFIG(__SAI1_CLKSOURCE__)\ 2843 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_SAI1SEL, (uint32_t)(__SAI1_CLKSOURCE__)) 2844 2845 /** @brief Macro to get the SAI1 clock source. 2846 * @retval The clock source can be one of the following values: 2847 * @arg @ref RCC_SAI1CLKSOURCE_PLL1Q PLL1Q selected as SAI1 clock 2848 * @arg @ref RCC_SAI1CLKSOURCE_PLL2P PLL2P selected as SAI1 clock 2849 * @arg @ref RCC_SAI1CLKSOURCE_PLL3P PLL3P selected as SAI1 clock 2850 * @arg @ref RCC_SAI1CLKSOURCE_PIN External clock selected as SAI1 clock 2851 * @arg @ref RCC_SAI1CLKSOURCE_CLKP CLKP selected as SAI1 clock 2852 */ 2853 #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_SAI1SEL))) 2854 #endif /* SAI1 */ 2855 2856 #if defined(SAI2) 2857 /** 2858 * @brief Macro to configure the SAI2 clock source. 2859 * @param __SAI2_CLKSOURCE__ defines the SAI2 clock source. 2860 * This parameter can be one of the following values: 2861 * @arg @ref RCC_SAI2CLKSOURCE_PLL1Q PLL1Q selected as SAI2 clock 2862 * @arg @ref RCC_SAI2CLKSOURCE_PLL2P PLL2P selected as SAI2 clock 2863 * @arg @ref RCC_SAI2CLKSOURCE_PLL3P PLL3P selected as SAI2 clock 2864 * @arg @ref RCC_SAI2CLKSOURCE_PIN External clock selected as SAI2 clock 2865 * @arg @ref RCC_SAI2CLKSOURCE_CLKP CLKP selected as SAI2 clock 2866 * @retval None 2867 */ 2868 #define __HAL_RCC_SAI2_CONFIG(__SAI2_CLKSOURCE__ )\ 2869 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_SAI2SEL, (uint32_t)(__SAI2_CLKSOURCE__)) 2870 2871 /** @brief Macro to get the SAI2 clock source. 2872 * @retval The clock source can be one of the following values: 2873 * @arg @ref RCC_SAI2CLKSOURCE_PLL1Q PLL1Q selected as SAI2 clock 2874 * @arg @ref RCC_SAI2CLKSOURCE_PLL2P PLL2P selected as SAI2 clock 2875 * @arg @ref RCC_SAI2CLKSOURCE_PLL3P PLL3P selected as SAI2 clock 2876 * @arg @ref RCC_SAI2CLKSOURCE_PIN External clock selected as SAI2 clock 2877 * @arg @ref RCC_SAI2CLKSOURCE_CLKP CLKP selected as SAI2 clock 2878 */ 2879 #define __HAL_RCC_GET_SAI2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_SAI2SEL))) 2880 #endif /* SAI2 */ 2881 2882 /** @brief Macro to configure the CLKP : Oscillator clock for peripheral 2883 * @param __CLKPSource__ specifies Oscillator clock for peripheral 2884 * This parameter can be one of the following values: 2885 * @arg RCC_CLKPSOURCE_HSI HSI oscillator selected as clock for peripheral 2886 * @arg RCC_CLKPSOURCE_CSI CSI oscillator selected as clock for peripheral 2887 * @arg RCC_CLKPSOURCE_HSE HSE oscillator selected as clock for peripheral 2888 */ 2889 #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \ 2890 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_CKERPSEL, (uint32_t)(__CLKPSource__)) 2891 2892 /** @brief Macro to get the oscillator clock for peripheral clock source. 2893 * @retval The clock source can be one of the following values: 2894 * @arg RCC_CLKPSOURCE_HSI HSI selected Oscillator clock for peripheral 2895 * @arg RCC_CLKPSOURCE_CSI CSI selected Oscillator clock for peripheral 2896 * @arg RCC_CLKPSOURCE_HSE HSE selected Oscillator clock for peripheral 2897 */ 2898 #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_CKERPSEL))) 2899 2900 #if defined(CEC) 2901 /** @brief Macro to configure the CEC clock (CECCLK) 2902 * @param __CECCLKSource__ specifies the CEC clock source. 2903 * This parameter can be one of the following values: 2904 * @arg RCC_CECCLKSOURCE_LSE LSE selected as CEC clock 2905 * @arg RCC_CECCLKSOURCE_LSI LSI selected as CEC clock 2906 * @arg RCC_CECCLKSOURCE_CSI_DIV122 CSI Divided by 122 selected as CEC clock 2907 */ 2908 #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \ 2909 MODIFY_REG(RCC->CCIPR5, RCC_CCIPR5_CECSEL, (uint32_t)(__CECCLKSource__)) 2910 2911 /** @brief Macro to get the CEC clock source. 2912 * @retval The clock source can be one of the following values: 2913 * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock 2914 * @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock 2915 * @arg RCC_CECCLKSOURCE_CSI_DIV122: CSI Divided by 122 selected as CEC clock 2916 */ 2917 #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR5, RCC_CCIPR5_CECSEL))) 2918 #endif /* CEC */ 2919 2920 /** @brief Macro to configure the USB clock (USBCLK). 2921 * @param __USBCLKSource__ specifies the USB clock source. 2922 * This parameter can be one of the following values: 2923 * @arg RCC_USBCLKSOURCE_PLL1Q PLL1Q selected as USB clock 2924 * @arg RCC_USBCLKSOURCE_PLL3Q PLL3Q selected as USB clock (*) 2925 * @arg RCC_USBCLKSOURCE_PLL2Q PLL2Q selected as USB clock (**) 2926 * @arg RCC_USBCLKSOURCE_HSI48 HSI48 selected as USB clock 2927 * 2928 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2929 * (**) : For stm32h503xx family line. 2930 */ 2931 #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \ 2932 MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_USBSEL, (uint32_t)(__USBCLKSource__)) 2933 2934 /** @brief Macro to get the USB clock source. 2935 * @retval The clock source can be one of the following values: 2936 * @arg RCC_USBCLKSOURCE_PLL1Q PLL1Q selected as USB clock 2937 * @arg RCC_USBCLKSOURCE_PLL3Q PLL3Q selected as USB clock (*) 2938 * @arg RCC_USBCLKSOURCE_PLL2Q PLL2Q selected as USB clock (**) 2939 * @arg RCC_USBCLKSOURCE_HSI48 HSI48 selected as USB clock 2940 * 2941 * (*) : For stm32h56xxx and stm32h57xxx family lines. 2942 * (**) : For stm32h503xx family line. 2943 */ 2944 #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR4, RCC_CCIPR4_USBSEL))) 2945 2946 /** @brief Macro to configure the Timers clocks prescalers 2947 * @param __PRESC__ specifies the Timers clocks prescalers selection 2948 * This parameter can be one of the following values: 2949 * @arg RCC_TIMPRES_DEACTIVATED: The Timers kernels clocks prescaler is 2950 * equal to rcc_hclk1 if PPREx is corresponding to division by 1 or 2, 2951 * else it is equal to 2 x Frcc_pclkx (default after reset) 2952 * @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is 2953 * equal to rcc_hclk1 if PPREx is corresponding to division by 1, 2 or 4, 2954 * else it is equal to 4 x Frcc_pclkx 2955 */ 2956 #define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) do {RCC->CFGR1 &= ~(RCC_CFGR1_TIMPRE);\ 2957 RCC->CFGR1 |= (__PRESC__); \ 2958 }while(0) 2959 2960 #if defined(CRS) 2961 2962 /** 2963 * @brief Enable the specified CRS interrupts. 2964 * @param __INTERRUPT__ specifies the CRS interrupt sources to be enabled. 2965 * This parameter can be any combination of the following values: 2966 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt 2967 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt 2968 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt 2969 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt 2970 * @retval None 2971 */ 2972 #define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__) SET_BIT(CRS->CR, (__INTERRUPT__)) 2973 2974 /** 2975 * @brief Disable the specified CRS interrupts. 2976 * @param __INTERRUPT__ specifies the CRS interrupt sources to be disabled. 2977 * This parameter can be any combination of the following values: 2978 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt 2979 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt 2980 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt 2981 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt 2982 * @retval None 2983 */ 2984 #define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(CRS->CR, (__INTERRUPT__)) 2985 2986 /** @brief Check whether the CRS interrupt has occurred or not. 2987 * @param __INTERRUPT__ specifies the CRS interrupt source to check. 2988 * This parameter can be one of the following values: 2989 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt 2990 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt 2991 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt 2992 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt 2993 * @retval The new state of __INTERRUPT__ (0 or 1). 2994 */ 2995 #define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__) ((READ_BIT(CRS->CR, (__INTERRUPT__)) != 0U) ? 1U : 0U) 2996 2997 /** @brief Clear the CRS interrupt pending bits 2998 * @param __INTERRUPT__ specifies the interrupt pending bit to clear. 2999 * This parameter can be any combination of the following values: 3000 * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt 3001 * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt 3002 * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt 3003 * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt 3004 * @arg @ref RCC_CRS_IT_TRIMOVF Trimming overflow or underflow interrupt 3005 * @arg @ref RCC_CRS_IT_SYNCERR SYNC error interrupt 3006 * @arg @ref RCC_CRS_IT_SYNCMISS SYNC missed interrupt 3007 */ 3008 /* CRS IT Error Mask */ 3009 #define RCC_CRS_IT_ERROR_MASK ((uint32_t)(RCC_CRS_IT_TRIMOVF |\ 3010 RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS)) 3011 3012 #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__) do { \ 3013 if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != 0U) \ 3014 { \ 3015 WRITE_REG(CRS->ICR, CRS_ICR_ERRC | \ 3016 ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \ 3017 } \ 3018 else \ 3019 { \ 3020 WRITE_REG(CRS->ICR, (__INTERRUPT__)); \ 3021 } \ 3022 } while(0) 3023 3024 /** 3025 * @brief Check whether the specified CRS flag is set or not. 3026 * @param __FLAG__ specifies the flag to check. 3027 * This parameter can be one of the following values: 3028 * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK 3029 * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning 3030 * @arg @ref RCC_CRS_FLAG_ERR Error 3031 * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC 3032 * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow 3033 * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error 3034 * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed 3035 * @retval The new state of _FLAG_ (TRUE or FALSE). 3036 */ 3037 #define __HAL_RCC_CRS_GET_FLAG(__FLAG__) (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__)) 3038 3039 /** 3040 * @brief Clear the CRS specified FLAG. 3041 * @param __FLAG__ specifies the flag to clear. 3042 * This parameter can be any combination of the following values: 3043 * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK 3044 * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning 3045 * @arg @ref RCC_CRS_FLAG_ERR Error 3046 * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC 3047 * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow 3048 * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error 3049 * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed 3050 * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS 3051 and consequently RCC_CRS_FLAG_ERR 3052 * @retval None 3053 */ 3054 3055 /* CRS Flag Error Mask */ 3056 #define RCC_CRS_FLAG_ERROR_MASK ((uint32_t)(RCC_CRS_FLAG_TRIMOVF |\ 3057 RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS)) 3058 3059 #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__) do { \ 3060 if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != 0U) \ 3061 { \ 3062 WRITE_REG(CRS->ICR, CRS_ICR_ERRC | \ 3063 ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \ 3064 } \ 3065 else \ 3066 { \ 3067 WRITE_REG(CRS->ICR, (__FLAG__)); \ 3068 } \ 3069 } while(0) 3070 3071 /** 3072 * @} 3073 */ 3074 3075 /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features 3076 * @{ 3077 */ 3078 /** 3079 * @brief Enable the oscillator clock for frequency error counter. 3080 * @note when the CEN bit is set the CRS_CFGR register becomes write-protected. 3081 * @retval None 3082 */ 3083 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE() SET_BIT(CRS->CR, CRS_CR_CEN) 3084 3085 /** 3086 * @brief Disable the oscillator clock for frequency error counter. 3087 * @retval None 3088 */ 3089 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN) 3090 3091 /** 3092 * @brief Enable the automatic hardware adjustment of TRIM bits. 3093 * @note When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected. 3094 * @retval None 3095 */ 3096 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE() SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) 3097 3098 /** 3099 * @brief Enable or disable the automatic hardware adjustment of TRIM bits. 3100 * @retval None 3101 */ 3102 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) 3103 3104 /** 3105 * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies 3106 * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency 3107 * of the synchronization source after prescaling. It is then decreased by one in order to 3108 * reach the expected synchronization on the zero value. The formula is the following: 3109 * RELOAD = (fTARGET / fSYNC) -1 3110 * @param __FTARGET__ Target frequency (value in Hz) 3111 * @param __FSYNC__ Synchronization signal frequency (value in Hz) 3112 * @retval None 3113 */ 3114 #define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U) 3115 3116 3117 /** 3118 * @} 3119 */ 3120 3121 #endif /* CRS */ 3122 3123 /* Private constants ---------------------------------------------------------*/ 3124 /** @addtogroup RCCEx_Private_Constants 3125 * @{ 3126 */ 3127 /* Define used for IS_RCC_* macros below */ 3128 #if defined(SDMMC2) 3129 #define RCC_PERIPHCLOCK_ALL (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ 3130 RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | RCC_PERIPHCLK_USART6 | \ 3131 RCC_PERIPHCLK_UART7 | RCC_PERIPHCLK_UART8 | RCC_PERIPHCLK_UART9 | \ 3132 RCC_PERIPHCLK_USART10 | RCC_PERIPHCLK_USART11 | RCC_PERIPHCLK_UART12 | \ 3133 RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ 3134 RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_I2C4 | RCC_PERIPHCLK_I3C1 | \ 3135 RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | \ 3136 RCC_PERIPHCLK_LPTIM3 | RCC_PERIPHCLK_LPTIM4 | RCC_PERIPHCLK_LPTIM5 | \ 3137 RCC_PERIPHCLK_LPTIM6 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | \ 3138 RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_DAC_LP | RCC_PERIPHCLK_RNG | \ 3139 RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_SDMMC2 | \ 3140 RCC_PERIPHCLK_I3C1 | RCC_PERIPHCLK_SPI1 | RCC_PERIPHCLK_SPI2 | \ 3141 RCC_PERIPHCLK_SPI3 | RCC_PERIPHCLK_SPI4 | RCC_PERIPHCLK_SPI5 | \ 3142 RCC_PERIPHCLK_SPI6 | RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_FDCAN | \ 3143 RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_USB | RCC_PERIPHCLK_CKPER) 3144 #elif defined(RCC_CR_PLL3ON) 3145 #define RCC_PERIPHCLOCK_ALL (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ 3146 RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | RCC_PERIPHCLK_USART6 | \ 3147 RCC_PERIPHCLK_UART7 | RCC_PERIPHCLK_UART8 | RCC_PERIPHCLK_UART9 | \ 3148 RCC_PERIPHCLK_USART10 | RCC_PERIPHCLK_USART11 | RCC_PERIPHCLK_UART12 | \ 3149 RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ 3150 RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_I2C4 | RCC_PERIPHCLK_I3C1 | \ 3151 RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | \ 3152 RCC_PERIPHCLK_LPTIM3 | RCC_PERIPHCLK_LPTIM4 | RCC_PERIPHCLK_LPTIM5 | \ 3153 RCC_PERIPHCLK_LPTIM6 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | \ 3154 RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_DAC_LP | RCC_PERIPHCLK_RNG | \ 3155 RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_I3C1 | \ 3156 RCC_PERIPHCLK_SPI1 | RCC_PERIPHCLK_SPI2 | RCC_PERIPHCLK_SPI3 | \ 3157 RCC_PERIPHCLK_SPI4 | RCC_PERIPHCLK_SPI5 | RCC_PERIPHCLK_SPI6 | \ 3158 RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_FDCAN | RCC_PERIPHCLK_CEC | \ 3159 RCC_PERIPHCLK_USB | RCC_PERIPHCLK_CKPER) 3160 #else 3161 #define RCC_PERIPHCLOCK_ALL (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \ 3162 RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | \ 3163 RCC_PERIPHCLK_I3C1 | RCC_PERIPHCLK_I3C2 | RCC_PERIPHCLK_TIM | \ 3164 RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_ADCDAC | \ 3165 RCC_PERIPHCLK_DAC_LP | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_RTC | \ 3166 RCC_PERIPHCLK_I3C1 | RCC_PERIPHCLK_SPI1 | RCC_PERIPHCLK_SPI2 | \ 3167 RCC_PERIPHCLK_SPI3 | RCC_PERIPHCLK_FDCAN | RCC_PERIPHCLK_USB | \ 3168 RCC_PERIPHCLK_CKPER) 3169 #endif /*FDCAN2 && SDMMC2 */ 3170 /** 3171 * @} 3172 */ 3173 3174 /* Private macros ------------------------------------------------------------*/ 3175 /** @addtogroup RCCEx_Private_Macros 3176 * @{ 3177 */ 3178 3179 #define IS_RCC_PLL2_SOURCE(SOURCE) (((SOURCE) == RCC_PLL2_SOURCE_CSI) || \ 3180 ((SOURCE) == RCC_PLL2_SOURCE_HSI) || \ 3181 ((SOURCE) == RCC_PLL2_SOURCE_HSE)) 3182 3183 #define IS_RCC_PLL2_DIVM_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U)) 3184 #define IS_RCC_PLL2_MULN_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U)) 3185 #define IS_RCC_PLL2_DIVP_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3186 #define IS_RCC_PLL2_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3187 #define IS_RCC_PLL2_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3188 3189 #define IS_RCC_PLL2_FRACN_VALUE(VALUE) ((VALUE) <= 8191U) 3190 3191 #define IS_RCC_PLL2_VCIRGE_VALUE(VALUE) (((VALUE) == RCC_PLL2_VCIRANGE_0) || \ 3192 ((VALUE) == RCC_PLL2_VCIRANGE_1) || \ 3193 ((VALUE) == RCC_PLL2_VCIRANGE_2) || \ 3194 ((VALUE) == RCC_PLL2_VCIRANGE_3)) 3195 3196 #define IS_RCC_PLL2_VCORGE_VALUE(VALUE) (((VALUE) == RCC_PLL2_VCORANGE_WIDE) || ((VALUE) == RCC_PLL2_VCORANGE_MEDIUM)) 3197 3198 #define IS_RCC_PLL2_CLOCKOUT_VALUE(VALUE) ((0x00010000U <= (VALUE)) && ((VALUE) <= 0x00070000U)) 3199 3200 #if defined(RCC_CR_PLL3ON) 3201 #define IS_RCC_PLL3_SOURCE(SOURCE) (((SOURCE) == RCC_PLL3_SOURCE_CSI) || \ 3202 ((SOURCE) == RCC_PLL3_SOURCE_HSI) || \ 3203 ((SOURCE) == RCC_PLL3_SOURCE_HSE)) 3204 3205 #define IS_RCC_PLL3_VCIRGE_VALUE(VALUE) (((VALUE) == RCC_PLL3_VCIRANGE_0) || \ 3206 ((VALUE) == RCC_PLL3_VCIRANGE_1) || \ 3207 ((VALUE) == RCC_PLL3_VCIRANGE_2) || \ 3208 ((VALUE) == RCC_PLL3_VCIRANGE_3)) 3209 3210 #define IS_RCC_PLL3_DIVM_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U)) 3211 #define IS_RCC_PLL3_MULN_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U)) 3212 #define IS_RCC_PLL3_DIVP_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3213 #define IS_RCC_PLL3_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3214 #define IS_RCC_PLL3_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U)) 3215 3216 #define IS_RCC_PLL3_FRACN_VALUE(VALUE) ((VALUE) <= 8191U) 3217 3218 #define IS_RCC_PLL3_VCORGE_VALUE(VALUE) (((VALUE) == RCC_PLL3_VCORANGE_WIDE) || ((VALUE) == RCC_PLL3_VCORANGE_MEDIUM)) 3219 3220 #define IS_RCC_PLL3_CLOCKOUT_VALUE(VALUE) ((0x00010000U <= (VALUE)) && ((VALUE) <= 0x00070000U)) 3221 3222 #endif /* RCC_CR_PLL3ON */ 3223 3224 #define IS_RCC_LSCOSOURCE(__SOURCE__) (((__SOURCE__) == RCC_LSCOSOURCE_LSI) || \ 3225 ((__SOURCE__) == RCC_LSCOSOURCE_LSE)) 3226 3227 #define IS_RCC_CLKPSOURCE(SOURCE) (((SOURCE) == RCC_CLKPSOURCE_HSI) || \ 3228 ((SOURCE) == RCC_CLKPSOURCE_CSI) || \ 3229 ((SOURCE) == RCC_CLKPSOURCE_HSE)) 3230 3231 #define IS_RCC_PERIPHCLOCK(__SELECTION__) ((((__SELECTION__) & RCC_PERIPHCLOCK_ALL) != ((uint64_t)0x00)) && \ 3232 (((__SELECTION__) & ~RCC_PERIPHCLOCK_ALL) == ((uint64_t)0x00))) 3233 #if defined(RCC_CR_PLL3ON) 3234 #define IS_RCC_USART1CLKSOURCE(__SOURCE__) \ 3235 (((__SOURCE__) == RCC_USART1CLKSOURCE_PCLK2) || \ 3236 ((__SOURCE__) == RCC_USART1CLKSOURCE_PLL2Q) || \ 3237 ((__SOURCE__) == RCC_USART1CLKSOURCE_PLL3Q) || \ 3238 ((__SOURCE__) == RCC_USART1CLKSOURCE_HSI) || \ 3239 ((__SOURCE__) == RCC_USART1CLKSOURCE_CSI) || \ 3240 ((__SOURCE__) == RCC_USART1CLKSOURCE_LSE)) 3241 3242 #define IS_RCC_USART2CLKSOURCE(__SOURCE__) \ 3243 (((__SOURCE__) == RCC_USART2CLKSOURCE_PCLK1) || \ 3244 ((__SOURCE__) == RCC_USART2CLKSOURCE_PLL2Q) || \ 3245 ((__SOURCE__) == RCC_USART2CLKSOURCE_PLL3Q) || \ 3246 ((__SOURCE__) == RCC_USART2CLKSOURCE_HSI) || \ 3247 ((__SOURCE__) == RCC_USART2CLKSOURCE_CSI) || \ 3248 ((__SOURCE__) == RCC_USART2CLKSOURCE_LSE)) 3249 3250 #define IS_RCC_USART3CLKSOURCE(__SOURCE__) \ 3251 (((__SOURCE__) == RCC_USART3CLKSOURCE_PCLK1) || \ 3252 ((__SOURCE__) == RCC_USART3CLKSOURCE_PLL2Q) || \ 3253 ((__SOURCE__) == RCC_USART3CLKSOURCE_PLL3Q) || \ 3254 ((__SOURCE__) == RCC_USART3CLKSOURCE_HSI) || \ 3255 ((__SOURCE__) == RCC_USART3CLKSOURCE_CSI) || \ 3256 ((__SOURCE__) == RCC_USART3CLKSOURCE_LSE)) 3257 3258 #else 3259 #define IS_RCC_USART1CLKSOURCE(__SOURCE__) \ 3260 (((__SOURCE__) == RCC_USART1CLKSOURCE_PCLK2) || \ 3261 ((__SOURCE__) == RCC_USART1CLKSOURCE_PLL2Q) || \ 3262 ((__SOURCE__) == RCC_USART1CLKSOURCE_HSI) || \ 3263 ((__SOURCE__) == RCC_USART1CLKSOURCE_CSI) || \ 3264 ((__SOURCE__) == RCC_USART1CLKSOURCE_LSE)) 3265 3266 #define IS_RCC_USART2CLKSOURCE(__SOURCE__) \ 3267 (((__SOURCE__) == RCC_USART2CLKSOURCE_PCLK1) || \ 3268 ((__SOURCE__) == RCC_USART2CLKSOURCE_PLL2Q) || \ 3269 ((__SOURCE__) == RCC_USART2CLKSOURCE_HSI) || \ 3270 ((__SOURCE__) == RCC_USART2CLKSOURCE_CSI) || \ 3271 ((__SOURCE__) == RCC_USART2CLKSOURCE_LSE)) 3272 3273 #define IS_RCC_USART3CLKSOURCE(__SOURCE__) \ 3274 (((__SOURCE__) == RCC_USART3CLKSOURCE_PCLK1) || \ 3275 ((__SOURCE__) == RCC_USART3CLKSOURCE_PLL2Q) || \ 3276 ((__SOURCE__) == RCC_USART3CLKSOURCE_HSI) || \ 3277 ((__SOURCE__) == RCC_USART3CLKSOURCE_CSI) || \ 3278 ((__SOURCE__) == RCC_USART3CLKSOURCE_LSE)) 3279 3280 #endif /* RCC_CR_PLL3ON */ 3281 3282 #if defined(UART4) 3283 #define IS_RCC_UART4CLKSOURCE(__SOURCE__) \ 3284 (((__SOURCE__) == RCC_UART4CLKSOURCE_PCLK1) || \ 3285 ((__SOURCE__) == RCC_UART4CLKSOURCE_PLL2Q) || \ 3286 ((__SOURCE__) == RCC_UART4CLKSOURCE_PLL3Q) || \ 3287 ((__SOURCE__) == RCC_UART4CLKSOURCE_HSI) || \ 3288 ((__SOURCE__) == RCC_UART4CLKSOURCE_CSI) || \ 3289 ((__SOURCE__) == RCC_UART4CLKSOURCE_LSE)) 3290 #endif /* UART4 */ 3291 3292 #if defined(UART5) 3293 #define IS_RCC_UART5CLKSOURCE(__SOURCE__) \ 3294 (((__SOURCE__) == RCC_UART5CLKSOURCE_PCLK1) || \ 3295 ((__SOURCE__) == RCC_UART5CLKSOURCE_PLL2Q) || \ 3296 ((__SOURCE__) == RCC_UART5CLKSOURCE_PLL3Q) || \ 3297 ((__SOURCE__) == RCC_UART5CLKSOURCE_HSI) || \ 3298 ((__SOURCE__) == RCC_UART5CLKSOURCE_CSI) || \ 3299 ((__SOURCE__) == RCC_UART5CLKSOURCE_LSE)) 3300 #endif /* UART5 */ 3301 3302 #if defined(USART6) 3303 #define IS_RCC_USART6CLKSOURCE(__SOURCE__) \ 3304 (((__SOURCE__) == RCC_USART6CLKSOURCE_PCLK1) || \ 3305 ((__SOURCE__) == RCC_USART6CLKSOURCE_PLL2Q) || \ 3306 ((__SOURCE__) == RCC_USART6CLKSOURCE_PLL3Q) || \ 3307 ((__SOURCE__) == RCC_USART6CLKSOURCE_HSI) || \ 3308 ((__SOURCE__) == RCC_USART6CLKSOURCE_CSI) || \ 3309 ((__SOURCE__) == RCC_USART6CLKSOURCE_LSE)) 3310 #endif /* USART6 */ 3311 3312 #if defined(UART7) 3313 #define IS_RCC_UART7CLKSOURCE(__SOURCE__) \ 3314 (((__SOURCE__) == RCC_UART7CLKSOURCE_PCLK1) || \ 3315 ((__SOURCE__) == RCC_UART7CLKSOURCE_PLL2Q) || \ 3316 ((__SOURCE__) == RCC_UART7CLKSOURCE_PLL3Q) || \ 3317 ((__SOURCE__) == RCC_UART7CLKSOURCE_HSI) || \ 3318 ((__SOURCE__) == RCC_UART7CLKSOURCE_CSI) || \ 3319 ((__SOURCE__) == RCC_UART7CLKSOURCE_LSE)) 3320 #endif /* UART7 */ 3321 3322 #if defined(UART8) 3323 #define IS_RCC_UART8CLKSOURCE(__SOURCE__) \ 3324 (((__SOURCE__) == RCC_UART8CLKSOURCE_PCLK1) || \ 3325 ((__SOURCE__) == RCC_UART8CLKSOURCE_PLL2Q) || \ 3326 ((__SOURCE__) == RCC_UART8CLKSOURCE_PLL3Q) || \ 3327 ((__SOURCE__) == RCC_UART8CLKSOURCE_HSI) || \ 3328 ((__SOURCE__) == RCC_UART8CLKSOURCE_CSI) || \ 3329 ((__SOURCE__) == RCC_UART8CLKSOURCE_LSE)) 3330 #endif /* UART8 */ 3331 3332 #if defined(UART9) 3333 #define IS_RCC_UART9CLKSOURCE(__SOURCE__) \ 3334 (((__SOURCE__) == RCC_UART9CLKSOURCE_PCLK1) || \ 3335 ((__SOURCE__) == RCC_UART9CLKSOURCE_PLL2Q) || \ 3336 ((__SOURCE__) == RCC_UART9CLKSOURCE_PLL3Q) || \ 3337 ((__SOURCE__) == RCC_UART9CLKSOURCE_HSI) || \ 3338 ((__SOURCE__) == RCC_UART9CLKSOURCE_CSI) || \ 3339 ((__SOURCE__) == RCC_UART9CLKSOURCE_LSE)) 3340 #endif /* UART9 */ 3341 3342 #if defined(USART10) 3343 #define IS_RCC_USART10CLKSOURCE(__SOURCE__) \ 3344 (((__SOURCE__) == RCC_USART10CLKSOURCE_PCLK1) || \ 3345 ((__SOURCE__) == RCC_USART10CLKSOURCE_PLL2Q) || \ 3346 ((__SOURCE__) == RCC_USART10CLKSOURCE_PLL3Q) || \ 3347 ((__SOURCE__) == RCC_USART10CLKSOURCE_HSI) || \ 3348 ((__SOURCE__) == RCC_USART10CLKSOURCE_CSI) || \ 3349 ((__SOURCE__) == RCC_USART10CLKSOURCE_LSE)) 3350 #endif /* USART10 */ 3351 3352 #if defined(USART11) 3353 #define IS_RCC_USART11CLKSOURCE(__SOURCE__) \ 3354 (((__SOURCE__) == RCC_USART11CLKSOURCE_PCLK1) || \ 3355 ((__SOURCE__) == RCC_USART11CLKSOURCE_PLL2Q) || \ 3356 ((__SOURCE__) == RCC_USART11CLKSOURCE_PLL3Q) || \ 3357 ((__SOURCE__) == RCC_USART11CLKSOURCE_HSI) || \ 3358 ((__SOURCE__) == RCC_USART11CLKSOURCE_CSI) || \ 3359 ((__SOURCE__) == RCC_USART11CLKSOURCE_LSE)) 3360 #endif /* USART11 */ 3361 3362 #if defined(UART12) 3363 #define IS_RCC_UART12CLKSOURCE(__SOURCE__) \ 3364 (((__SOURCE__) == RCC_UART12CLKSOURCE_PCLK1) || \ 3365 ((__SOURCE__) == RCC_UART12CLKSOURCE_PLL2Q) || \ 3366 ((__SOURCE__) == RCC_UART12CLKSOURCE_PLL3Q) || \ 3367 ((__SOURCE__) == RCC_UART12CLKSOURCE_HSI) || \ 3368 ((__SOURCE__) == RCC_UART12CLKSOURCE_CSI) || \ 3369 ((__SOURCE__) == RCC_UART12CLKSOURCE_LSE)) 3370 #endif /* UART12 */ 3371 3372 #if defined(RCC_CR_PLL3ON) 3373 #define IS_RCC_LPUART1CLKSOURCE(__SOURCE__) \ 3374 (((__SOURCE__) == RCC_LPUART1CLKSOURCE_PCLK3) || \ 3375 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_PLL2Q) || \ 3376 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_PLL3Q) || \ 3377 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_HSI) || \ 3378 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_LSE) || \ 3379 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_CSI)) 3380 3381 #else 3382 #define IS_RCC_LPUART1CLKSOURCE(__SOURCE__) \ 3383 (((__SOURCE__) == RCC_LPUART1CLKSOURCE_PCLK3) || \ 3384 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_PLL2Q) || \ 3385 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_HSI) || \ 3386 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_LSE) || \ 3387 ((__SOURCE__) == RCC_LPUART1CLKSOURCE_CSI)) 3388 3389 #endif /* RCC_CR_PLL3ON */ 3390 3391 #if defined(RCC_CR_PLL3ON) 3392 #define IS_RCC_I2C1CLKSOURCE(__SOURCE__) \ 3393 (((__SOURCE__) == RCC_I2C1CLKSOURCE_PCLK1) || \ 3394 ((__SOURCE__) == RCC_I2C1CLKSOURCE_PLL3R) || \ 3395 ((__SOURCE__) == RCC_I2C1CLKSOURCE_HSI) || \ 3396 ((__SOURCE__) == RCC_I2C1CLKSOURCE_CSI)) 3397 3398 #define IS_RCC_I2C2CLKSOURCE(__SOURCE__) \ 3399 (((__SOURCE__) == RCC_I2C2CLKSOURCE_PCLK1) || \ 3400 ((__SOURCE__) == RCC_I2C2CLKSOURCE_PLL3R) || \ 3401 ((__SOURCE__) == RCC_I2C2CLKSOURCE_HSI) || \ 3402 ((__SOURCE__) == RCC_I2C2CLKSOURCE_CSI)) 3403 3404 #else 3405 #define IS_RCC_I2C1CLKSOURCE(__SOURCE__) \ 3406 (((__SOURCE__) == RCC_I2C1CLKSOURCE_PCLK1) || \ 3407 ((__SOURCE__) == RCC_I2C1CLKSOURCE_PLL2R) || \ 3408 ((__SOURCE__) == RCC_I2C1CLKSOURCE_HSI) || \ 3409 ((__SOURCE__) == RCC_I2C1CLKSOURCE_CSI)) 3410 3411 #define IS_RCC_I2C2CLKSOURCE(__SOURCE__) \ 3412 (((__SOURCE__) == RCC_I2C2CLKSOURCE_PCLK1) || \ 3413 ((__SOURCE__) == RCC_I2C2CLKSOURCE_PLL2R) || \ 3414 ((__SOURCE__) == RCC_I2C2CLKSOURCE_HSI) || \ 3415 ((__SOURCE__) == RCC_I2C2CLKSOURCE_CSI)) 3416 3417 #endif /* RCC_CR_PLL3ON */ 3418 3419 3420 #if defined(I2C3) 3421 #define IS_RCC_I2C3CLKSOURCE(__SOURCE__) \ 3422 (((__SOURCE__) == RCC_I2C3CLKSOURCE_PCLK3) || \ 3423 ((__SOURCE__) == RCC_I2C3CLKSOURCE_PLL3R) || \ 3424 ((__SOURCE__) == RCC_I2C3CLKSOURCE_HSI ) || \ 3425 ((__SOURCE__) == RCC_I2C3CLKSOURCE_CSI)) 3426 #endif /* I2C3 */ 3427 3428 #if defined(I2C4) 3429 #define IS_RCC_I2C4CLKSOURCE(__SOURCE__) \ 3430 (((__SOURCE__) == RCC_I2C4CLKSOURCE_PCLK3) || \ 3431 ((__SOURCE__) == RCC_I2C4CLKSOURCE_PLL3R) || \ 3432 ((__SOURCE__) == RCC_I2C4CLKSOURCE_HSI ) || \ 3433 ((__SOURCE__) == RCC_I2C4CLKSOURCE_CSI)) 3434 #endif /* I2C4 */ 3435 3436 #if defined(RCC_CR_PLL3ON) 3437 #define IS_RCC_I3C1CLKSOURCE(__SOURCE__) \ 3438 (((__SOURCE__) == RCC_I3C1CLKSOURCE_PCLK1) || \ 3439 ((__SOURCE__) == RCC_I3C1CLKSOURCE_PLL3R) || \ 3440 ((__SOURCE__) == RCC_I3C1CLKSOURCE_HSI)) 3441 3442 #else 3443 #define IS_RCC_I3C1CLKSOURCE(__SOURCE__) \ 3444 (((__SOURCE__) == RCC_I3C1CLKSOURCE_PCLK1) || \ 3445 ((__SOURCE__) == RCC_I3C1CLKSOURCE_PLL2R) || \ 3446 ((__SOURCE__) == RCC_I3C1CLKSOURCE_HSI)) 3447 3448 #endif /* RCC_CR_PLL3ON */ 3449 3450 #if defined(I3C2) 3451 #define IS_RCC_I3C2CLKSOURCE(__SOURCE__) \ 3452 (((__SOURCE__) == RCC_I3C2CLKSOURCE_PCLK3) || \ 3453 ((__SOURCE__) == RCC_I3C2CLKSOURCE_PLL2R) || \ 3454 ((__SOURCE__) == RCC_I3C2CLKSOURCE_HSI)) 3455 #endif /* I3C2 */ 3456 3457 #if defined(SAI1) 3458 #define IS_RCC_SAI1CLK(__SOURCE__) \ 3459 (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL1Q)|| \ 3460 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL2P)|| \ 3461 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL3P)|| \ 3462 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN) || \ 3463 ((__SOURCE__) == RCC_SAI1CLKSOURCE_CLKP)) 3464 3465 #endif /* SAI1 */ 3466 3467 #if defined(SAI2) 3468 #define IS_RCC_SAI2CLK(__SOURCE__) \ 3469 (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL1Q)|| \ 3470 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL2P)|| \ 3471 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL3P)|| \ 3472 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN) || \ 3473 ((__SOURCE__) == RCC_SAI2CLKSOURCE_CLKP)) 3474 #endif /* SAI2 */ 3475 3476 #if defined(RCC_CR_PLL3ON) 3477 #define IS_RCC_LPTIM1CLK(__SOURCE__) \ 3478 (((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PCLK3) || \ 3479 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PLL2P) || \ 3480 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PLL3R) || \ 3481 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSE) || \ 3482 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSI) || \ 3483 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_CLKP)) 3484 3485 #define IS_RCC_LPTIM2CLK(__SOURCE__) \ 3486 (((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PCLK1) || \ 3487 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PLL2P) || \ 3488 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PLL3R) || \ 3489 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSE) || \ 3490 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSI) || \ 3491 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_CLKP)) 3492 3493 #else 3494 #define IS_RCC_LPTIM1CLK(__SOURCE__) \ 3495 (((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PCLK3) || \ 3496 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PLL2P) || \ 3497 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSE) || \ 3498 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSI) || \ 3499 ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_CLKP)) 3500 3501 #define IS_RCC_LPTIM2CLK(__SOURCE__) \ 3502 (((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PCLK1) || \ 3503 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PLL2P) || \ 3504 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSE) || \ 3505 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSI) || \ 3506 ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_CLKP)) 3507 3508 #endif /* RCC_CR_PLL3ON */ 3509 3510 #if defined(LPTIM3) 3511 #define IS_RCC_LPTIM3CLK(__SOURCE__) \ 3512 (((__SOURCE__) == RCC_LPTIM3CLKSOURCE_PCLK3) || \ 3513 ((__SOURCE__) == RCC_LPTIM3CLKSOURCE_PLL2P) || \ 3514 ((__SOURCE__) == RCC_LPTIM3CLKSOURCE_PLL3R) || \ 3515 ((__SOURCE__) == RCC_LPTIM3CLKSOURCE_LSE) || \ 3516 ((__SOURCE__) == RCC_LPTIM3CLKSOURCE_LSI) || \ 3517 ((__SOURCE__) == RCC_LPTIM3CLKSOURCE_CLKP)) 3518 3519 #endif /* LPTIM3 */ 3520 3521 #if defined(LPTIM4) 3522 #define IS_RCC_LPTIM4CLK(__SOURCE__) \ 3523 (((__SOURCE__) == RCC_LPTIM4CLKSOURCE_PCLK3) || \ 3524 ((__SOURCE__) == RCC_LPTIM4CLKSOURCE_PLL2P) || \ 3525 ((__SOURCE__) == RCC_LPTIM4CLKSOURCE_PLL3R) || \ 3526 ((__SOURCE__) == RCC_LPTIM4CLKSOURCE_LSE) || \ 3527 ((__SOURCE__) == RCC_LPTIM4CLKSOURCE_LSI) || \ 3528 ((__SOURCE__) == RCC_LPTIM4CLKSOURCE_CLKP)) 3529 3530 #endif /* LPTIM4 */ 3531 3532 #if defined(LPTIM5) 3533 #define IS_RCC_LPTIM5CLK(__SOURCE__) \ 3534 (((__SOURCE__) == RCC_LPTIM5CLKSOURCE_PCLK3) || \ 3535 ((__SOURCE__) == RCC_LPTIM5CLKSOURCE_PLL2P) || \ 3536 ((__SOURCE__) == RCC_LPTIM5CLKSOURCE_PLL3R) || \ 3537 ((__SOURCE__) == RCC_LPTIM5CLKSOURCE_LSE) || \ 3538 ((__SOURCE__) == RCC_LPTIM5CLKSOURCE_LSI) || \ 3539 ((__SOURCE__) == RCC_LPTIM5CLKSOURCE_CLKP)) 3540 #endif /* LPTIM5 */ 3541 3542 #if defined(LPTIM6) 3543 #define IS_RCC_LPTIM6CLK(__SOURCE__) \ 3544 (((__SOURCE__) == RCC_LPTIM6CLKSOURCE_PCLK3) || \ 3545 ((__SOURCE__) == RCC_LPTIM6CLKSOURCE_PLL2P) || \ 3546 ((__SOURCE__) == RCC_LPTIM6CLKSOURCE_PLL3R) || \ 3547 ((__SOURCE__) == RCC_LPTIM6CLKSOURCE_LSE) || \ 3548 ((__SOURCE__) == RCC_LPTIM6CLKSOURCE_LSI) || \ 3549 ((__SOURCE__) == RCC_LPTIM6CLKSOURCE_CLKP)) 3550 #endif /* LPTIM6 */ 3551 3552 #define IS_RCC_FDCANCLK(__SOURCE__) \ 3553 (((__SOURCE__) == RCC_FDCANCLKSOURCE_HSE) || \ 3554 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL1Q) || \ 3555 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL2Q)) 3556 3557 #if defined(SDMMC1) 3558 #define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \ 3559 (((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL1Q) || \ 3560 ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL2R)) 3561 #endif /* SDMMC1 */ 3562 3563 #if defined(SDMMC2) 3564 #define IS_RCC_SDMMC2CLKSOURCE(__SOURCE__) \ 3565 (((__SOURCE__) == RCC_SDMMC2CLKSOURCE_PLL1Q) || \ 3566 ((__SOURCE__) == RCC_SDMMC2CLKSOURCE_PLL2R)) 3567 #endif /*SDMMC2*/ 3568 3569 #define IS_RCC_RNGCLKSOURCE(__SOURCE__) \ 3570 (((__SOURCE__) == RCC_RNGCLKSOURCE_HSI48) || \ 3571 ((__SOURCE__) == RCC_RNGCLKSOURCE_PLL1Q) || \ 3572 ((__SOURCE__) == RCC_RNGCLKSOURCE_LSE) || \ 3573 ((__SOURCE__) == RCC_RNGCLKSOURCE_LSI)) 3574 3575 #define IS_RCC_ADCDACCLKSOURCE(__SOURCE__) \ 3576 (((__SOURCE__) == RCC_ADCDACCLKSOURCE_HCLK) || \ 3577 ((__SOURCE__) == RCC_ADCDACCLKSOURCE_SYSCLK) || \ 3578 ((__SOURCE__) == RCC_ADCDACCLKSOURCE_PLL2R) || \ 3579 ((__SOURCE__) == RCC_ADCDACCLKSOURCE_HSE) || \ 3580 ((__SOURCE__) == RCC_ADCDACCLKSOURCE_HSI) || \ 3581 ((__SOURCE__) == RCC_ADCDACCLKSOURCE_CSI)) 3582 3583 #define IS_RCC_DACLPCLKSOURCE(__SOURCE__) \ 3584 (((__SOURCE__) == RCC_DACLPCLKSOURCE_LSI) || \ 3585 ((__SOURCE__) == RCC_DACLPCLKSOURCE_LSE)) 3586 3587 #if defined(OCTOSPI1) 3588 #define IS_RCC_OSPICLKSOURCE(__SOURCE__) \ 3589 (((__SOURCE__) == RCC_OSPICLKSOURCE_HCLK) || \ 3590 ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL1Q) || \ 3591 ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL2R) || \ 3592 ((__SOURCE__) == RCC_OSPICLKSOURCE_CLKP)) 3593 #endif /* OCTOSPI1 */ 3594 3595 #if defined(RCC_CR_PLL3ON) 3596 #define IS_RCC_SPI1CLKSOURCE(__SOURCE__) \ 3597 (((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL1Q) || \ 3598 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL2P) || \ 3599 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL3P) || \ 3600 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PIN) || \ 3601 ((__SOURCE__) == RCC_SPI1CLKSOURCE_CLKP)) 3602 3603 #define IS_RCC_SPI2CLKSOURCE(__SOURCE__) \ 3604 (((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL1Q) || \ 3605 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL2P) || \ 3606 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL3P) || \ 3607 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PIN) || \ 3608 ((__SOURCE__) == RCC_SPI2CLKSOURCE_CLKP)) 3609 3610 #define IS_RCC_SPI3CLKSOURCE(__SOURCE__) \ 3611 (((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL1Q) || \ 3612 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL2P) || \ 3613 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL3P) || \ 3614 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PIN) || \ 3615 ((__SOURCE__) == RCC_SPI3CLKSOURCE_CLKP)) 3616 #else 3617 #define IS_RCC_SPI1CLKSOURCE(__SOURCE__) \ 3618 (((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL1Q) || \ 3619 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL2P) || \ 3620 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PIN) || \ 3621 ((__SOURCE__) == RCC_SPI1CLKSOURCE_CLKP)) 3622 3623 #define IS_RCC_SPI2CLKSOURCE(__SOURCE__) \ 3624 (((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL1Q) || \ 3625 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL2P) || \ 3626 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PIN) || \ 3627 ((__SOURCE__) == RCC_SPI2CLKSOURCE_CLKP)) 3628 3629 #define IS_RCC_SPI3CLKSOURCE(__SOURCE__) \ 3630 (((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL1Q) || \ 3631 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL2P) || \ 3632 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PIN) || \ 3633 ((__SOURCE__) == RCC_SPI3CLKSOURCE_CLKP)) 3634 3635 #endif /* RCC_CR_PLL3ON */ 3636 3637 #if defined(SPI4) 3638 #define IS_RCC_SPI4CLKSOURCE(__SOURCE__) \ 3639 (((__SOURCE__) == RCC_SPI4CLKSOURCE_PCLK2) || \ 3640 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL2Q) || \ 3641 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL3Q) || \ 3642 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSI) || \ 3643 ((__SOURCE__) == RCC_SPI4CLKSOURCE_CSI) || \ 3644 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSE)) 3645 #endif /* SPI4 */ 3646 3647 #if defined(SPI5) 3648 #define IS_RCC_SPI5CLKSOURCE(__SOURCE__) \ 3649 (((__SOURCE__) == RCC_SPI5CLKSOURCE_PCLK3) || \ 3650 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL2Q) || \ 3651 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL3Q) || \ 3652 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSI) || \ 3653 ((__SOURCE__) == RCC_SPI5CLKSOURCE_CSI) || \ 3654 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSE)) 3655 #endif /* SPI5 */ 3656 3657 #if defined(SPI6) 3658 #define IS_RCC_SPI6CLKSOURCE(__SOURCE__) \ 3659 (((__SOURCE__) == RCC_SPI6CLKSOURCE_PCLK2) || \ 3660 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2Q) || \ 3661 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3Q) || \ 3662 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI) || \ 3663 ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI) || \ 3664 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE)) 3665 #endif /* SPI6 */ 3666 3667 #if defined(RCC_CR_PLL3ON) 3668 #define IS_RCC_USBCLKSOURCE(__SOURCE__) \ 3669 (((__SOURCE__) == RCC_USBCLKSOURCE_PLL1Q) || \ 3670 ((__SOURCE__) == RCC_USBCLKSOURCE_PLL3Q) || \ 3671 ((__SOURCE__) == RCC_USBCLKSOURCE_HSI48)) 3672 #else 3673 #define IS_RCC_USBCLKSOURCE(__SOURCE__) \ 3674 (((__SOURCE__) == RCC_USBCLKSOURCE_PLL1Q) || \ 3675 ((__SOURCE__) == RCC_USBCLKSOURCE_PLL2Q) || \ 3676 ((__SOURCE__) == RCC_USBCLKSOURCE_HSI48)) 3677 #endif /* RCC_CR_PLL3ON */ 3678 3679 #if defined(CEC) 3680 #define IS_RCC_CECCLKSOURCE(__SOURCE__) \ 3681 (((__SOURCE__) == RCC_CECCLKSOURCE_LSE) || \ 3682 ((__SOURCE__) == RCC_CECCLKSOURCE_LSI) || \ 3683 ((__SOURCE__) == RCC_CECCLKSOURCE_CSI_DIV122)) 3684 #endif /*CEC*/ 3685 3686 #define IS_RCC_TIMPRES(VALUE) \ 3687 (((VALUE) == RCC_TIMPRES_DEACTIVATED) || \ 3688 ((VALUE) == RCC_TIMPRES_ACTIVATED)) 3689 3690 #if defined(CRS) 3691 3692 #define IS_RCC_CRS_SYNC_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_CRS_SYNC_SOURCE_GPIO) || \ 3693 ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_LSE) || \ 3694 ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB)) 3695 3696 #define IS_RCC_CRS_SYNC_DIV(__DIV__) (((__DIV__) == RCC_CRS_SYNC_DIV1) || ((__DIV__) == RCC_CRS_SYNC_DIV2) || \ 3697 ((__DIV__) == RCC_CRS_SYNC_DIV4) || ((__DIV__) == RCC_CRS_SYNC_DIV8) || \ 3698 ((__DIV__) == RCC_CRS_SYNC_DIV16) || ((__DIV__) == RCC_CRS_SYNC_DIV32) || \ 3699 ((__DIV__) == RCC_CRS_SYNC_DIV64) || ((__DIV__) == RCC_CRS_SYNC_DIV128)) 3700 3701 #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \ 3702 ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING)) 3703 3704 #define IS_RCC_CRS_RELOADVALUE(__VALUE__) (((__VALUE__) <= 0xFFFFU)) 3705 3706 #define IS_RCC_CRS_ERRORLIMIT(__VALUE__) (((__VALUE__) <= 0xFFU)) 3707 3708 #define IS_RCC_CRS_HSI48CALIBRATION(__VALUE__) (((__VALUE__) <= 0x7FU)) 3709 3710 #define IS_RCC_CRS_FREQERRORDIR(__DIR__) (((__DIR__) == RCC_CRS_FREQERRORDIR_UP) || \ 3711 ((__DIR__) == RCC_CRS_FREQERRORDIR_DOWN)) 3712 3713 #endif /* CRS */ 3714 3715 /** 3716 * @} 3717 */ 3718 3719 /* Exported functions --------------------------------------------------------*/ 3720 /** @addtogroup RCCEx_Exported_Functions 3721 * @{ 3722 */ 3723 3724 /** @addtogroup RCCEx_Exported_Functions_Group1 3725 * @{ 3726 */ 3727 3728 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(const RCC_PeriphCLKInitTypeDef *pPeriphClkInit); 3729 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *pPeriphClkInit); 3730 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk); 3731 void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *pPLL1_Clocks); 3732 void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *pPLL2_Clocks); 3733 #if defined(RCC_CR_PLL3ON) 3734 void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *pPLL3_Clocks); 3735 #endif /* RCC_CR_PLL3ON */ 3736 /** 3737 * @} 3738 */ 3739 3740 /** @addtogroup RCCEx_Exported_Functions_Group2 3741 * @{ 3742 */ 3743 3744 HAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *pPLL2Init); 3745 HAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void); 3746 #if defined(RCC_CR_PLL3ON) 3747 HAL_StatusTypeDef HAL_RCCEx_EnablePLL3(RCC_PLL3InitTypeDef *pPLL3Init); 3748 HAL_StatusTypeDef HAL_RCCEx_DisablePLL3(void); 3749 #endif /* RCC_CR_PLL3ON */ 3750 3751 void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk); 3752 void HAL_RCCEx_KerWakeUpStopCLKConfig(uint32_t WakeUpClk); 3753 void HAL_RCCEx_EnableLSECSS(void); 3754 void HAL_RCCEx_DisableLSECSS(void); 3755 void HAL_RCCEx_LSECSS_IRQHandler(void); 3756 void HAL_RCCEx_LSECSS_Callback(void); 3757 void HAL_RCCEx_EnableLSCO(uint32_t LSCOSource); 3758 void HAL_RCCEx_DisableLSCO(void); 3759 /** 3760 * @} 3761 */ 3762 3763 #if defined(CRS) 3764 3765 /** @addtogroup RCCEx_Exported_Functions_Group3 3766 * @{ 3767 */ 3768 void HAL_RCCEx_CRSConfig(const RCC_CRSInitTypeDef *pInit); 3769 void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void); 3770 void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo); 3771 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout); 3772 void HAL_RCCEx_CRS_IRQHandler(void); 3773 void HAL_RCCEx_CRS_SyncOkCallback(void); 3774 void HAL_RCCEx_CRS_SyncWarnCallback(void); 3775 void HAL_RCCEx_CRS_ExpectedSyncCallback(void); 3776 void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); 3777 /** 3778 * @} 3779 */ 3780 3781 #endif /* CRS */ 3782 3783 /** 3784 * @} 3785 */ 3786 3787 /** 3788 * @} 3789 */ 3790 3791 /** 3792 * @} 3793 */ 3794 3795 #ifdef __cplusplus 3796 } 3797 #endif 3798 3799 #endif /* __STM32H5xx_HAL_RCC_EX_H */ 3800