Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:36

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_rcc_ex.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of RCC HAL Extension module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file in
0013   * the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   ******************************************************************************
0016   */
0017 
0018 /* Define to prevent recursive inclusion -------------------------------------*/
0019 #ifndef STM32H7xx_HAL_RCC_EX_H
0020 #define STM32H7xx_HAL_RCC_EX_H
0021 
0022 #ifdef __cplusplus
0023 extern "C" {
0024 #endif
0025 
0026 /* Includes ------------------------------------------------------------------*/
0027 #include "stm32h7xx_hal_def.h"
0028 
0029 /** @addtogroup STM32H7xx_HAL_Driver
0030   * @{
0031   */
0032 
0033 /** @addtogroup RCCEx
0034   * @{
0035   */
0036 
0037 /* Exported types ------------------------------------------------------------*/
0038 /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
0039   * @ingroup RTEMSBSPsARMSTM32H7
0040   * @{
0041   */
0042 
0043 /**
0044   * @brief  PLL2 Clock structure definition
0045   */
0046 typedef struct
0047 {
0048 
0049   uint32_t PLL2M;       /*!< PLL2M: Division factor for PLL2 VCO input clock.
0050                              This parameter must be a number between Min_Data = 1 and Max_Data = 63    */
0051 
0052   uint32_t PLL2N;       /*!< PLL2N: Multiplication factor for PLL2 VCO output clock.
0053                              This parameter must be a number between Min_Data = 4 and Max_Data = 512
0054                              or between Min_Data = 8 and Max_Data = 420(*)
0055                              (*) : For stm32h7a3xx and stm32h7b3xx family lines.                       */
0056 
0057   uint32_t PLL2P;       /*!< PLL2P: Division factor for system clock.
0058                              This parameter must be a number between Min_Data = 2 and Max_Data = 128
0059                              odd division factors are not allowed                                      */
0060 
0061   uint32_t PLL2Q;        /*!< PLL2Q: Division factor for peripheral clocks.
0062                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */
0063 
0064   uint32_t PLL2R;        /*!< PLL2R: Division factor for peripheral clocks.
0065                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */
0066   uint32_t PLL2RGE;      /*!<PLL2RGE: PLL2 clock Input range
0067                           This parameter must be a value of @ref RCC_PLL2_VCI_Range                    */
0068   uint32_t PLL2VCOSEL;   /*!<PLL2VCOSEL: PLL2 clock Output range
0069                           This parameter must be a value of @ref RCC_PLL2_VCO_Range                    */
0070 
0071   uint32_t PLL2FRACN;    /*!<PLL2FRACN: Specifies Fractional Part Of The Multiplication Factor for
0072                             PLL2 VCO It should be a value between 0 and 8191                           */
0073 } RCC_PLL2InitTypeDef;
0074 
0075 /**
0076   * @brief  PLL3 Clock structure definition
0077   */
0078 typedef struct
0079 {
0080 
0081   uint32_t PLL3M;       /*!< PLL3M: Division factor for PLL3 VCO input clock.
0082                              This parameter must be a number between Min_Data = 1 and Max_Data = 63    */
0083 
0084   uint32_t PLL3N;       /*!< PLL3N: Multiplication factor for PLL3 VCO output clock.
0085                              This parameter must be a number between Min_Data = 4 and Max_Data = 512
0086                              or between Min_Data = 8 and Max_Data = 420(*)
0087                              (*) : For stm32h7a3xx and stm32h7b3xx family lines.                       */
0088 
0089   uint32_t PLL3P;       /*!< PLL3P: Division factor for system clock.
0090                              This parameter must be a number between Min_Data = 2 and Max_Data = 128
0091                              odd division factors are not allowed                                      */
0092 
0093   uint32_t PLL3Q;        /*!< PLL3Q: Division factor for peripheral clocks.
0094                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */
0095 
0096   uint32_t PLL3R;        /*!< PLL3R: Division factor for peripheral clocks.
0097                              This parameter must be a number between Min_Data = 1 and Max_Data = 128   */
0098   uint32_t PLL3RGE;      /*!<PLL3RGE: PLL3 clock Input range
0099                           This parameter must be a value of @ref RCC_PLL3_VCI_Range                    */
0100   uint32_t PLL3VCOSEL;   /*!<PLL3VCOSEL: PLL3 clock Output range
0101                           This parameter must be a value of @ref RCC_PLL3_VCO_Range                    */
0102 
0103   uint32_t PLL3FRACN;    /*!<PLL3FRACN: Specifies Fractional Part Of The Multiplication Factor for
0104                             PLL3 VCO It should be a value between 0 and 8191                           */
0105 } RCC_PLL3InitTypeDef;
0106 
0107 /**
0108   * @brief  RCC PLL1 Clocks structure definition
0109   */
0110 typedef struct
0111 {
0112   uint32_t PLL1_P_Frequency;
0113   uint32_t PLL1_Q_Frequency;
0114   uint32_t PLL1_R_Frequency;
0115 } PLL1_ClocksTypeDef;
0116 
0117 /**
0118   * @brief  RCC PLL2 Clocks structure definition
0119   */
0120 typedef struct
0121 {
0122   uint32_t PLL2_P_Frequency;
0123   uint32_t PLL2_Q_Frequency;
0124   uint32_t PLL2_R_Frequency;
0125 } PLL2_ClocksTypeDef;
0126 
0127 /**
0128   * @brief  RCC PLL3 Clocks structure definition
0129   */
0130 typedef struct
0131 {
0132   uint32_t PLL3_P_Frequency;
0133   uint32_t PLL3_Q_Frequency;
0134   uint32_t PLL3_R_Frequency;
0135 } PLL3_ClocksTypeDef;
0136 
0137 
0138 /**
0139   * @brief  RCC extended clocks structure definition
0140   */
0141 typedef struct
0142 {
0143   uint64_t PeriphClockSelection;   /*!< The Extended Clock to be configured.
0144                                         This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
0145 
0146   RCC_PLL2InitTypeDef PLL2;        /*!< PLL2structure parameters.
0147                                         This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */
0148 
0149   RCC_PLL3InitTypeDef PLL3;        /*!< PLL3 structure parameters.
0150                                         This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */
0151 
0152   uint32_t FmcClockSelection;     /*!< Specifies FMC clock source
0153                                         This parameter can be a value of @ref RCCEx_FMC_Clock_Source     */
0154 
0155 #if defined(QUADSPI)
0156   uint32_t QspiClockSelection;    /*!< Specifies QSPI clock source
0157                                         This parameter can be a value of @ref RCCEx_QSPI_Clock_Source    */
0158 #endif /* QUADSPI */
0159 
0160 #if defined(OCTOSPI1) || defined(OCTOSPI2)
0161   uint32_t OspiClockSelection;    /*!< Specifies OSPI clock source
0162                                         This parameter can be a value of @ref RCCEx_OSPI_Clock_Source    */
0163 #endif /*(OCTOSPI1) || (OCTOSPI2)*/
0164 
0165 
0166 #if defined(DSI)
0167   uint32_t DsiClockSelection;     /*!< Specifies DSI clock source
0168                                      This parameter can be a value of @ref RCCEx_DSI_Clock_Source        */
0169 #endif /* DSI */
0170 
0171   uint32_t SdmmcClockSelection;    /*!< Specifies SDMMC clock source
0172                                         This parameter can be a value of @ref RCCEx_SDMMC_Clock_Source   */
0173 
0174   uint32_t CkperClockSelection;   /*!< Specifies CKPER clock source
0175                                         This parameter can be a value of @ref RCCEx_CLKP_Clock_Source   */
0176 
0177   uint32_t Sai1ClockSelection;     /*!< Specifies SAI1 clock source
0178                                         This parameter can be a value of @ref RCCEx_SAI1_Clock_Source    */
0179 
0180 #if defined(SAI3)
0181   uint32_t Sai23ClockSelection;     /*!< Specifies SAI2/3 clock source
0182                                          This parameter can be a value of @ref RCCEx_SAI23_Clock_Source  */
0183 #endif /* SAI3 */
0184 
0185 #if defined(RCC_CDCCIP1R_SAI2ASEL)
0186   uint32_t Sai2AClockSelection;     /*!< Specifies SAI2A clock source
0187                                         This parameter can be a value of @ref RCCEx_SAI2A_Clock_Source  */
0188 #endif /* RCC_CDCCIP1R_SAI2ASEL */
0189 
0190 #if defined(RCC_CDCCIP1R_SAI2BSEL)
0191   uint32_t Sai2BClockSelection;     /*!< Specifies SAI2B clock source
0192                                          This parameter can be a value of @ref RCCEx_SAI2B_Clock_Source    */
0193 #endif /* RCC_CDCCIP1R_SAI2BSEL */
0194 
0195   uint32_t Spi123ClockSelection;     /*!< Specifies SPI1/2/3 clock source
0196                                           This parameter can be a value of @ref RCCEx_SPI123_Clock_Source    */
0197 
0198   uint32_t Spi45ClockSelection;     /*!< Specifies SPI4/5 clock source
0199                                          This parameter can be a value of @ref RCCEx_SPI45_Clock_Source    */
0200 
0201   uint32_t SpdifrxClockSelection;   /*!< Specifies SPDIFRX Clock clock source
0202                                         This parameter can be a value of @ref RCCEx_SPDIFRX_Clock_Source */
0203 
0204   uint32_t Dfsdm1ClockSelection;    /*!< Specifies DFSDM1 Clock clock source
0205                                         This parameter can be a value of @ref RCCEx_DFSDM1_Clock_Source  */
0206 
0207 #if defined(DFSDM2_BASE)
0208   uint32_t Dfsdm2ClockSelection;    /*!< Specifies DFSDM2 Clock clock source
0209                                         This parameter can be a value of @ref RCCEx_DFSDM2_Clock_Source  */
0210 #endif /* DFSDM2_BASE */
0211 
0212 #if defined(FDCAN1) || defined(FDCAN2)
0213   uint32_t FdcanClockSelection;   /*!< Specifies FDCAN Clock clock source
0214                                         This parameter can be a value of @ref RCCEx_FDCAN_Clock_Source   */
0215 #endif /*FDCAN1 || FDCAN2*/
0216 
0217   uint32_t Swpmi1ClockSelection;   /*!< Specifies SWPMI1 Clock clock source
0218                                         This parameter can be a value of @ref RCCEx_SWPMI1_Clock_Source  */
0219 
0220   uint32_t Usart234578ClockSelection;   /*!< Specifies USART2/3/4/5/7/8 clock source
0221                                              This parameter can be a value of @ref RCCEx_USART234578_Clock_Source  */
0222 
0223   uint32_t Usart16ClockSelection;  /*!< Specifies USART1/6 clock source
0224                                         This parameter can be a value of @ref RCCEx_USART16_Clock_Source  */
0225 
0226   uint32_t RngClockSelection;      /*!< Specifies RNG clock source
0227                                         This parameter can be a value of @ref RCCEx_RNG_Clock_Source     */
0228 
0229 #if defined(I2C5)
0230   uint32_t I2c1235ClockSelection;  /*!< Specifies I2C1/2/3/5 clock source
0231                                         This parameter can be a value of @ref RCCEx_I2C1235_Clock_Source    */
0232 #else
0233   uint32_t I2c123ClockSelection;   /*!< Specifies I2C1/2/3 clock source
0234                                         This parameter can be a value of @ref RCCEx_I2C1235_Clock_Source    */
0235 #endif /*I2C5*/
0236 
0237   uint32_t UsbClockSelection;      /*!< Specifies USB clock source
0238                                         This parameter can be a value of @ref RCCEx_USB_Clock_Source     */
0239 
0240   uint32_t CecClockSelection;     /*!< Specifies CEC clock source
0241                                         This parameter can be a value of @ref RCCEx_CEC_Clock_Source     */
0242 
0243   uint32_t Lptim1ClockSelection;   /*!< Specifies LPTIM1 clock source
0244                                         This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source  */
0245 
0246   uint32_t Lpuart1ClockSelection;  /*!< Specifies LPUART1 clock source
0247                                         This parameter can be a value of @ref RCCEx_LPUART1_Clock_Source */
0248 
0249   uint32_t I2c4ClockSelection;     /*!< Specifies I2C4 clock source
0250                                         This parameter can be a value of @ref RCCEx_I2C4_Clock_Source    */
0251 
0252   uint32_t Lptim2ClockSelection;   /*!< Specifies LPTIM2 clock source
0253                                         This parameter can be a value of @ref RCCEx_LPTIM2_Clock_Source  */
0254 
0255   uint32_t Lptim345ClockSelection;   /*!< Specifies LPTIM3/4/5 clock source
0256                                           This parameter can be a value of @ref RCCEx_LPTIM345_Clock_Source  */
0257 
0258   uint32_t AdcClockSelection;      /*!< Specifies ADC interface clock source
0259                                         This parameter can be a value of @ref RCCEx_ADC_Clock_Source     */
0260 #if defined(SAI4)
0261   uint32_t Sai4AClockSelection;     /*!< Specifies SAI4A clock source
0262                                         This parameter can be a value of @ref RCCEx_SAI4A_Clock_Source   */
0263 
0264   uint32_t Sai4BClockSelection;     /*!< Specifies SAI4B clock source
0265                                         This parameter can be a value of @ref RCCEx_SAI4B_Clock_Source   */
0266 #endif /* SAI4 */
0267 
0268   uint32_t Spi6ClockSelection;     /*!< Specifies SPI6 clock source
0269                                         This parameter can be a value of @ref RCCEx_SPI6_Clock_Source    */
0270 
0271   uint32_t RTCClockSelection;      /*!< Specifies RTC Clock clock source
0272                                         This parameter can be a value of @ref RCC_RTC_Clock_Source       */
0273 
0274 #if defined(HRTIM1)
0275   uint32_t Hrtim1ClockSelection;      /*!< Specifies HRTIM1 Clock clock source
0276                                         This parameter can be a value of @ref RCCEx_HRTIM1_Clock_Source   */
0277 #endif /* HRTIM1 */
0278 
0279   uint32_t TIMPresSelection;       /*!< Specifies TIM Clock Prescalers Selection.
0280                                        This parameter can be a value of @ref RCCEx_TIM_Prescaler_Selection */
0281 } RCC_PeriphCLKInitTypeDef;
0282 
0283 /*!< Alias for Inter STM32H7 lines compatibility regarding RCC_PeriphCLKInitTypeDef field : I2C5 available on some lines only  */
0284 #if defined(I2C5)
0285 #define I2c123ClockSelection I2c1235ClockSelection
0286 #else
0287 #define I2c1235ClockSelection I2c123ClockSelection
0288 #endif /*I2C5*/
0289 
0290 
0291 /**
0292   * @brief RCC_CRS Init structure definition
0293   */
0294 typedef struct
0295 {
0296   uint32_t Prescaler;             /*!< Specifies the division factor of the SYNC signal.
0297                                      This parameter can be a value of @ref RCCEx_CRS_SynchroDivider  */
0298 
0299   uint32_t Source;                /*!< Specifies the SYNC signal source.
0300                                      This parameter can be a value of @ref RCCEx_CRS_SynchroSource   */
0301 
0302   uint32_t Polarity;              /*!< Specifies the input polarity for the SYNC signal source.
0303                                      This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */
0304 
0305   uint32_t ReloadValue;           /*!< Specifies the value to be loaded in the frequency error counter with each SYNC event.
0306                                       It can be calculated in using macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)
0307                                      This parameter must be a number between 0 and 0xFFFF or a value of @ref RCCEx_CRS_ReloadValueDefault .*/
0308 
0309   uint32_t ErrorLimitValue;       /*!< Specifies the value to be used to evaluate the captured frequency error value.
0310                                      This parameter must be a number between 0 and 0xFF or a value of @ref RCCEx_CRS_ErrorLimitDefault */
0311 
0312   uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator.
0313                                      This parameter must be a number between 0 and 0x3F or a value of @ref RCCEx_CRS_HSI48CalibrationDefault */
0314 
0315 } RCC_CRSInitTypeDef;
0316 
0317 /**
0318   * @brief RCC_CRS Synchronization structure definition
0319   */
0320 typedef struct
0321 {
0322   uint32_t ReloadValue;           /*!< Specifies the value loaded in the Counter reload value.
0323                                      This parameter must be a number between 0 and 0xFFFF */
0324 
0325   uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming.
0326                                      This parameter must be a number between 0 and 0x3F */
0327 
0328   uint32_t FreqErrorCapture;      /*!< Specifies the value loaded in the .FECAP, the frequency error counter
0329                                                                     value latched in the time of the last SYNC event.
0330                                     This parameter must be a number between 0 and 0xFFFF */
0331 
0332   uint32_t FreqErrorDirection;    /*!< Specifies the value loaded in the .FEDIR, the counting direction of the
0333                                                                     frequency error counter latched in the time of the last SYNC event.
0334                                                                     It shows whether the actual frequency is below or above the target.
0335                                     This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/
0336 
0337 } RCC_CRSSynchroInfoTypeDef;
0338 
0339 /**
0340   * @}
0341   */
0342 
0343 
0344 /* Exported constants --------------------------------------------------------*/
0345 /** @defgroup RCCEx_Exported_Constants  RCCEx Exported Constants
0346   * @ingroup RTEMSBSPsARMSTM32H7
0347   * @{
0348   */
0349 
0350 /** @defgroup RCCEx_Periph_Clock_Selection  RCCEx Periph Clock Selection
0351   * @ingroup RTEMSBSPsARMSTM32H7
0352   * @{
0353   */
0354 
0355 #if defined(UART9) && defined(USART10)
0356 #define RCC_PERIPHCLK_USART16910       ((uint64_t)(0x00000001U))
0357 #define RCC_PERIPHCLK_USART1           RCC_PERIPHCLK_USART16910
0358 #define RCC_PERIPHCLK_USART6           RCC_PERIPHCLK_USART16910
0359 #define RCC_PERIPHCLK_UART9            RCC_PERIPHCLK_USART16910
0360 #define RCC_PERIPHCLK_USART10          RCC_PERIPHCLK_USART16910
0361 /*alias*/
0362 #define RCC_PERIPHCLK_USART16          RCC_PERIPHCLK_USART16910
0363 #else
0364 #define RCC_PERIPHCLK_USART16          ((uint64_t)(0x00000001U))
0365 #define RCC_PERIPHCLK_USART1           RCC_PERIPHCLK_USART16
0366 #define RCC_PERIPHCLK_USART6           RCC_PERIPHCLK_USART16
0367 /* alias */
0368 #define RCC_PERIPHCLK_USART16910       RCC_PERIPHCLK_USART16
0369 #endif /* UART9 && USART10*/
0370 #define RCC_PERIPHCLK_USART234578      ((uint64_t)(0x00000002U))
0371 #define RCC_PERIPHCLK_USART2           RCC_PERIPHCLK_USART234578
0372 #define RCC_PERIPHCLK_USART3           RCC_PERIPHCLK_USART234578
0373 #define RCC_PERIPHCLK_UART4            RCC_PERIPHCLK_USART234578
0374 #define RCC_PERIPHCLK_UART5            RCC_PERIPHCLK_USART234578
0375 #define RCC_PERIPHCLK_UART7            RCC_PERIPHCLK_USART234578
0376 #define RCC_PERIPHCLK_UART8            RCC_PERIPHCLK_USART234578
0377 #define RCC_PERIPHCLK_LPUART1          ((uint64_t)(0x00000004U))
0378 #if defined(I2C5)
0379 #define RCC_PERIPHCLK_I2C1235          ((uint64_t)(0x00000008U))
0380 #define RCC_PERIPHCLK_I2C1             RCC_PERIPHCLK_I2C1235
0381 #define RCC_PERIPHCLK_I2C2             RCC_PERIPHCLK_I2C1235
0382 #define RCC_PERIPHCLK_I2C3             RCC_PERIPHCLK_I2C1235
0383 /* alias */
0384 #define RCC_PERIPHCLK_I2C123           RCC_PERIPHCLK_I2C1235
0385 #else
0386 #define RCC_PERIPHCLK_I2C123           ((uint64_t)(0x00000008U))
0387 #define RCC_PERIPHCLK_I2C1             RCC_PERIPHCLK_I2C123
0388 #define RCC_PERIPHCLK_I2C2             RCC_PERIPHCLK_I2C123
0389 #define RCC_PERIPHCLK_I2C3             RCC_PERIPHCLK_I2C123
0390 #endif /*I2C5*/
0391 #define RCC_PERIPHCLK_I2C4             ((uint64_t)(0x00000010U))
0392 #if defined(I2C5)
0393 #define RCC_PERIPHCLK_I2C5             RCC_PERIPHCLK_I2C1235
0394 #endif /*I2C5*/
0395 #define RCC_PERIPHCLK_LPTIM1           ((uint64_t)(0x00000020U))
0396 #define RCC_PERIPHCLK_LPTIM2           ((uint64_t)(0x00000040U))
0397 #define RCC_PERIPHCLK_LPTIM345         ((uint64_t)(0x00000080U))
0398 #define RCC_PERIPHCLK_LPTIM3           RCC_PERIPHCLK_LPTIM345
0399 #if defined(LPTIM4)
0400 #define RCC_PERIPHCLK_LPTIM4           RCC_PERIPHCLK_LPTIM345
0401 #endif /*LPTIM4*/
0402 #if defined(LPTIM5)
0403 #define RCC_PERIPHCLK_LPTIM5           RCC_PERIPHCLK_LPTIM345
0404 #endif /*LPTIM5*/
0405 #define RCC_PERIPHCLK_SAI1             ((uint64_t)(0x00000100U))
0406 #if defined(SAI3)
0407 #define RCC_PERIPHCLK_SAI23            ((uint64_t)(0x00000200U))
0408 #define RCC_PERIPHCLK_SAI2             RCC_PERIPHCLK_SAI23
0409 #define RCC_PERIPHCLK_SAI3             RCC_PERIPHCLK_SAI23
0410 #endif /* SAI3 */
0411 #if defined(RCC_CDCCIP1R_SAI2ASEL_0)
0412 #define RCC_PERIPHCLK_SAI2A            ((uint64_t)(0x00000200U))
0413 #endif /* RCC_CDCCIP1R_SAI2ASEL_0 */
0414 #if defined(RCC_CDCCIP1R_SAI2BSEL_0)
0415 #define RCC_PERIPHCLK_SAI2B            ((uint64_t)(0x00000400U))
0416 #endif /* RCC_CDCCIP1R_SAI2BSEL_0 */
0417 #if defined(SAI4)
0418 #define RCC_PERIPHCLK_SAI4A            ((uint64_t)(0x00000400U))
0419 #define RCC_PERIPHCLK_SAI4B            ((uint64_t)(0x00000800U))
0420 #endif /* SAI4 */
0421 #define RCC_PERIPHCLK_SPI123           ((uint64_t)(0x00001000U))
0422 #define RCC_PERIPHCLK_SPI1             RCC_PERIPHCLK_SPI123
0423 #define RCC_PERIPHCLK_SPI2             RCC_PERIPHCLK_SPI123
0424 #define RCC_PERIPHCLK_SPI3             RCC_PERIPHCLK_SPI123
0425 #define RCC_PERIPHCLK_SPI45            ((uint64_t)(0x00002000U))
0426 #define RCC_PERIPHCLK_SPI4             RCC_PERIPHCLK_SPI45
0427 #define RCC_PERIPHCLK_SPI5             RCC_PERIPHCLK_SPI45
0428 #define RCC_PERIPHCLK_SPI6             ((uint64_t)(0x00004000U))
0429 #define RCC_PERIPHCLK_FDCAN            ((uint64_t)(0x00008000U))
0430 #define RCC_PERIPHCLK_SDMMC            ((uint64_t)(0x00010000U))
0431 #define RCC_PERIPHCLK_RNG              ((uint64_t)(0x00020000U))
0432 #define RCC_PERIPHCLK_USB              ((uint64_t)(0x00040000U))
0433 #define RCC_PERIPHCLK_ADC              ((uint64_t)(0x00080000U))
0434 #define RCC_PERIPHCLK_SWPMI1           ((uint64_t)(0x00100000U))
0435 #define RCC_PERIPHCLK_DFSDM1           ((uint64_t)(0x00200000U))
0436 #if defined(DFSDM2_BASE)
0437 #define RCC_PERIPHCLK_DFSDM2           ((uint64_t)(0x00000800U))
0438 #endif /* DFSDM2 */
0439 #define RCC_PERIPHCLK_RTC              ((uint64_t)(0x00400000U))
0440 #define RCC_PERIPHCLK_CEC              ((uint64_t)(0x00800000U))
0441 #define RCC_PERIPHCLK_FMC              ((uint64_t)(0x01000000U))
0442 #if defined(QUADSPI)
0443 #define RCC_PERIPHCLK_QSPI             ((uint64_t)(0x02000000U))
0444 #endif /* QUADSPI */
0445 #if defined(OCTOSPI1) || defined(OCTOSPI2)
0446 #define RCC_PERIPHCLK_OSPI             ((uint64_t)(0x02000000U))
0447 #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
0448 #define RCC_PERIPHCLK_DSI              ((uint64_t)(0x04000000U))
0449 #define RCC_PERIPHCLK_SPDIFRX          ((uint64_t)(0x08000000U))
0450 #if defined(HRTIM1)
0451 #define RCC_PERIPHCLK_HRTIM1           ((uint64_t)(0x10000000U))
0452 #endif /* HRTIM1 */
0453 #if defined(LTDC)
0454 #define RCC_PERIPHCLK_LTDC             ((uint64_t)(0x20000000U))
0455 #endif /* LTDC */
0456 #define RCC_PERIPHCLK_TIM              ((uint64_t)(0x40000000U))
0457 #define RCC_PERIPHCLK_CKPER            ((uint64_t)(0x80000000U))
0458 
0459 #define RCC_PERIPHCLK_PLL2_DIVP        ((uint64_t)(0x0000000100000000U))
0460 #define RCC_PERIPHCLK_PLL2_DIVQ        ((uint64_t)(0x0000000200000000U))
0461 #define RCC_PERIPHCLK_PLL2_DIVR        ((uint64_t)(0x0000000400000000U))
0462 #define RCC_PERIPHCLK_PLL3_DIVP        ((uint64_t)(0x0000000800000000U))
0463 #define RCC_PERIPHCLK_PLL3_DIVQ        ((uint64_t)(0x0000001000000000U))
0464 #define RCC_PERIPHCLK_PLL3_DIVR        ((uint64_t)(0x0000002000000000U))
0465 
0466 /**
0467   * @}
0468   */
0469 
0470 
0471 /** @defgroup RCC_PLL2_Clock_Output  RCC PLL2 Clock Output
0472   * @ingroup RTEMSBSPsARMSTM32H7
0473   * @{
0474   */
0475 #define RCC_PLL2_DIVP                RCC_PLLCFGR_DIVP2EN
0476 #define RCC_PLL2_DIVQ                RCC_PLLCFGR_DIVQ2EN
0477 #define RCC_PLL2_DIVR                RCC_PLLCFGR_DIVR2EN
0478 
0479 /**
0480   * @}
0481   */
0482 
0483 /** @defgroup RCC_PLL3_Clock_Output  RCC PLL3 Clock Output
0484   * @ingroup RTEMSBSPsARMSTM32H7
0485   * @{
0486   */
0487 #define RCC_PLL3_DIVP                RCC_PLLCFGR_DIVP3EN
0488 #define RCC_PLL3_DIVQ                RCC_PLLCFGR_DIVQ3EN
0489 #define RCC_PLL3_DIVR                RCC_PLLCFGR_DIVR3EN
0490 
0491 /**
0492   * @}
0493   */
0494 
0495 /** @defgroup RCC_PLL2_VCI_Range  RCC PLL2 VCI Range
0496   * @ingroup RTEMSBSPsARMSTM32H7
0497   * @{
0498   */
0499 #define RCC_PLL2VCIRANGE_0                RCC_PLLCFGR_PLL2RGE_0        /*!< Clock range frequency between 1 and 2 MHz  */
0500 #define RCC_PLL2VCIRANGE_1                RCC_PLLCFGR_PLL2RGE_1        /*!< Clock range frequency between 2 and 4 MHz  */
0501 #define RCC_PLL2VCIRANGE_2                RCC_PLLCFGR_PLL2RGE_2        /*!< Clock range frequency between 4 and 8 MHz  */
0502 #define RCC_PLL2VCIRANGE_3                RCC_PLLCFGR_PLL2RGE_3        /*!< Clock range frequency between 8 and 16 MHz */
0503 
0504 /**
0505   * @}
0506   */
0507 
0508 
0509 /** @defgroup RCC_PLL2_VCO_Range  RCC PLL2 VCO Range
0510   * @ingroup RTEMSBSPsARMSTM32H7
0511   * @{
0512   */
0513 #define RCC_PLL2VCOWIDE                 (0x00000000U)
0514 #define RCC_PLL2VCOMEDIUM               RCC_PLLCFGR_PLL2VCOSEL
0515 
0516 /**
0517   * @}
0518   */
0519 
0520 /** @defgroup RCC_PLL3_VCI_Range  RCC PLL3 VCI Range
0521   * @ingroup RTEMSBSPsARMSTM32H7
0522   * @{
0523   */
0524 #define RCC_PLL3VCIRANGE_0                RCC_PLLCFGR_PLL3RGE_0         /*!< Clock range frequency between 1 and 2 MHz  */
0525 #define RCC_PLL3VCIRANGE_1                RCC_PLLCFGR_PLL3RGE_1         /*!< Clock range frequency between 2 and 4 MHz  */
0526 #define RCC_PLL3VCIRANGE_2                RCC_PLLCFGR_PLL3RGE_2         /*!< Clock range frequency between 4 and 8 MHz  */
0527 #define RCC_PLL3VCIRANGE_3                RCC_PLLCFGR_PLL3RGE_3         /*!< Clock range frequency between 8 and 16 MHz */
0528 
0529 /**
0530   * @}
0531   */
0532 
0533 
0534 /** @defgroup RCC_PLL3_VCO_Range  RCC PLL3 VCO Range
0535   * @ingroup RTEMSBSPsARMSTM32H7
0536   * @{
0537   */
0538 #define RCC_PLL3VCOWIDE                 (0x00000000U)
0539 #define RCC_PLL3VCOMEDIUM               RCC_PLLCFGR_PLL3VCOSEL
0540 
0541 /**
0542   * @}
0543   */
0544 
0545 /** @defgroup RCCEx_USART16_Clock_Source  RCCEx USART1/6 Clock Source
0546   * @ingroup RTEMSBSPsARMSTM32H7
0547   * @{
0548   */
0549 #if defined(RCC_D2CCIP2R_USART16SEL)
0550 #define RCC_USART16CLKSOURCE_D2PCLK2    (0x00000000U)
0551 /* alias */
0552 #define RCC_USART16CLKSOURCE_PCLK2        RCC_USART16CLKSOURCE_D2PCLK2
0553 #define RCC_USART16CLKSOURCE_PLL2         RCC_D2CCIP2R_USART16SEL_0
0554 #define RCC_USART16CLKSOURCE_PLL3         RCC_D2CCIP2R_USART16SEL_1
0555 #define RCC_USART16CLKSOURCE_HSI         (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_1)
0556 #define RCC_USART16CLKSOURCE_CSI          RCC_D2CCIP2R_USART16SEL_2
0557 #define RCC_USART16CLKSOURCE_LSE         (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_2)
0558 
0559 #elif defined(RCC_CDCCIP2R_USART16910SEL)
0560 #define RCC_USART16910CLKSOURCE_CDPCLK2   (0x00000000U)
0561 /* alias */
0562 #define RCC_USART16910CLKSOURCE_D2PCLK2   RCC_USART16910CLKSOURCE_CDPCLK2
0563 #define RCC_USART16910CLKSOURCE_PLL2      RCC_CDCCIP2R_USART16910SEL_0
0564 #define RCC_USART16910CLKSOURCE_PLL3      RCC_CDCCIP2R_USART16910SEL_1
0565 #define RCC_USART16910CLKSOURCE_HSI      (RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_1)
0566 #define RCC_USART16910CLKSOURCE_CSI       RCC_CDCCIP2R_USART16910SEL_2
0567 #define RCC_USART16910CLKSOURCE_LSE      (RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_2)
0568 
0569 /*  Aliases */
0570 #define RCC_USART16CLKSOURCE_CDPCLK2     RCC_USART16910CLKSOURCE_CDPCLK2
0571 #define RCC_USART16CLKSOURCE_PCLK2       RCC_USART16CLKSOURCE_CDPCLK2
0572 #define RCC_USART16CLKSOURCE_D2PCLK2     RCC_USART16CLKSOURCE_CDPCLK2
0573 #define RCC_USART16CLKSOURCE_PLL2        RCC_USART16910CLKSOURCE_PLL2
0574 #define RCC_USART16CLKSOURCE_PLL3        RCC_USART16910CLKSOURCE_PLL3
0575 #define RCC_USART16CLKSOURCE_HSI         RCC_USART16910CLKSOURCE_HSI
0576 #define RCC_USART16CLKSOURCE_CSI         RCC_USART16910CLKSOURCE_CSI
0577 #define RCC_USART16CLKSOURCE_LSE         RCC_USART16910CLKSOURCE_LSE
0578 
0579 #else  /* RCC_D2CCIP2R_USART16910SEL */
0580 #define RCC_USART16910CLKSOURCE_D2PCLK2   (0x00000000U)
0581 #define RCC_USART16910CLKSOURCE_PLL2      RCC_D2CCIP2R_USART16910SEL_0
0582 #define RCC_USART16910CLKSOURCE_PLL3      RCC_D2CCIP2R_USART16910SEL_1
0583 #define RCC_USART16910CLKSOURCE_HSI      (RCC_D2CCIP2R_USART16910SEL_0 | RCC_D2CCIP2R_USART16910SEL_1)
0584 #define RCC_USART16910CLKSOURCE_CSI       RCC_D2CCIP2R_USART16910SEL_2
0585 #define RCC_USART16910CLKSOURCE_LSE      (RCC_D2CCIP2R_USART16910SEL_0 | RCC_D2CCIP2R_USART16910SEL_2)
0586 
0587 /*  Aliases */
0588 #define RCC_USART16CLKSOURCE_D2PCLK2     RCC_USART16910CLKSOURCE_D2PCLK2
0589 #define RCC_USART16CLKSOURCE_PCLK2       RCC_USART16910CLKSOURCE_D2PCLK2
0590 #define RCC_USART16CLKSOURCE_PLL2        RCC_USART16910CLKSOURCE_PLL2
0591 #define RCC_USART16CLKSOURCE_PLL3        RCC_USART16910CLKSOURCE_PLL3
0592 #define RCC_USART16CLKSOURCE_HSI         RCC_USART16910CLKSOURCE_HSI
0593 #define RCC_USART16CLKSOURCE_CSI         RCC_USART16910CLKSOURCE_CSI
0594 #define RCC_USART16CLKSOURCE_LSE         RCC_USART16910CLKSOURCE_LSE
0595 #endif /* RCC_D2CCIP2R_USART16SEL */
0596 /**
0597   * @}
0598   */
0599 
0600 /** @defgroup RCCEx_USART1_Clock_Source  RCCEx USART1 Clock Source
0601   * @ingroup RTEMSBSPsARMSTM32H7
0602   * @{
0603   */
0604 #define RCC_USART1CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2
0605 #define RCC_USART1CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2
0606 #define RCC_USART1CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3
0607 #define RCC_USART1CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI
0608 #define RCC_USART1CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI
0609 #define RCC_USART1CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE
0610 /**
0611   * @}
0612   */
0613 
0614 /** @defgroup RCCEx_USART6_Clock_Source  RCCEx USART6 Clock Source
0615   * @ingroup RTEMSBSPsARMSTM32H7
0616   * @{
0617   */
0618 #define RCC_USART6CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2
0619 #define RCC_USART6CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2
0620 #define RCC_USART6CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3
0621 #define RCC_USART6CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI
0622 #define RCC_USART6CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI
0623 #define RCC_USART6CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE
0624 
0625 /**
0626   * @}
0627   */
0628 
0629 #if defined(UART9)
0630 /** @defgroup RCCEx_UART9_Clock_Source  RCCEx UART9 Clock Source
0631   * @ingroup RTEMSBSPsARMSTM32H7
0632   * @{
0633   */
0634 #define RCC_UART9CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2
0635 #define RCC_UART9CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2
0636 #define RCC_UART9CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3
0637 #define RCC_UART9CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI
0638 #define RCC_UART9CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI
0639 #define RCC_UART9CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE
0640 /**
0641   * @}
0642   */
0643 #endif /* UART9 */
0644 
0645 #if defined(USART10)
0646 /** @defgroup RCCEx_USART10_Clock_Source  RCCEx USART10 Clock Source
0647   * @ingroup RTEMSBSPsARMSTM32H7
0648   * @{
0649   */
0650 #define RCC_USART10CLKSOURCE_D2PCLK2   RCC_USART16CLKSOURCE_D2PCLK2
0651 #define RCC_USART10CLKSOURCE_PLL2      RCC_USART16CLKSOURCE_PLL2
0652 #define RCC_USART10CLKSOURCE_PLL3      RCC_USART16CLKSOURCE_PLL3
0653 #define RCC_USART10CLKSOURCE_HSI       RCC_USART16CLKSOURCE_HSI
0654 #define RCC_USART10CLKSOURCE_CSI       RCC_USART16CLKSOURCE_CSI
0655 #define RCC_USART10CLKSOURCE_LSE       RCC_USART16CLKSOURCE_LSE
0656 /**
0657   * @}
0658   */
0659 #endif /* USART10 */
0660 
0661 /** @defgroup RCCEx_USART234578_Clock_Source  RCCEx USART2/3/4/5/7/8 Clock Source
0662   * @ingroup RTEMSBSPsARMSTM32H7
0663   * @{
0664   */
0665 #if defined(RCC_D2CCIP2R_USART28SEL)
0666 #define RCC_USART234578CLKSOURCE_D2PCLK1    (0x00000000U)
0667 /* alias */
0668 #define RCC_USART234578CLKSOURCE_PCLK1      RCC_USART234578CLKSOURCE_D2PCLK1
0669 #define RCC_USART234578CLKSOURCE_PLL2       RCC_D2CCIP2R_USART28SEL_0
0670 #define RCC_USART234578CLKSOURCE_PLL3       RCC_D2CCIP2R_USART28SEL_1
0671 #define RCC_USART234578CLKSOURCE_HSI        (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_1)
0672 #define RCC_USART234578CLKSOURCE_CSI        RCC_D2CCIP2R_USART28SEL_2
0673 #define RCC_USART234578CLKSOURCE_LSE        (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_2)
0674 #else
0675 #define RCC_USART234578CLKSOURCE_CDPCLK1   (0x00000000U)
0676 /* alias */
0677 #define RCC_USART234578CLKSOURCE_PCLK1     RCC_USART234578CLKSOURCE_CDPCLK1
0678 #define RCC_USART234578CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_CDPCLK1
0679 #define RCC_USART234578CLKSOURCE_PLL2      RCC_CDCCIP2R_USART234578SEL_0
0680 #define RCC_USART234578CLKSOURCE_PLL3      RCC_CDCCIP2R_USART234578SEL_1
0681 #define RCC_USART234578CLKSOURCE_HSI      (RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_1)
0682 #define RCC_USART234578CLKSOURCE_CSI       RCC_CDCCIP2R_USART234578SEL_2
0683 #define RCC_USART234578CLKSOURCE_LSE      (RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_2)
0684 #endif /* RCC_D2CCIP2R_USART28SEL */
0685 /**
0686   * @}
0687   */
0688 
0689 /** @defgroup RCCEx_USART2_Clock_Source  RCCEx USART2 Clock Source
0690   * @ingroup RTEMSBSPsARMSTM32H7
0691   * @{
0692   */
0693 #define RCC_USART2CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0694 #define RCC_USART2CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0695 #define RCC_USART2CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0696 #define RCC_USART2CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0697 #define RCC_USART2CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0698 #define RCC_USART2CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0699 
0700 /**
0701   * @}
0702   */
0703 
0704 /** @defgroup RCCEx_USART3_Clock_Source  RCCEx USART3 Clock Source
0705   * @ingroup RTEMSBSPsARMSTM32H7
0706   * @{
0707   */
0708 #define RCC_USART3CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0709 #define RCC_USART3CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0710 #define RCC_USART3CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0711 #define RCC_USART3CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0712 #define RCC_USART3CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0713 #define RCC_USART3CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0714 
0715 /**
0716   * @}
0717   */
0718 
0719 /** @defgroup RCCEx_UART4_Clock_Source  RCCEx UART4 Clock Source
0720   * @ingroup RTEMSBSPsARMSTM32H7
0721   * @{
0722   */
0723 #define RCC_UART4CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0724 #define RCC_UART4CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0725 #define RCC_UART4CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0726 #define RCC_UART4CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0727 #define RCC_UART4CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0728 #define RCC_UART4CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0729 
0730 /**
0731   * @}
0732   */
0733 
0734 /** @defgroup RCCEx_UART5_Clock_Source  RCCEx UART5 Clock Source
0735   * @ingroup RTEMSBSPsARMSTM32H7
0736   * @{
0737   */
0738 #define RCC_UART5CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0739 #define RCC_UART5CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0740 #define RCC_UART5CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0741 #define RCC_UART5CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0742 #define RCC_UART5CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0743 #define RCC_UART5CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0744 
0745 /**
0746   * @}
0747   */
0748 
0749 /** @defgroup RCCEx_UART7_Clock_Source  RCCEx UART7 Clock Source
0750   * @ingroup RTEMSBSPsARMSTM32H7
0751   * @{
0752   */
0753 #define RCC_UART7CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0754 #define RCC_UART7CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0755 #define RCC_UART7CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0756 #define RCC_UART7CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0757 #define RCC_UART7CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0758 #define RCC_UART7CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0759 
0760 /**
0761   * @}
0762   */
0763 
0764 /** @defgroup RCCEx_UART8_Clock_Source  RCCEx UART8 Clock Source
0765   * @ingroup RTEMSBSPsARMSTM32H7
0766   * @{
0767   */
0768 #define RCC_UART8CLKSOURCE_D2PCLK1   RCC_USART234578CLKSOURCE_D2PCLK1
0769 #define RCC_UART8CLKSOURCE_PLL2      RCC_USART234578CLKSOURCE_PLL2
0770 #define RCC_UART8CLKSOURCE_PLL3      RCC_USART234578CLKSOURCE_PLL3
0771 #define RCC_UART8CLKSOURCE_HSI       RCC_USART234578CLKSOURCE_HSI
0772 #define RCC_UART8CLKSOURCE_CSI       RCC_USART234578CLKSOURCE_CSI
0773 #define RCC_UART8CLKSOURCE_LSE       RCC_USART234578CLKSOURCE_LSE
0774 
0775 /**
0776   * @}
0777   */
0778 
0779 /** @defgroup RCCEx_LPUART1_Clock_Source  RCCEx LPUART1 Clock Source
0780   * @ingroup RTEMSBSPsARMSTM32H7
0781   * @{
0782   */
0783 #if defined(RCC_D3CCIPR_LPUART1SEL)
0784 #define RCC_LPUART1CLKSOURCE_D3PCLK1    (0x00000000U)
0785 /* alias */
0786 #define RCC_LPUART1CLKSOURCE_PCLK4     RCC_LPUART1CLKSOURCE_D3PCLK1
0787 #define RCC_LPUART1CLKSOURCE_PLL2      RCC_D3CCIPR_LPUART1SEL_0
0788 #define RCC_LPUART1CLKSOURCE_PLL3      RCC_D3CCIPR_LPUART1SEL_1
0789 #define RCC_LPUART1CLKSOURCE_HSI       (RCC_D3CCIPR_LPUART1SEL_0 | RCC_D3CCIPR_LPUART1SEL_1)
0790 #define RCC_LPUART1CLKSOURCE_CSI        RCC_D3CCIPR_LPUART1SEL_2
0791 #define RCC_LPUART1CLKSOURCE_LSE       (RCC_D3CCIPR_LPUART1SEL_2 | RCC_D3CCIPR_LPUART1SEL_0)
0792 #else
0793 #define RCC_LPUART1CLKSOURCE_SRDPCLK4   (0x00000000U)
0794 /* alias*/
0795 #define RCC_LPUART1CLKSOURCE_PCLK4     RCC_LPUART1CLKSOURCE_SRDPCLK4
0796 #define RCC_LPUART1CLKSOURCE_D3PCLK1   RCC_LPUART1CLKSOURCE_SRDPCLK4
0797 #define RCC_LPUART1CLKSOURCE_PLL2      RCC_SRDCCIPR_LPUART1SEL_0
0798 #define RCC_LPUART1CLKSOURCE_PLL3      RCC_SRDCCIPR_LPUART1SEL_1
0799 #define RCC_LPUART1CLKSOURCE_HSI       (RCC_SRDCCIPR_LPUART1SEL_0 | RCC_SRDCCIPR_LPUART1SEL_1)
0800 #define RCC_LPUART1CLKSOURCE_CSI        RCC_SRDCCIPR_LPUART1SEL_2
0801 #define RCC_LPUART1CLKSOURCE_LSE       (RCC_SRDCCIPR_LPUART1SEL_2 | RCC_SRDCCIPR_LPUART1SEL_0)
0802 #endif /* RCC_D3CCIPR_LPUART1SEL */
0803 /**
0804   * @}
0805   */
0806 
0807 /** @defgroup RCCEx_I2C1235_Clock_Source  RCCEx I2C1/2/3/5 Clock Source
0808   * @ingroup RTEMSBSPsARMSTM32H7
0809   * @{
0810   */
0811 #if defined (RCC_D2CCIP2R_I2C123SEL)
0812 #define RCC_I2C123CLKSOURCE_D2PCLK1      (0x00000000U)
0813 #define RCC_I2C123CLKSOURCE_PLL3         RCC_D2CCIP2R_I2C123SEL_0
0814 #define RCC_I2C123CLKSOURCE_HSI          RCC_D2CCIP2R_I2C123SEL_1
0815 #define RCC_I2C123CLKSOURCE_CSI         (RCC_D2CCIP2R_I2C123SEL_0 | RCC_D2CCIP2R_I2C123SEL_1)
0816 /* aliases */
0817 #define RCC_I2C1235CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1
0818 #define RCC_I2C1235CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3
0819 #define RCC_I2C1235CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI
0820 #define RCC_I2C1235CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI
0821 #elif defined(RCC_CDCCIP2R_I2C123SEL)
0822 #define RCC_I2C123CLKSOURCE_CDPCLK1      (0x00000000U)
0823 /* alias */
0824 #define RCC_I2C123CLKSOURCE_D2PCLK1      RCC_I2C123CLKSOURCE_CDPCLK1
0825 #define RCC_I2C123CLKSOURCE_PLL3         RCC_CDCCIP2R_I2C123SEL_0
0826 #define RCC_I2C123CLKSOURCE_HSI          RCC_CDCCIP2R_I2C123SEL_1
0827 #define RCC_I2C123CLKSOURCE_CSI         (RCC_CDCCIP2R_I2C123SEL_0 | RCC_CDCCIP2R_I2C123SEL_1)
0828 /* aliases */
0829 #define RCC_I2C1235CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1
0830 #define RCC_I2C1235CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3
0831 #define RCC_I2C1235CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI
0832 #define RCC_I2C1235CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI
0833 #elif defined(I2C5)
0834 #define RCC_I2C1235CLKSOURCE_D2PCLK1      (0x00000000U)
0835 #define RCC_I2C1235CLKSOURCE_PLL3        RCC_D2CCIP2R_I2C1235SEL_0
0836 #define RCC_I2C1235CLKSOURCE_HSI         RCC_D2CCIP2R_I2C1235SEL_1
0837 #define RCC_I2C1235CLKSOURCE_CSI         (RCC_D2CCIP2R_I2C1235SEL_0 | RCC_D2CCIP2R_I2C1235SEL_1)
0838 /* aliases */
0839 #define RCC_I2C123CLKSOURCE_D2PCLK1      RCC_I2C1235CLKSOURCE_D2PCLK1
0840 #define RCC_I2C123CLKSOURCE_PLL3         RCC_I2C1235CLKSOURCE_PLL3
0841 #define RCC_I2C123CLKSOURCE_HSI          RCC_I2C1235CLKSOURCE_HSI
0842 #define RCC_I2C123CLKSOURCE_CSI          RCC_I2C1235CLKSOURCE_CSI
0843 #endif /* RCC_D2CCIP2R_I2C123SEL */
0844 /**
0845   * @}
0846   */
0847 
0848 /** @defgroup RCCEx_I2C1_Clock_Source  RCCEx I2C1 Clock Source
0849   * @ingroup RTEMSBSPsARMSTM32H7
0850   * @{
0851   */
0852 #if defined(I2C5)
0853 #define RCC_I2C1CLKSOURCE_D2PCLK1     RCC_I2C1235CLKSOURCE_D2PCLK1
0854 #define RCC_I2C1CLKSOURCE_PLL3        RCC_I2C1235CLKSOURCE_PLL3
0855 #define RCC_I2C1CLKSOURCE_HSI         RCC_I2C1235CLKSOURCE_HSI
0856 #define RCC_I2C1CLKSOURCE_CSI         RCC_I2C1235CLKSOURCE_CSI
0857 #else
0858 #define RCC_I2C1CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1
0859 #define RCC_I2C1CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3
0860 #define RCC_I2C1CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI
0861 #define RCC_I2C1CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI
0862 #endif /*I2C5*/
0863 
0864 /**
0865   * @}
0866   */
0867 
0868 /** @defgroup RCCEx_I2C2_Clock_Source  RCCEx I2C2 Clock Source
0869   * @ingroup RTEMSBSPsARMSTM32H7
0870   * @{
0871   */
0872 #if defined(I2C5)
0873 #define RCC_I2C2CLKSOURCE_D2PCLK1     RCC_I2C1235CLKSOURCE_D2PCLK1
0874 #define RCC_I2C2CLKSOURCE_PLL3        RCC_I2C1235CLKSOURCE_PLL3
0875 #define RCC_I2C2CLKSOURCE_HSI         RCC_I2C1235CLKSOURCE_HSI
0876 #define RCC_I2C2CLKSOURCE_CSI         RCC_I2C1235CLKSOURCE_CSI
0877 #else
0878 #define RCC_I2C2CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1
0879 #define RCC_I2C2CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3
0880 #define RCC_I2C2CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI
0881 #define RCC_I2C2CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI
0882 #endif /*I2C5*/
0883 
0884 /**
0885   * @}
0886   */
0887 
0888 /** @defgroup RCCEx_I2C3_Clock_Source  RCCEx I2C3 Clock Source
0889   * @ingroup RTEMSBSPsARMSTM32H7
0890   * @{
0891   */
0892 #if defined(I2C5)
0893 #define RCC_I2C3CLKSOURCE_D2PCLK1     RCC_I2C1235CLKSOURCE_D2PCLK1
0894 #define RCC_I2C3CLKSOURCE_PLL3        RCC_I2C1235CLKSOURCE_PLL3
0895 #define RCC_I2C3CLKSOURCE_HSI         RCC_I2C1235CLKSOURCE_HSI
0896 #define RCC_I2C3CLKSOURCE_CSI         RCC_I2C1235CLKSOURCE_CSI
0897 #else
0898 #define RCC_I2C3CLKSOURCE_D2PCLK1     RCC_I2C123CLKSOURCE_D2PCLK1
0899 #define RCC_I2C3CLKSOURCE_PLL3        RCC_I2C123CLKSOURCE_PLL3
0900 #define RCC_I2C3CLKSOURCE_HSI         RCC_I2C123CLKSOURCE_HSI
0901 #define RCC_I2C3CLKSOURCE_CSI         RCC_I2C123CLKSOURCE_CSI
0902 #endif /*I2C5*/
0903 
0904 /**
0905   * @}
0906   */
0907 
0908 /** @defgroup RCCEx_I2C4_Clock_Source  RCCEx I2C4 Clock Source
0909   * @ingroup RTEMSBSPsARMSTM32H7
0910   * @{
0911   */
0912 #if defined(RCC_D3CCIPR_I2C4SEL)
0913 #define RCC_I2C4CLKSOURCE_D3PCLK1      (0x00000000U)
0914 #define RCC_I2C4CLKSOURCE_PLL3         RCC_D3CCIPR_I2C4SEL_0
0915 #define RCC_I2C4CLKSOURCE_HSI          RCC_D3CCIPR_I2C4SEL_1
0916 #define RCC_I2C4CLKSOURCE_CSI         (RCC_D3CCIPR_I2C4SEL_0 | RCC_D3CCIPR_I2C4SEL_1)
0917 #else
0918 #define RCC_I2C4CLKSOURCE_SRDPCLK4     (0x00000000U)
0919 /* alias */
0920 #define RCC_I2C4CLKSOURCE_D3PCLK1     RCC_I2C4CLKSOURCE_SRDPCLK4
0921 #define RCC_I2C4CLKSOURCE_PLL3         RCC_SRDCCIPR_I2C4SEL_0
0922 #define RCC_I2C4CLKSOURCE_HSI          RCC_SRDCCIPR_I2C4SEL_1
0923 #define RCC_I2C4CLKSOURCE_CSI         (RCC_SRDCCIPR_I2C4SEL_0 | RCC_SRDCCIPR_I2C4SEL_1)
0924 #endif /* RCC_D3CCIPR_I2C4SEL */
0925 
0926 /**
0927   * @}
0928   */
0929 #if defined(I2C5)
0930 /** @defgroup RCCEx_I2C5_Clock_Source  RCCEx I2C5 Clock Source
0931   * @ingroup RTEMSBSPsARMSTM32H7
0932   * @{
0933   */
0934 #define RCC_I2C5CLKSOURCE_D2PCLK1      RCC_I2C1235CLKSOURCE_D2PCLK1
0935 #define RCC_I2C5CLKSOURCE_PLL3         RCC_I2C1235CLKSOURCE_PLL3
0936 #define RCC_I2C5CLKSOURCE_HSI          RCC_I2C1235CLKSOURCE_HSI
0937 #define RCC_I2C5CLKSOURCE_CSI          RCC_I2C1235CLKSOURCE_CSI
0938 
0939 /**
0940   * @}
0941   */
0942 #endif /*I2C5*/
0943 
0944 /** @defgroup RCCEx_RNG_Clock_Source  RCCEx RNG Clock Source
0945   * @ingroup RTEMSBSPsARMSTM32H7
0946   * @{
0947   */
0948 #if defined(RCC_D2CCIP2R_RNGSEL)
0949 #define RCC_RNGCLKSOURCE_HSI48        (0x00000000U)
0950 #define RCC_RNGCLKSOURCE_PLL           RCC_D2CCIP2R_RNGSEL_0
0951 #define RCC_RNGCLKSOURCE_LSE           RCC_D2CCIP2R_RNGSEL_1
0952 #define RCC_RNGCLKSOURCE_LSI           RCC_D2CCIP2R_RNGSEL
0953 #else
0954 #define RCC_RNGCLKSOURCE_HSI48        (0x00000000U)
0955 #define RCC_RNGCLKSOURCE_PLL           RCC_CDCCIP2R_RNGSEL_0
0956 #define RCC_RNGCLKSOURCE_LSE           RCC_CDCCIP2R_RNGSEL_1
0957 #define RCC_RNGCLKSOURCE_LSI           RCC_CDCCIP2R_RNGSEL
0958 #endif /* RCC_D2CCIP2R_RNGSEL */
0959 
0960 /**
0961   * @}
0962   */
0963 #if defined(HRTIM1)
0964 
0965 /** @defgroup RCCEx_HRTIM1_Clock_Source RCC Extended HRTIM1 Clock Source
0966   * @ingroup RTEMSBSPsARMSTM32H7
0967   * @{
0968   */
0969 #define RCC_HRTIM1CLK_TIMCLK                (0x00000000U)
0970 #define RCC_HRTIM1CLK_CPUCLK                RCC_CFGR_HRTIMSEL
0971 
0972 /**
0973   * @}
0974   */
0975 #endif /*HRTIM1*/
0976 
0977 /** @defgroup RCCEx_USB_Clock_Source  RCCEx USB Clock Source
0978   * @ingroup RTEMSBSPsARMSTM32H7
0979   * @{
0980   */
0981 #if defined(RCC_D2CCIP2R_USBSEL)
0982 #define RCC_USBCLKSOURCE_PLL                  RCC_D2CCIP2R_USBSEL_0
0983 #define RCC_USBCLKSOURCE_PLL3                 RCC_D2CCIP2R_USBSEL_1
0984 #define RCC_USBCLKSOURCE_HSI48                RCC_D2CCIP2R_USBSEL
0985 #else
0986 #define RCC_USBCLKSOURCE_PLL                  RCC_CDCCIP2R_USBSEL_0
0987 #define RCC_USBCLKSOURCE_PLL3                 RCC_CDCCIP2R_USBSEL_1
0988 #define RCC_USBCLKSOURCE_HSI48                RCC_CDCCIP2R_USBSEL
0989 #endif /* RCC_D2CCIP2R_USBSEL */
0990 
0991 /**
0992   * @}
0993   */
0994 
0995 /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source
0996   * @ingroup RTEMSBSPsARMSTM32H7
0997   * @{
0998   */
0999 #if defined(RCC_D2CCIP1R_SAI1SEL)
1000 #define RCC_SAI1CLKSOURCE_PLL         (0x00000000U)
1001 #define RCC_SAI1CLKSOURCE_PLL2         RCC_D2CCIP1R_SAI1SEL_0
1002 #define RCC_SAI1CLKSOURCE_PLL3         RCC_D2CCIP1R_SAI1SEL_1
1003 #define RCC_SAI1CLKSOURCE_PIN         (RCC_D2CCIP1R_SAI1SEL_0 | RCC_D2CCIP1R_SAI1SEL_1)
1004 #define RCC_SAI1CLKSOURCE_CLKP         RCC_D2CCIP1R_SAI1SEL_2
1005 #else
1006 #define RCC_SAI1CLKSOURCE_PLL         (0x00000000U)
1007 #define RCC_SAI1CLKSOURCE_PLL2         RCC_CDCCIP1R_SAI1SEL_0
1008 #define RCC_SAI1CLKSOURCE_PLL3         RCC_CDCCIP1R_SAI1SEL_1
1009 #define RCC_SAI1CLKSOURCE_PIN         (RCC_CDCCIP1R_SAI1SEL_0 | RCC_CDCCIP1R_SAI1SEL_1)
1010 #define RCC_SAI1CLKSOURCE_CLKP         RCC_CDCCIP1R_SAI1SEL_2
1011 #endif /* RCC_D2CCIP1R_SAI1SEL */
1012 /**
1013   * @}
1014   */
1015 
1016 #if defined(SAI3)
1017 /** @defgroup RCCEx_SAI23_Clock_Source SAI2/3 Clock Source
1018   * @ingroup RTEMSBSPsARMSTM32H7
1019   * @{
1020   */
1021 #define RCC_SAI23CLKSOURCE_PLL         (0x00000000U)
1022 #define RCC_SAI23CLKSOURCE_PLL2         RCC_D2CCIP1R_SAI23SEL_0
1023 #define RCC_SAI23CLKSOURCE_PLL3         RCC_D2CCIP1R_SAI23SEL_1
1024 #define RCC_SAI23CLKSOURCE_PIN         (RCC_D2CCIP1R_SAI23SEL_0 | RCC_D2CCIP1R_SAI23SEL_1)
1025 #define RCC_SAI23CLKSOURCE_CLKP         RCC_D2CCIP1R_SAI23SEL_2
1026 /**
1027   * @}
1028   */
1029 
1030 /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source
1031   * @ingroup RTEMSBSPsARMSTM32H7
1032   * @{
1033   */
1034 #define RCC_SAI2CLKSOURCE_PLL         RCC_SAI23CLKSOURCE_PLL
1035 #define RCC_SAI2CLKSOURCE_PLL2        RCC_SAI23CLKSOURCE_PLL2
1036 #define RCC_SAI2CLKSOURCE_PLL3        RCC_SAI23CLKSOURCE_PLL3
1037 #define RCC_SAI2CLKSOURCE_PIN         RCC_SAI23CLKSOURCE_PIN
1038 #define RCC_SAI2CLKSOURCE_CLKP        RCC_SAI23CLKSOURCE_CLKP
1039 
1040 /**
1041   * @}
1042   */
1043 
1044 /** @defgroup RCCEx_SAI3_Clock_Source SAI3 Clock Source
1045   * @ingroup RTEMSBSPsARMSTM32H7
1046   * @{
1047   */
1048 #define RCC_SAI3CLKSOURCE_PLL         RCC_SAI23CLKSOURCE_PLL
1049 #define RCC_SAI3CLKSOURCE_PLL2        RCC_SAI23CLKSOURCE_PLL2
1050 #define RCC_SAI3CLKSOURCE_PLL3        RCC_SAI23CLKSOURCE_PLL3
1051 #define RCC_SAI3CLKSOURCE_PIN         RCC_SAI23CLKSOURCE_PIN
1052 #define RCC_SAI3CLKSOURCE_CLKP        RCC_SAI23CLKSOURCE_CLKP
1053 /**
1054   * @}
1055   */
1056 #endif /* SAI3 */
1057 
1058 #if defined(RCC_CDCCIP1R_SAI2ASEL)
1059 /** @defgroup RCCEx_SAI2A_Clock_Source SAI2A Clock Source
1060   * @ingroup RTEMSBSPsARMSTM32H7
1061   * @{
1062   */
1063 #define RCC_SAI2ACLKSOURCE_PLL         (0x00000000U)
1064 #define RCC_SAI2ACLKSOURCE_PLL2         RCC_CDCCIP1R_SAI2ASEL_0
1065 #define RCC_SAI2ACLKSOURCE_PLL3         RCC_CDCCIP1R_SAI2ASEL_1
1066 #define RCC_SAI2ACLKSOURCE_PIN         (RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_1)
1067 #define RCC_SAI2ACLKSOURCE_CLKP         RCC_CDCCIP1R_SAI2ASEL_2
1068 #define RCC_SAI2ACLKSOURCE_SPDIF       (RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_2)
1069 /**
1070  * @}
1071  */
1072 #endif /* RCC_CDCCIP1R_SAI2ASEL */
1073 
1074 #if defined(RCC_CDCCIP1R_SAI2BSEL)
1075 /** @defgroup RCCEx_SAI2B_Clock_Source SAI2B Clock Source
1076   * @ingroup RTEMSBSPsARMSTM32H7
1077   * @{
1078   */
1079 #define RCC_SAI2BCLKSOURCE_PLL         (0x00000000U)
1080 #define RCC_SAI2BCLKSOURCE_PLL2         RCC_CDCCIP1R_SAI2BSEL_0
1081 #define RCC_SAI2BCLKSOURCE_PLL3         RCC_CDCCIP1R_SAI2BSEL_1
1082 #define RCC_SAI2BCLKSOURCE_PIN         (RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_1)
1083 #define RCC_SAI2BCLKSOURCE_CLKP         RCC_CDCCIP1R_SAI2BSEL_2
1084 #define RCC_SAI2BCLKSOURCE_SPDIF       (RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_2)
1085 /**
1086   * @}
1087   */
1088 #endif /* RCC_CDCCIP1R_SAI2BSEL */
1089 
1090 
1091 /** @defgroup RCCEx_SPI123_Clock_Source SPI1/2/3 Clock Source
1092   * @ingroup RTEMSBSPsARMSTM32H7
1093   * @{
1094   */
1095 #if defined(RCC_D2CCIP1R_SPI123SEL)
1096 #define RCC_SPI123CLKSOURCE_PLL         (0x00000000U)
1097 #define RCC_SPI123CLKSOURCE_PLL2         RCC_D2CCIP1R_SPI123SEL_0
1098 #define RCC_SPI123CLKSOURCE_PLL3         RCC_D2CCIP1R_SPI123SEL_1
1099 #define RCC_SPI123CLKSOURCE_PIN         (RCC_D2CCIP1R_SPI123SEL_0 | RCC_D2CCIP1R_SPI123SEL_1)
1100 #define RCC_SPI123CLKSOURCE_CLKP         RCC_D2CCIP1R_SPI123SEL_2
1101 #else
1102 #define RCC_SPI123CLKSOURCE_PLL         (0x00000000U)
1103 #define RCC_SPI123CLKSOURCE_PLL2         RCC_CDCCIP1R_SPI123SEL_0
1104 #define RCC_SPI123CLKSOURCE_PLL3         RCC_CDCCIP1R_SPI123SEL_1
1105 #define RCC_SPI123CLKSOURCE_PIN         (RCC_CDCCIP1R_SPI123SEL_0 | RCC_CDCCIP1R_SPI123SEL_1)
1106 #define RCC_SPI123CLKSOURCE_CLKP         RCC_CDCCIP1R_SPI123SEL_2
1107 #endif /* RCC_D2CCIP1R_SPI123SEL */
1108 /**
1109   * @}
1110   */
1111 
1112 /** @defgroup RCCEx_SPI1_Clock_Source SPI1 Clock Source
1113   * @ingroup RTEMSBSPsARMSTM32H7
1114   * @{
1115   */
1116 #define RCC_SPI1CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL
1117 #define RCC_SPI1CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2
1118 #define RCC_SPI1CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3
1119 #define RCC_SPI1CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN
1120 #define RCC_SPI1CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP
1121 
1122 /**
1123   * @}
1124   */
1125 
1126 /** @defgroup RCCEx_SPI2_Clock_Source SPI2 Clock Source
1127   * @ingroup RTEMSBSPsARMSTM32H7
1128   * @{
1129   */
1130 #define RCC_SPI2CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL
1131 #define RCC_SPI2CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2
1132 #define RCC_SPI2CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3
1133 #define RCC_SPI2CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN
1134 #define RCC_SPI2CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP
1135 
1136 /**
1137   * @}
1138   */
1139 
1140 /** @defgroup RCCEx_SPI3_Clock_Source SPI3 Clock Source
1141   * @ingroup RTEMSBSPsARMSTM32H7
1142   * @{
1143   */
1144 #define RCC_SPI3CLKSOURCE_PLL         RCC_SPI123CLKSOURCE_PLL
1145 #define RCC_SPI3CLKSOURCE_PLL2        RCC_SPI123CLKSOURCE_PLL2
1146 #define RCC_SPI3CLKSOURCE_PLL3        RCC_SPI123CLKSOURCE_PLL3
1147 #define RCC_SPI3CLKSOURCE_PIN         RCC_SPI123CLKSOURCE_PIN
1148 #define RCC_SPI3CLKSOURCE_CLKP        RCC_SPI123CLKSOURCE_CLKP
1149 
1150 /**
1151   * @}
1152   */
1153 
1154 /** @defgroup RCCEx_SPI45_Clock_Source SPI4/5 Clock Source
1155   * @ingroup RTEMSBSPsARMSTM32H7
1156   * @{
1157   */
1158 #if defined(RCC_D2CCIP1R_SPI45SEL)
1159 #define RCC_SPI45CLKSOURCE_D2PCLK2     (0x00000000U)
1160 #define RCC_SPI45CLKSOURCE_PCLK2        RCC_SPI45CLKSOURCE_D2PCLK2
1161 #define RCC_SPI45CLKSOURCE_PLL2         RCC_D2CCIP1R_SPI45SEL_0
1162 #define RCC_SPI45CLKSOURCE_PLL3         RCC_D2CCIP1R_SPI45SEL_1
1163 #define RCC_SPI45CLKSOURCE_HSI         (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_1)
1164 #define RCC_SPI45CLKSOURCE_CSI          RCC_D2CCIP1R_SPI45SEL_2
1165 #define RCC_SPI45CLKSOURCE_HSE         (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_2)
1166 #else
1167 #define RCC_SPI45CLKSOURCE_CDPCLK2     (0x00000000U)
1168 /* aliases */
1169 #define RCC_SPI45CLKSOURCE_D2PCLK2      RCC_SPI45CLKSOURCE_CDPCLK2  /* D2PCLK2 is used in STM32H74xxx, STM32H75xxx, STM32H72xxx and STM32H73xxx family lines */
1170 #define RCC_SPI45CLKSOURCE_PCLK2        RCC_SPI45CLKSOURCE_CDPCLK2
1171 #define RCC_SPI45CLKSOURCE_PLL2         RCC_CDCCIP1R_SPI45SEL_0
1172 #define RCC_SPI45CLKSOURCE_PLL3         RCC_CDCCIP1R_SPI45SEL_1
1173 #define RCC_SPI45CLKSOURCE_HSI         (RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_1)
1174 #define RCC_SPI45CLKSOURCE_CSI          RCC_CDCCIP1R_SPI45SEL_2
1175 #define RCC_SPI45CLKSOURCE_HSE         (RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_2)
1176 #endif /* RCC_D2CCIP1R_SPI45SEL */
1177 /**
1178   * @}
1179   */
1180 
1181 /** @defgroup RCCEx_SPI4_Clock_Source SPI4 Clock Source
1182   * @ingroup RTEMSBSPsARMSTM32H7
1183   * @{
1184   */
1185 #define RCC_SPI4CLKSOURCE_D2PCLK2     RCC_SPI45CLKSOURCE_D2PCLK2
1186 #define RCC_SPI4CLKSOURCE_PLL2        RCC_SPI45CLKSOURCE_PLL2
1187 #define RCC_SPI4CLKSOURCE_PLL3        RCC_SPI45CLKSOURCE_PLL3
1188 #define RCC_SPI4CLKSOURCE_HSI         RCC_SPI45CLKSOURCE_HSI
1189 #define RCC_SPI4CLKSOURCE_CSI         RCC_SPI45CLKSOURCE_CSI
1190 #define RCC_SPI4CLKSOURCE_HSE         RCC_SPI45CLKSOURCE_HSE
1191 
1192 /**
1193   * @}
1194   */
1195 
1196 /** @defgroup RCCEx_SPI5_Clock_Source SPI5 Clock Source
1197   * @ingroup RTEMSBSPsARMSTM32H7
1198   * @{
1199   */
1200 #define RCC_SPI5CLKSOURCE_D2PCLK2     RCC_SPI45CLKSOURCE_D2PCLK2
1201 #define RCC_SPI5CLKSOURCE_PLL2        RCC_SPI45CLKSOURCE_PLL2
1202 #define RCC_SPI5CLKSOURCE_PLL3        RCC_SPI45CLKSOURCE_PLL3
1203 #define RCC_SPI5CLKSOURCE_HSI         RCC_SPI45CLKSOURCE_HSI
1204 #define RCC_SPI5CLKSOURCE_CSI         RCC_SPI45CLKSOURCE_CSI
1205 #define RCC_SPI5CLKSOURCE_HSE         RCC_SPI45CLKSOURCE_HSE
1206 
1207 /**
1208   * @}
1209   */
1210 
1211 /** @defgroup RCCEx_SPI6_Clock_Source SPI6 Clock Source
1212   * @ingroup RTEMSBSPsARMSTM32H7
1213   * @{
1214   */
1215 #if defined(RCC_D3CCIPR_SPI6SEL)
1216 #define RCC_SPI6CLKSOURCE_D3PCLK1     (0x00000000U)
1217 #define RCC_SPI6CLKSOURCE_PCLK4        RCC_SPI6CLKSOURCE_D3PCLK1
1218 #define RCC_SPI6CLKSOURCE_PLL2         RCC_D3CCIPR_SPI6SEL_0
1219 #define RCC_SPI6CLKSOURCE_PLL3         RCC_D3CCIPR_SPI6SEL_1
1220 #define RCC_SPI6CLKSOURCE_HSI         (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_1)
1221 #define RCC_SPI6CLKSOURCE_CSI          RCC_D3CCIPR_SPI6SEL_2
1222 #define RCC_SPI6CLKSOURCE_HSE         (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_2)
1223 #else
1224 #define RCC_SPI6CLKSOURCE_SRDPCLK4    (0x00000000U)
1225 /* alias */
1226 #define RCC_SPI6CLKSOURCE_D3PCLK1      RCC_SPI6CLKSOURCE_SRDPCLK4  /* D3PCLK1 is used in STM32H74xxx, STM32H75xxx, STM32H72xxx and STM32H73xxx family lines */
1227 #define RCC_SPI6CLKSOURCE_PCLK4        RCC_SPI6CLKSOURCE_SRDPCLK4
1228 #define RCC_SPI6CLKSOURCE_PLL2         RCC_SRDCCIPR_SPI6SEL_0
1229 #define RCC_SPI6CLKSOURCE_PLL3         RCC_SRDCCIPR_SPI6SEL_1
1230 #define RCC_SPI6CLKSOURCE_HSI         (RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_1)
1231 #define RCC_SPI6CLKSOURCE_CSI          RCC_SRDCCIPR_SPI6SEL_2
1232 #define RCC_SPI6CLKSOURCE_HSE         (RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_2)
1233 #define RCC_SPI6CLKSOURCE_PIN         (RCC_SRDCCIPR_SPI6SEL_1 | RCC_SRDCCIPR_SPI6SEL_2)
1234 #endif /* RCC_D3CCIPR_SPI6SEL */
1235 
1236 /**
1237   * @}
1238   */
1239 
1240 
1241 #if defined(SAI4_Block_A)
1242 /** @defgroup RCCEx_SAI4A_Clock_Source SAI4A Clock Source
1243   * @ingroup RTEMSBSPsARMSTM32H7
1244   * @{
1245   */
1246 #define RCC_SAI4ACLKSOURCE_PLL         (0x00000000U)
1247 #define RCC_SAI4ACLKSOURCE_PLL2         RCC_D3CCIPR_SAI4ASEL_0
1248 #define RCC_SAI4ACLKSOURCE_PLL3         RCC_D3CCIPR_SAI4ASEL_1
1249 #define RCC_SAI4ACLKSOURCE_PIN         (RCC_D3CCIPR_SAI4ASEL_0 | RCC_D3CCIPR_SAI4ASEL_1)
1250 #define RCC_SAI4ACLKSOURCE_CLKP         RCC_D3CCIPR_SAI4ASEL_2
1251 #if defined(RCC_VER_3_0)
1252 #define RCC_SAI4ACLKSOURCE_SPDIF       (RCC_D3CCIPR_SAI4ASEL_2 | RCC_D3CCIPR_SAI4ASEL_0)
1253 #endif /*RCC_VER_3_0*/
1254 
1255 /**
1256   * @}
1257   */
1258 #endif /* SAI4_Block_A */
1259 
1260 
1261 
1262 #if defined(SAI4_Block_B)
1263 /** @defgroup RCCEx_SAI4B_Clock_Source SAI4B Clock Source
1264   * @ingroup RTEMSBSPsARMSTM32H7
1265   * @{
1266   */
1267 #define RCC_SAI4BCLKSOURCE_PLL         (0x00000000U)
1268 #define RCC_SAI4BCLKSOURCE_PLL2         RCC_D3CCIPR_SAI4BSEL_0
1269 #define RCC_SAI4BCLKSOURCE_PLL3         RCC_D3CCIPR_SAI4BSEL_1
1270 #define RCC_SAI4BCLKSOURCE_PIN         (RCC_D3CCIPR_SAI4BSEL_0 | RCC_D3CCIPR_SAI4BSEL_1)
1271 #define RCC_SAI4BCLKSOURCE_CLKP         RCC_D3CCIPR_SAI4BSEL_2
1272 #if defined(RCC_VER_3_0)
1273 #define RCC_SAI4BCLKSOURCE_SPDIF       (RCC_D3CCIPR_SAI4BSEL_2 | RCC_D3CCIPR_SAI4BSEL_0)
1274 #endif /* RCC_VER_3_0 */
1275 
1276 /**
1277   * @}
1278   */
1279 #endif /* SAI4_Block_B */
1280 
1281 
1282 /** @defgroup RCCEx_LPTIM1_Clock_Source  RCCEx LPTIM1 Clock Source
1283   * @ingroup RTEMSBSPsARMSTM32H7
1284   * @{
1285   */
1286 #if defined(RCC_D2CCIP2R_LPTIM1SEL)
1287 #define RCC_LPTIM1CLKSOURCE_D2PCLK1        (0x00000000U)
1288 /* alias */
1289 #define RCC_LPTIM1CLKSOURCE_PCLK1         RCC_LPTIM1CLKSOURCE_D2PCLK1
1290 #define RCC_LPTIM1CLKSOURCE_PLL2          RCC_D2CCIP2R_LPTIM1SEL_0
1291 #define RCC_LPTIM1CLKSOURCE_PLL3          RCC_D2CCIP2R_LPTIM1SEL_1
1292 #define RCC_LPTIM1CLKSOURCE_LSE          (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_1)
1293 #define RCC_LPTIM1CLKSOURCE_LSI           RCC_D2CCIP2R_LPTIM1SEL_2
1294 #define RCC_LPTIM1CLKSOURCE_CLKP         (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_2)
1295 #else
1296 #define RCC_LPTIM1CLKSOURCE_CDPCLK1        (0x00000000U)
1297 /* alias */
1298 #define RCC_LPTIM1CLKSOURCE_PCLK1         RCC_LPTIM1CLKSOURCE_CDPCLK1
1299 #define RCC_LPTIM1CLKSOURCE_D2PCLK1       RCC_LPTIM1CLKSOURCE_CDPCLK1
1300 #define RCC_LPTIM1CLKSOURCE_PLL2          RCC_CDCCIP2R_LPTIM1SEL_0
1301 #define RCC_LPTIM1CLKSOURCE_PLL3          RCC_CDCCIP2R_LPTIM1SEL_1
1302 #define RCC_LPTIM1CLKSOURCE_LSE          (RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_1)
1303 #define RCC_LPTIM1CLKSOURCE_LSI           RCC_CDCCIP2R_LPTIM1SEL_2
1304 #define RCC_LPTIM1CLKSOURCE_CLKP         (RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_2)
1305 #endif /* RCC_D2CCIP2R_LPTIM1SEL */
1306 
1307 /**
1308   * @}
1309   */
1310 
1311 /** @defgroup RCCEx_LPTIM2_Clock_Source  RCCEx LPTIM2 Clock Source
1312   * @ingroup RTEMSBSPsARMSTM32H7
1313   * @{
1314   */
1315 #if defined(RCC_D3CCIPR_LPTIM2SEL)
1316 #define RCC_LPTIM2CLKSOURCE_D3PCLK1       (0x00000000U)
1317 /* alias */
1318 #define RCC_LPTIM2CLKSOURCE_PCLK4         RCC_LPTIM2CLKSOURCE_D3PCLK1
1319 #define RCC_LPTIM2CLKSOURCE_PLL2          RCC_D3CCIPR_LPTIM2SEL_0
1320 #define RCC_LPTIM2CLKSOURCE_PLL3          RCC_D3CCIPR_LPTIM2SEL_1
1321 #define RCC_LPTIM2CLKSOURCE_LSE          (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_1)
1322 #define RCC_LPTIM2CLKSOURCE_LSI           RCC_D3CCIPR_LPTIM2SEL_2
1323 #define RCC_LPTIM2CLKSOURCE_CLKP         (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_2)
1324 #else
1325 #define RCC_LPTIM2CLKSOURCE_SRDPCLK4       (0x00000000U)
1326 /*alias*/
1327 #define RCC_LPTIM2CLKSOURCE_PCLK4         RCC_LPTIM2CLKSOURCE_SRDPCLK4
1328 #define RCC_LPTIM2CLKSOURCE_D3PCLK1       RCC_LPTIM2CLKSOURCE_SRDPCLK4
1329 #define RCC_LPTIM2CLKSOURCE_PLL2          RCC_SRDCCIPR_LPTIM2SEL_0
1330 #define RCC_LPTIM2CLKSOURCE_PLL3          RCC_SRDCCIPR_LPTIM2SEL_1
1331 #define RCC_LPTIM2CLKSOURCE_LSE          (RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_1)
1332 #define RCC_LPTIM2CLKSOURCE_LSI           RCC_SRDCCIPR_LPTIM2SEL_2
1333 #define RCC_LPTIM2CLKSOURCE_CLKP         (RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_2)
1334 #endif /* RCC_D3CCIPR_LPTIM2SEL */
1335 /**
1336   * @}
1337   */
1338 
1339 /** @defgroup RCCEx_LPTIM345_Clock_Source  RCCEx LPTIM3/4/5 Clock Source
1340   * @ingroup RTEMSBSPsARMSTM32H7
1341   * @{
1342   */
1343 #if defined(RCC_D3CCIPR_LPTIM345SEL)
1344 #define RCC_LPTIM345CLKSOURCE_D3PCLK1        (0x00000000U)
1345 /* alias*/
1346 #define RCC_LPTIM345CLKSOURCE_PCLK4         RCC_LPTIM345CLKSOURCE_D3PCLK1
1347 #define RCC_LPTIM345CLKSOURCE_PLL2          RCC_D3CCIPR_LPTIM345SEL_0
1348 #define RCC_LPTIM345CLKSOURCE_PLL3          RCC_D3CCIPR_LPTIM345SEL_1
1349 #define RCC_LPTIM345CLKSOURCE_LSE          (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_1)
1350 #define RCC_LPTIM345CLKSOURCE_LSI           RCC_D3CCIPR_LPTIM345SEL_2
1351 #define RCC_LPTIM345CLKSOURCE_CLKP         (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_2)
1352 #else
1353 #define RCC_LPTIM345CLKSOURCE_SRDPCLK4      (0x00000000U)
1354 /* alias */
1355 #define RCC_LPTIM345CLKSOURCE_PCLK4         RCC_LPTIM345CLKSOURCE_SRDPCLK4
1356 #define RCC_LPTIM345CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_SRDPCLK4
1357 #define RCC_LPTIM345CLKSOURCE_PLL2          RCC_SRDCCIPR_LPTIM3SEL_0
1358 #define RCC_LPTIM345CLKSOURCE_PLL3          RCC_SRDCCIPR_LPTIM3SEL_1
1359 #define RCC_LPTIM345CLKSOURCE_LSE          (RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_1)
1360 #define RCC_LPTIM345CLKSOURCE_LSI           RCC_SRDCCIPR_LPTIM3SEL_2
1361 #define RCC_LPTIM345CLKSOURCE_CLKP         (RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_2)
1362 #endif /* RCC_D3CCIPR_LPTIM345SEL */
1363 /**
1364   * @}
1365   */
1366 
1367 /** @defgroup RCCEx_LPTIM3_Clock_Source  RCCEx LPTIM3 Clock Source
1368   * @ingroup RTEMSBSPsARMSTM32H7
1369   * @{
1370   */
1371 #define RCC_LPTIM3CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1
1372 #define RCC_LPTIM3CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2
1373 #define RCC_LPTIM3CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3
1374 #define RCC_LPTIM3CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE
1375 #define RCC_LPTIM3CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI
1376 #define RCC_LPTIM3CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP
1377 
1378 /**
1379   * @}
1380   */
1381 #if defined(LPTIM4)
1382 /** @defgroup RCCEx_LPTIM4_Clock_Source  RCCEx LPTIM4 Clock Source
1383   * @ingroup RTEMSBSPsARMSTM32H7
1384   * @{
1385   */
1386 #define RCC_LPTIM4CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1
1387 #define RCC_LPTIM4CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2
1388 #define RCC_LPTIM4CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3
1389 #define RCC_LPTIM4CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE
1390 #define RCC_LPTIM4CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI
1391 #define RCC_LPTIM4CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP
1392 /**
1393   * @}
1394   */
1395 #endif /* LPTIM4 */
1396 
1397 #if defined(LPTIM5)
1398 /** @defgroup RCCEx_LPTIM5_Clock_Source  RCCEx LPTIM5 Clock Source
1399   * @ingroup RTEMSBSPsARMSTM32H7
1400   * @{
1401   */
1402 #define RCC_LPTIM5CLKSOURCE_D3PCLK1       RCC_LPTIM345CLKSOURCE_D3PCLK1
1403 #define RCC_LPTIM5CLKSOURCE_PLL2          RCC_LPTIM345CLKSOURCE_PLL2
1404 #define RCC_LPTIM5CLKSOURCE_PLL3          RCC_LPTIM345CLKSOURCE_PLL3
1405 #define RCC_LPTIM5CLKSOURCE_LSE           RCC_LPTIM345CLKSOURCE_LSE
1406 #define RCC_LPTIM5CLKSOURCE_LSI           RCC_LPTIM345CLKSOURCE_LSI
1407 #define RCC_LPTIM5CLKSOURCE_CLKP          RCC_LPTIM345CLKSOURCE_CLKP
1408 
1409 /**
1410   * @}
1411   */
1412 #endif /* LPTIM5 */
1413 
1414 #if defined(QUADSPI)
1415 /** @defgroup RCCEx_QSPI_Clock_Source  RCCEx QSPI Clock Source
1416   * @ingroup RTEMSBSPsARMSTM32H7
1417   * @{
1418   */
1419 #define RCC_QSPICLKSOURCE_D1HCLK       (0x00000000U)
1420 #define RCC_QSPICLKSOURCE_PLL          RCC_D1CCIPR_QSPISEL_0
1421 #define RCC_QSPICLKSOURCE_PLL2         RCC_D1CCIPR_QSPISEL_1
1422 #define RCC_QSPICLKSOURCE_CLKP         RCC_D1CCIPR_QSPISEL
1423 
1424 /**
1425   * @}
1426   */
1427 #endif /* QUADSPI */
1428 
1429 
1430 #if defined(OCTOSPI1) || defined(OCTOSPI2)
1431 /** @defgroup RCCEx_OSPI_Clock_Source  RCCEx OSPI Clock Source
1432   * @ingroup RTEMSBSPsARMSTM32H7
1433   * @{
1434   */
1435 
1436 #if defined(RCC_CDCCIPR_OCTOSPISEL)
1437 #define RCC_OSPICLKSOURCE_CDHCLK       (0x00000000U)
1438 /*aliases*/
1439 #define RCC_OSPICLKSOURCE_D1HCLK       RCC_OSPICLKSOURCE_CDHCLK
1440 #define RCC_OSPICLKSOURCE_HCLK         RCC_OSPICLKSOURCE_CDHCLK
1441 #define RCC_OSPICLKSOURCE_PLL          RCC_CDCCIPR_OCTOSPISEL_0
1442 #define RCC_OSPICLKSOURCE_PLL2         RCC_CDCCIPR_OCTOSPISEL_1
1443 #define RCC_OSPICLKSOURCE_CLKP         RCC_CDCCIPR_OCTOSPISEL
1444 #else
1445 #define RCC_OSPICLKSOURCE_D1HCLK       (0x00000000U)
1446 #define RCC_OSPICLKSOURCE_HCLK         RCC_OSPICLKSOURCE_D1HCLK
1447 #define RCC_OSPICLKSOURCE_PLL          RCC_D1CCIPR_OCTOSPISEL_0
1448 #define RCC_OSPICLKSOURCE_PLL2         RCC_D1CCIPR_OCTOSPISEL_1
1449 #define RCC_OSPICLKSOURCE_CLKP         RCC_D1CCIPR_OCTOSPISEL
1450 #endif /* RCC_CDCCIPR_OCTOSPISEL */
1451 
1452 
1453 /**
1454   * @}
1455   */
1456 #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
1457 
1458 #if defined(DSI)
1459 /** @defgroup RCCEx_DSI_Clock_Source  RCCEx DSI Clock Source
1460   * @ingroup RTEMSBSPsARMSTM32H7
1461   * @{
1462   */
1463 #define RCC_DSICLKSOURCE_PHY       (0x00000000U)
1464 #define RCC_DSICLKSOURCE_PLL2       RCC_D1CCIPR_DSISEL
1465 
1466 /**
1467   * @}
1468   */
1469 #endif /* DSI */
1470 
1471 /** @defgroup RCCEx_FMC_Clock_Source  RCCEx FMC Clock Source
1472   * @ingroup RTEMSBSPsARMSTM32H7
1473   * @{
1474   */
1475 #if defined(RCC_D1CCIPR_FMCSEL)
1476 #define RCC_FMCCLKSOURCE_D1HCLK       (0x00000000U)
1477 #define RCC_FMCCLKSOURCE_HCLK         RCC_FMCCLKSOURCE_D1HCLK
1478 #define RCC_FMCCLKSOURCE_PLL          RCC_D1CCIPR_FMCSEL_0
1479 #define RCC_FMCCLKSOURCE_PLL2         RCC_D1CCIPR_FMCSEL_1
1480 #define RCC_FMCCLKSOURCE_CLKP         RCC_D1CCIPR_FMCSEL
1481 #else
1482 #define RCC_FMCCLKSOURCE_CDHCLK       (0x00000000U)
1483 #define RCC_FMCCLKSOURCE_HCLK         RCC_FMCCLKSOURCE_CDHCLK
1484 /*alias*/
1485 #define RCC_FMCCLKSOURCE_D1HCLK       RCC_FMCCLKSOURCE_CDHCLK
1486 #define RCC_FMCCLKSOURCE_PLL          RCC_CDCCIPR_FMCSEL_0
1487 #define RCC_FMCCLKSOURCE_PLL2         RCC_CDCCIPR_FMCSEL_1
1488 #define RCC_FMCCLKSOURCE_CLKP         RCC_CDCCIPR_FMCSEL
1489 #endif /* RCC_D1CCIPR_FMCSEL */
1490 /**
1491   * @}
1492   */
1493 
1494 #if defined(FDCAN1) || defined(FDCAN2)
1495 /** @defgroup RCCEx_FDCAN_Clock_Source  RCCEx FDCAN Clock Source
1496   * @ingroup RTEMSBSPsARMSTM32H7
1497   * @{
1498   */
1499 #if defined(RCC_D2CCIP1R_FDCANSEL)
1500 #define RCC_FDCANCLKSOURCE_HSE         (0x00000000U)
1501 #define RCC_FDCANCLKSOURCE_PLL          RCC_D2CCIP1R_FDCANSEL_0
1502 #define RCC_FDCANCLKSOURCE_PLL2         RCC_D2CCIP1R_FDCANSEL_1
1503 #else
1504 #define RCC_FDCANCLKSOURCE_HSE         (0x00000000U)
1505 #define RCC_FDCANCLKSOURCE_PLL          RCC_CDCCIP1R_FDCANSEL_0
1506 #define RCC_FDCANCLKSOURCE_PLL2         RCC_CDCCIP1R_FDCANSEL_1
1507 #endif /* D3_SRAM_BASE */
1508 /**
1509   * @}
1510   */
1511 #endif /*FDCAN1 || FDCAN2*/
1512 
1513 
1514 /** @defgroup RCCEx_SDMMC_Clock_Source  RCCEx SDMMC Clock Source
1515   * @ingroup RTEMSBSPsARMSTM32H7
1516   * @{
1517   */
1518 #if defined(RCC_D1CCIPR_SDMMCSEL)
1519 #define RCC_SDMMCCLKSOURCE_PLL           (0x00000000U)
1520 #define RCC_SDMMCCLKSOURCE_PLL2           RCC_D1CCIPR_SDMMCSEL
1521 #else
1522 #define RCC_SDMMCCLKSOURCE_PLL           (0x00000000U)
1523 #define RCC_SDMMCCLKSOURCE_PLL2           RCC_CDCCIPR_SDMMCSEL
1524 #endif /* RCC_D1CCIPR_SDMMCSEL */
1525 /**
1526   * @}
1527   */
1528 
1529 
1530 /** @defgroup RCCEx_ADC_Clock_Source  RCCEx ADC Clock Source
1531   * @ingroup RTEMSBSPsARMSTM32H7
1532   * @{
1533   */
1534 #if defined(RCC_D3CCIPR_ADCSEL_0)
1535 #define RCC_ADCCLKSOURCE_PLL2       (0x00000000U)
1536 #define RCC_ADCCLKSOURCE_PLL3       RCC_D3CCIPR_ADCSEL_0
1537 #define RCC_ADCCLKSOURCE_CLKP       RCC_D3CCIPR_ADCSEL_1
1538 #else
1539 #define RCC_ADCCLKSOURCE_PLL2       (0x00000000U)
1540 #define RCC_ADCCLKSOURCE_PLL3       RCC_SRDCCIPR_ADCSEL_0
1541 #define RCC_ADCCLKSOURCE_CLKP       RCC_SRDCCIPR_ADCSEL_1
1542 #endif /* RCC_D3CCIPR_ADCSEL_0  */
1543 /**
1544   * @}
1545   */
1546 
1547 /** @defgroup RCCEx_SWPMI1_Clock_Source  RCCEx SWPMI1 Clock Source
1548   * @ingroup RTEMSBSPsARMSTM32H7
1549   * @{
1550   */
1551 #if defined(RCC_D2CCIP1R_SWPSEL)
1552 #define RCC_SWPMI1CLKSOURCE_D2PCLK1       (0x00000000U)
1553 #define RCC_SWPMI1CLKSOURCE_HSI            RCC_D2CCIP1R_SWPSEL
1554 #else
1555 #define RCC_SWPMI1CLKSOURCE_CDPCLK1       (0x00000000U)
1556 /* alias */
1557 #define RCC_SWPMI1CLKSOURCE_D2PCLK1        RCC_SWPMI1CLKSOURCE_CDPCLK1
1558 #define RCC_SWPMI1CLKSOURCE_HSI            RCC_CDCCIP1R_SWPSEL
1559 #endif /* RCC_D2CCIP1R_SWPSEL */
1560 /**
1561   * @}
1562   */
1563 
1564 /** @defgroup RCCEx_DFSDM1_Clock_Source  RCCEx DFSDM1 Clock Source
1565   * @ingroup RTEMSBSPsARMSTM32H7
1566   * @{
1567   */
1568 #if defined(RCC_D2CCIP1R_DFSDM1SEL)
1569 #define RCC_DFSDM1CLKSOURCE_D2PCLK1        (0x00000000U)
1570 #define RCC_DFSDM1CLKSOURCE_SYS            RCC_D2CCIP1R_DFSDM1SEL
1571 #else
1572 #define RCC_DFSDM1CLKSOURCE_CDPCLK1        (0x00000000U)
1573 /* alias */
1574 #define RCC_DFSDM1CLKSOURCE_D2PCLK1        RCC_DFSDM1CLKSOURCE_CDPCLK1
1575 #define RCC_DFSDM1CLKSOURCE_SYS            RCC_CDCCIP1R_DFSDM1SEL
1576 #endif /* RCC_D2CCIP1R_DFSDM1SEL */
1577 /**
1578   * @}
1579   */
1580 
1581 #if defined(DFSDM2_BASE)
1582 /** @defgroup RCCEx_DFSDM2_Clock_Source  RCCEx DFSDM2 Clock Source
1583   * @ingroup RTEMSBSPsARMSTM32H7
1584   * @{
1585   */
1586 #define RCC_DFSDM2CLKSOURCE_SRDPCLK4       (0x00000000U)
1587 /* alias */
1588 #define RCC_DFSDM2CLKSOURCE_SRDPCLK1       RCC_DFSDM2CLKSOURCE_SRDPCLK4
1589 #define RCC_DFSDM2CLKSOURCE_SYS            RCC_SRDCCIPR_DFSDM2SEL
1590 /**
1591   * @}
1592   */
1593 #endif /* DFSDM2 */
1594 
1595 /** @defgroup RCCEx_SPDIFRX_Clock_Source  RCCEx SPDIFRX Clock Source
1596   * @ingroup RTEMSBSPsARMSTM32H7
1597   * @{
1598   */
1599 #if defined(RCC_D2CCIP1R_SPDIFSEL_0)
1600 #define RCC_SPDIFRXCLKSOURCE_PLL        (0x00000000U)
1601 #define RCC_SPDIFRXCLKSOURCE_PLL2       RCC_D2CCIP1R_SPDIFSEL_0
1602 #define RCC_SPDIFRXCLKSOURCE_PLL3       RCC_D2CCIP1R_SPDIFSEL_1
1603 #define RCC_SPDIFRXCLKSOURCE_HSI        RCC_D2CCIP1R_SPDIFSEL
1604 #else
1605 #define RCC_SPDIFRXCLKSOURCE_PLL        (0x00000000U)
1606 #define RCC_SPDIFRXCLKSOURCE_PLL2       RCC_CDCCIP1R_SPDIFSEL_0
1607 #define RCC_SPDIFRXCLKSOURCE_PLL3       RCC_CDCCIP1R_SPDIFSEL_1
1608 #define RCC_SPDIFRXCLKSOURCE_HSI        RCC_CDCCIP1R_SPDIFSEL
1609 #endif /* RCC_D2CCIP1R_SPDIFSEL_0 */
1610 /**
1611   * @}
1612   */
1613 
1614 /** @defgroup RCCEx_CEC_Clock_Source  RCCEx CEC Clock Source
1615   * @ingroup RTEMSBSPsARMSTM32H7
1616   * @{
1617   */
1618 #if defined(RCC_D2CCIP2R_CECSEL_0)
1619 #define RCC_CECCLKSOURCE_LSE        (0x00000000U)
1620 #define RCC_CECCLKSOURCE_LSI         RCC_D2CCIP2R_CECSEL_0
1621 #define RCC_CECCLKSOURCE_CSI         RCC_D2CCIP2R_CECSEL_1
1622 #else
1623 #define RCC_CECCLKSOURCE_LSE        (0x00000000U)
1624 #define RCC_CECCLKSOURCE_LSI         RCC_CDCCIP2R_CECSEL_0
1625 #define RCC_CECCLKSOURCE_CSI         RCC_CDCCIP2R_CECSEL_1
1626 #endif /* RCC_D2CCIP2R_CECSEL_0 */
1627 /**
1628   * @}
1629   */
1630 
1631 
1632 /** @defgroup RCCEx_CLKP_Clock_Source  RCCEx CLKP Clock Source
1633   * @ingroup RTEMSBSPsARMSTM32H7
1634   * @{
1635   */
1636 #if defined(RCC_D1CCIPR_CKPERSEL_0)
1637 #define RCC_CLKPSOURCE_HSI        (0x00000000U)
1638 #define RCC_CLKPSOURCE_CSI         RCC_D1CCIPR_CKPERSEL_0
1639 #define RCC_CLKPSOURCE_HSE         RCC_D1CCIPR_CKPERSEL_1
1640 #else
1641 #define RCC_CLKPSOURCE_HSI        (0x00000000U)
1642 #define RCC_CLKPSOURCE_CSI         RCC_CDCCIPR_CKPERSEL_0
1643 #define RCC_CLKPSOURCE_HSE         RCC_CDCCIPR_CKPERSEL_1
1644 #endif /* RCC_D1CCIPR_CKPERSEL_0 */
1645 /**
1646   * @}
1647   */
1648 
1649 /** @defgroup RCCEx_TIM_Prescaler_Selection RCCEx TIM Prescaler Selection
1650   * @ingroup RTEMSBSPsARMSTM32H7
1651   * @{
1652   */
1653 #define RCC_TIMPRES_DESACTIVATED        (0x00000000U)
1654 #define RCC_TIMPRES_ACTIVATED            RCC_CFGR_TIMPRE
1655 
1656 /**
1657   * @}
1658   */
1659 
1660 #if defined(DUAL_CORE)
1661 
1662 /** @defgroup RCCEx_RCC_BootCx RCCEx RCC BootCx
1663   * @ingroup RTEMSBSPsARMSTM32H7
1664   * @{
1665   */
1666 #define RCC_BOOT_C1        RCC_GCR_BOOT_C1
1667 #define RCC_BOOT_C2        RCC_GCR_BOOT_C2
1668 
1669 /**
1670   * @}
1671   */
1672 #endif /*DUAL_CORE*/
1673 
1674 #if defined(DUAL_CORE)
1675 /** @defgroup RCCEx_RCC_WWDGx  RCCEx RCC WWDGx
1676   * @ingroup RTEMSBSPsARMSTM32H7
1677   * @{
1678   */
1679 #define RCC_WWDG1        RCC_GCR_WW1RSC
1680 #define RCC_WWDG2        RCC_GCR_WW2RSC
1681 
1682 /**
1683   * @}
1684   */
1685 
1686 #else
1687 
1688 /** @defgroup RCCEx_RCC_WWDGx  RCCEx RCC WWDGx
1689   * @ingroup RTEMSBSPsARMSTM32H7
1690   * @{
1691   */
1692 #define RCC_WWDG1        RCC_GCR_WW1RSC
1693 
1694 /**
1695   * @}
1696   */
1697 
1698 #endif /*DUAL_CORE*/
1699 
1700 /** @defgroup RCCEx_EXTI_LINE_LSECSS  RCC LSE CSS external interrupt line
1701   * @ingroup RTEMSBSPsARMSTM32H7
1702   * @{
1703   */
1704 #define RCC_EXTI_LINE_LSECSS           EXTI_IMR1_IM18        /*!< External interrupt line 18 connected to the LSE CSS EXTI Line */
1705 /**
1706   * @}
1707   */
1708 
1709 /** @defgroup RCCEx_CRS_Status RCCEx CRS Status
1710   * @ingroup RTEMSBSPsARMSTM32H7
1711   * @{
1712   */
1713 #define RCC_CRS_NONE                   (0x00000000U)
1714 #define RCC_CRS_TIMEOUT                (0x00000001U)
1715 #define RCC_CRS_SYNCOK                 (0x00000002U)
1716 #define RCC_CRS_SYNCWARN               (0x00000004U)
1717 #define RCC_CRS_SYNCERR                (0x00000008U)
1718 #define RCC_CRS_SYNCMISS               (0x00000010U)
1719 #define RCC_CRS_TRIMOVF                (0x00000020U)
1720 /**
1721   * @}
1722   */
1723 
1724 /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource
1725   * @ingroup RTEMSBSPsARMSTM32H7
1726   * @{
1727   */
1728 #define RCC_CRS_SYNC_SOURCE_PIN       (0x00000000U)                            /*!< Synchro Signal source external pin, Available on STM32H7 Rev.B and above devices only */
1729 #define RCC_CRS_SYNC_SOURCE_LSE        CRS_CFGR_SYNCSRC_0                      /*!< Synchro Signal source LSE */
1730 #define RCC_CRS_SYNC_SOURCE_USB1       CRS_CFGR_SYNCSRC_1                      /*!< Synchro Signal source USB1 SOF (default) */
1731 #define RCC_CRS_SYNC_SOURCE_USB2      (CRS_CFGR_SYNCSRC_1|CRS_CFGR_SYNCSRC_0)  /*!< Synchro Signal source USB2 SOF */
1732 
1733 
1734 /**
1735   * @}
1736   */
1737 
1738 /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider
1739   * @ingroup RTEMSBSPsARMSTM32H7
1740   * @{
1741   */
1742 #define RCC_CRS_SYNC_DIV1        (0x00000000U)           /*!< Synchro Signal not divided (default) */
1743 #define RCC_CRS_SYNC_DIV2        CRS_CFGR_SYNCDIV_0                         /*!< Synchro Signal divided by 2 */
1744 #define RCC_CRS_SYNC_DIV4        CRS_CFGR_SYNCDIV_1                         /*!< Synchro Signal divided by 4 */
1745 #define RCC_CRS_SYNC_DIV8        (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0)  /*!< Synchro Signal divided by 8 */
1746 #define RCC_CRS_SYNC_DIV16       CRS_CFGR_SYNCDIV_2                        /*!< Synchro Signal divided by 16 */
1747 #define RCC_CRS_SYNC_DIV32       (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */
1748 #define RCC_CRS_SYNC_DIV64       (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */
1749 #define RCC_CRS_SYNC_DIV128      CRS_CFGR_SYNCDIV                         /*!< Synchro Signal divided by 128 */
1750 /**
1751   * @}
1752   */
1753 
1754 /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity
1755   * @ingroup RTEMSBSPsARMSTM32H7
1756   * @{
1757   */
1758 #define RCC_CRS_SYNC_POLARITY_RISING   (0x00000000U) /*!< Synchro Active on rising edge (default) */
1759 #define RCC_CRS_SYNC_POLARITY_FALLING  CRS_CFGR_SYNCPOL        /*!< Synchro Active on falling edge */
1760 /**
1761   * @}
1762   */
1763 
1764 /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault
1765   * @ingroup RTEMSBSPsARMSTM32H7
1766   * @{
1767   */
1768 #define RCC_CRS_RELOADVALUE_DEFAULT    (0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds
1769                                                                     to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */
1770 /**
1771   * @}
1772   */
1773 
1774 /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault
1775   * @ingroup RTEMSBSPsARMSTM32H7
1776   * @{
1777   */
1778 #define RCC_CRS_ERRORLIMIT_DEFAULT     (0x00000022U) /*!< Default Frequency error limit */
1779 /**
1780   * @}
1781   */
1782 
1783 /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault
1784   * @ingroup RTEMSBSPsARMSTM32H7
1785   * @{
1786   */
1787 #define RCC_CRS_HSI48CALIBRATION_DEFAULT (0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval.
1788                                                                       The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value
1789                                                                       corresponds to a higher output frequency */
1790 /**
1791   * @}
1792   */
1793 
1794 /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection
1795   * @ingroup RTEMSBSPsARMSTM32H7
1796   * @{
1797   */
1798 #define RCC_CRS_FREQERRORDIR_UP        (0x00000000U)   /*!< Upcounting direction, the actual frequency is above the target */
1799 #define RCC_CRS_FREQERRORDIR_DOWN      (CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */
1800 /**
1801   * @}
1802   */
1803 
1804 /** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources
1805   * @ingroup RTEMSBSPsARMSTM32H7
1806   * @{
1807   */
1808 #define RCC_CRS_IT_SYNCOK              CRS_CR_SYNCOKIE       /*!< SYNC event OK */
1809 #define RCC_CRS_IT_SYNCWARN            CRS_CR_SYNCWARNIE     /*!< SYNC warning */
1810 #define RCC_CRS_IT_ERR                 CRS_CR_ERRIE          /*!< Error */
1811 #define RCC_CRS_IT_ESYNC               CRS_CR_ESYNCIE        /*!< Expected SYNC */
1812 #define RCC_CRS_IT_SYNCERR             CRS_CR_ERRIE          /*!< SYNC error */
1813 #define RCC_CRS_IT_SYNCMISS            CRS_CR_ERRIE          /*!< SYNC missed */
1814 #define RCC_CRS_IT_TRIMOVF             CRS_CR_ERRIE          /*!< Trimming overflow or underflow */
1815 
1816 /**
1817   * @}
1818   */
1819 
1820 /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags
1821   * @ingroup RTEMSBSPsARMSTM32H7
1822   * @{
1823   */
1824 #define RCC_CRS_FLAG_SYNCOK            CRS_ISR_SYNCOKF       /*!< SYNC event OK flag     */
1825 #define RCC_CRS_FLAG_SYNCWARN          CRS_ISR_SYNCWARNF     /*!< SYNC warning flag      */
1826 #define RCC_CRS_FLAG_ERR               CRS_ISR_ERRF          /*!< Error flag        */
1827 #define RCC_CRS_FLAG_ESYNC             CRS_ISR_ESYNCF        /*!< Expected SYNC flag     */
1828 #define RCC_CRS_FLAG_SYNCERR           CRS_ISR_SYNCERR       /*!< SYNC error */
1829 #define RCC_CRS_FLAG_SYNCMISS          CRS_ISR_SYNCMISS      /*!< SYNC missed*/
1830 #define RCC_CRS_FLAG_TRIMOVF           CRS_ISR_TRIMOVF       /*!< Trimming overflow or underflow */
1831 
1832 /**
1833   * @}
1834   */
1835 
1836 /**
1837   * @}
1838   */
1839 
1840 
1841 
1842 /* Exported macro ------------------------------------------------------------*/
1843 /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
1844   * @ingroup RTEMSBSPsARMSTM32H7
1845   * @{
1846   */
1847 
1848 /** @brief  Macros to enable or disable PLL2.
1849   * @note   After enabling PLL2, the application software should wait on
1850   *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can
1851   *         be used as kernel clock source.
1852   * @note   PLL2 is disabled by hardware when entering STOP and STANDBY modes.
1853   */
1854 #define __HAL_RCC_PLL2_ENABLE()         SET_BIT(RCC->CR, RCC_CR_PLL2ON)
1855 #define __HAL_RCC_PLL2_DISABLE()        CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON)
1856 
1857 /**
1858   * @brief  Enables or disables each clock output (PLL2_P_CLK, PLL2_Q_CLK, PLL2_R_CLK)
1859   * @note   Enabling/disabling  those Clocks can be done only when the PLL2 is disabled,
1860   *         This is mainly used to save Power.
1861   * @param  __RCC_PLL2ClockOut__ Specifies the PLL2 clock to be outputted
1862   *          This parameter can be one of the following values:
1863   *            @arg RCC_PLL2_DIVP: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1864   *            @arg RCC_PLL2_DIVQ: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1865   *            @arg RCC_PLL2_DIVR: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1866   *
1867   * (*) : For stm32h72xxx and stm32h73xxx family lines and requires to enable the CPU_FREQ_BOOST flash option byte, 520MHZ otherwise.
1868   * (**) : For stm32h74xx and stm32h75xx family lines and requires the board to be connected on LDO regulator not SMPS, 400MHZ otherwise.
1869   * (***): For stm32h7a3xx, stm32h7b3xx and stm32h7b0xx family lines.
1870   *
1871   * @retval None
1872   */
1873 #define __HAL_RCC_PLL2CLKOUT_ENABLE(__RCC_PLL2ClockOut__)   SET_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))
1874 
1875 #define __HAL_RCC_PLL2CLKOUT_DISABLE(__RCC_PLL2ClockOut__)  CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))
1876 
1877 /**
1878   * @brief  Enables or disables Fractional Part Of The Multiplication Factor of PLL2 VCO
1879   * @note   Enabling/disabling  Fractional Part can be any time  without the need to stop the PLL2
1880   * @retval None
1881   */
1882 #define __HAL_RCC_PLL2FRACN_ENABLE()   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)
1883 
1884 #define __HAL_RCC_PLL2FRACN_DISABLE()  CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)
1885 
1886 /**
1887   * @brief  Macro to configures the PLL2  multiplication and division factors.
1888   * @note   This function must be used only when PLL2 is disabled.
1889   *
1890   * @param  __PLL2M__ specifies the division factor for PLL2 VCO input clock
1891   *          This parameter must be a number between 1 and 63.
1892   * @note   You have to set the PLLM parameter correctly to ensure that the VCO input
1893   *         frequency ranges from 1 to 16 MHz.
1894   *
1895   * @param  __PLL2N__ specifies the multiplication factor for PLL2 VCO output clock
1896   *          This parameter must be a number between 4 and 512 or between 8 and 420(*).
1897   * @note   You have to set the PLL2N parameter correctly to ensure that the VCO
1898   *         output frequency is between 150 and 420 MHz (when in medium VCO range) or
1899   *         between 192 and 836 MHZ or between 128 and 560 MHZ(*) (when in wide VCO range)
1900   *
1901   * @param  __PLL2P__ specifies the division factor for peripheral kernel clocks
1902   *          This parameter must be a number between 1 and 128.
1903   *
1904   * @param  __PLL2Q__ specifies the division factor for peripheral kernel clocks
1905   *          This parameter must be a number between 1 and 128.
1906   *
1907   * @param  __PLL2R__ specifies the division factor for peripheral kernel clocks
1908   *          This parameter must be a number between 1 and 128.
1909   *
1910   * @note   To insure an optimal behavior of the PLL when one of the post-divider (DIVP, DIVQ or DIVR)
1911   *         is not used, application shall clear the enable bit (DIVyEN) and assign lowest possible
1912   *         value to  __PLL2P__, __PLL2Q__ or __PLL2R__ parameters.
1913   * @retval None
1914   *
1915   *  (*) : For stm32h7a3xx and stm32h7b3xx family lines.
1916   */
1917 
1918 #define __HAL_RCC_PLL2_CONFIG(__PLL2M__, __PLL2N__, __PLL2P__, __PLL2Q__,__PLL2R__ ) \
1919                   do{ \
1920                        MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM2) , ( (__PLL2M__) <<12U));  \
1921                        WRITE_REG (RCC->PLL2DIVR , ( (((__PLL2N__) - 1U ) & RCC_PLL2DIVR_N2) | ((((__PLL2P__) -1U ) << 9U) & RCC_PLL2DIVR_P2) | \
1922                        ((((__PLL2Q__) -1U) << 16U) & RCC_PLL2DIVR_Q2) | ((((__PLL2R__)- 1U) << 24U) & RCC_PLL2DIVR_R2))); \
1923                     } while(0)
1924 
1925 /**
1926   * @brief  Macro to configures PLL2 clock Fractional Part Of The Multiplication Factor
1927   *
1928   * @note   These bits can be written at any time, allowing dynamic fine-tuning of the PLL2 VCO
1929   *
1930   * @param  __RCC_PLL2FRACN__ Specifies Fractional Part Of The Multiplication factor for PLL2 VCO
1931   *                           It should be a value between 0 and 8191
1932   * @note   Warning: the software has to set correctly these bits to insure that the VCO
1933   *                  output frequency is between its valid frequency range, which is:
1934   *                  192 to 836 MHz or 128 to 560 MHz(*) if PLL2VCOSEL = 0
1935   *                  150 to 420 MHz if PLL2VCOSEL = 1.
1936   *
1937   * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
1938   *
1939   * @retval None
1940   */
1941 #define  __HAL_RCC_PLL2FRACN_CONFIG(__RCC_PLL2FRACN__) \
1942                  MODIFY_REG(RCC->PLL2FRACR, RCC_PLL2FRACR_FRACN2,((uint32_t)(__RCC_PLL2FRACN__) << RCC_PLL2FRACR_FRACN2_Pos))
1943 
1944 /** @brief  Macro to select  the PLL2  reference frequency range.
1945   * @param  __RCC_PLL2VCIRange__ specifies the PLL2 input frequency range
1946   *         This parameter can be one of the following values:
1947   *            @arg RCC_PLL2VCIRANGE_0: Range frequency is between 1 and 2 MHz
1948   *            @arg RCC_PLL2VCIRANGE_1: Range frequency is between 2 and 4 MHz
1949   *            @arg RCC_PLL2VCIRANGE_2: Range frequency is between 4 and 8 MHz
1950   *            @arg RCC_PLL2VCIRANGE_3: Range frequency is between 8 and 16 MHz
1951   * @retval None
1952   */
1953 #define __HAL_RCC_PLL2_VCIRANGE(__RCC_PLL2VCIRange__) \
1954                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2RGE, (__RCC_PLL2VCIRange__))
1955 
1956 
1957 /** @brief  Macro to select  the PLL2  reference frequency range.
1958   * @param  __RCC_PLL2VCORange__ Specifies the PLL2 input frequency range
1959   *         This parameter can be one of the following values:
1960   *            @arg RCC_PLL2VCOWIDE: Range frequency is between 192 and 836 MHz or between 128 to 560 MHz(*)
1961   *            @arg RCC_PLL2VCOMEDIUM: Range frequency is between 150 and 420 MHz
1962   *
1963   * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
1964   *
1965   * @retval None
1966   */
1967 #define __HAL_RCC_PLL2_VCORANGE(__RCC_PLL2VCORange__) \
1968                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2VCOSEL, (__RCC_PLL2VCORange__))
1969 
1970 /** @brief  Macros to enable or disable the main PLL3.
1971   * @note   After enabling  PLL3, the application software should wait on
1972   *         PLL3RDY flag to be set indicating that PLL3 clock is stable and can
1973   *         be used as kernel clock source.
1974   * @note   PLL3 is disabled by hardware when entering STOP and STANDBY modes.
1975   */
1976 #define __HAL_RCC_PLL3_ENABLE()         SET_BIT(RCC->CR, RCC_CR_PLL3ON)
1977 #define __HAL_RCC_PLL3_DISABLE()        CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON)
1978 
1979 /**
1980   * @brief  Enables or disables Fractional Part Of The Multiplication Factor of PLL3 VCO
1981   * @note   Enabling/disabling  Fractional Part can be any time  without the need to stop the PLL3
1982   * @retval None
1983   */
1984 #define __HAL_RCC_PLL3FRACN_ENABLE()   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)
1985 
1986 #define __HAL_RCC_PLL3FRACN_DISABLE()  CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)
1987 
1988 /**
1989   * @brief  Enables or disables each clock output (PLL3_P_CLK, PLL3_Q_CLK, PLL3_R_CLK)
1990   * @note   Enabling/disabling  those Clocks can be done only when the PLL3 is disabled,
1991   *         This is mainly used to save Power.
1992   * @param  __RCC_PLL3ClockOut__ specifies the PLL3 clock to be outputted
1993   *          This parameter can be one of the following values:
1994   *            @arg RCC_PLL3_DIVP: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1995   *            @arg RCC_PLL3_DIVQ: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1996   *            @arg RCC_PLL3_DIVR: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
1997   *
1998   * (*) : For stm32h72xxx and stm32h73xxx family lines and requires to enable the CPU_FREQ_BOOST flash option byte, 520MHZ otherwise.
1999   * (**) : For stm32h74xx and stm32h75xx family lines and requires the board to be connected on LDO regulator not SMPS, 400MHZ otherwise.
2000   * (***): For stm32h7a3xx, stm32h7b3xx and stm32h7b0xx family lines.
2001   *
2002   * @retval None
2003   */
2004 #define __HAL_RCC_PLL3CLKOUT_ENABLE(__RCC_PLL3ClockOut__)   SET_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))
2005 
2006 #define __HAL_RCC_PLL3CLKOUT_DISABLE(__RCC_PLL3ClockOut__)  CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))
2007 
2008 /**
2009   * @brief  Macro to configures the PLL3  multiplication and division factors.
2010   * @note   This function must be used only when PLL3 is disabled.
2011   *
2012   * @param  __PLL3M__ specifies the division factor for PLL3 VCO input clock
2013   *          This parameter must be a number between 1 and 63.
2014   * @note   You have to set the PLLM parameter correctly to ensure that the VCO input
2015   *         frequency ranges from 1 to 16 MHz.
2016   *
2017   * @param  __PLL3N__ specifies the multiplication factor for PLL3 VCO output clock
2018   *          This parameter must be a number between 4 and 512.
2019   * @note   You have to set the PLL3N parameter correctly to ensure that the VCO
2020   *         output frequency is between 150 and 420 MHz (when in medium VCO range) or
2021   *         between 192 and 836 MHZ or between 128 and 560 MHZ(*) (when in wide VCO range)
2022   *
2023   * @param  __PLL3P__ specifies the division factor for peripheral kernel clocks
2024   *          This parameter must be a number between 2 and 128 (where odd numbers not allowed)
2025   *
2026   * @param  __PLL3Q__ specifies the division factor for peripheral kernel clocks
2027   *          This parameter must be a number between 1 and 128
2028   *
2029   * @param  __PLL3R__ specifies the division factor for peripheral kernel clocks
2030   *          This parameter must be a number between 1 and 128
2031   *
2032   * @note   To insure an optimal behavior of the PLL when one of the post-divider (DIVP, DIVQ or DIVR)
2033   *         is not used, application shall clear the enable bit (DIVyEN) and assign lowest possible
2034   *         value to  __PLL3P__, __PLL3Q__ or __PLL3R__ parameters.
2035   * @retval None
2036   *
2037   *  (*) : For stm32h7a3xx and stm32h7b3xx family lines.
2038   */
2039 
2040 #define __HAL_RCC_PLL3_CONFIG(__PLL3M__, __PLL3N__, __PLL3P__, __PLL3Q__,__PLL3R__ ) \
2041                   do{ MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM3) , ( (__PLL3M__) <<20U));  \
2042                          WRITE_REG (RCC->PLL3DIVR , ( (((__PLL3N__) - 1U ) & RCC_PLL3DIVR_N3) | ((((__PLL3P__) -1U ) << 9U) & RCC_PLL3DIVR_P3) | \
2043                                    ((((__PLL3Q__) -1U) << 16U) & RCC_PLL3DIVR_Q3) | ((((__PLL3R__) - 1U) << 24U) & RCC_PLL3DIVR_R3))); \
2044                        } while(0)
2045 
2046 
2047 
2048 /**
2049   * @brief  Macro to configures  PLL3 clock Fractional Part of The Multiplication Factor
2050   *
2051   * @note   These bits can be written at any time, allowing dynamic fine-tuning of the PLL3 VCO
2052   *
2053   * @param  __RCC_PLL3FRACN__ specifies Fractional Part Of The Multiplication Factor for PLL3 VCO
2054   *                            It should be a value between 0 and 8191
2055   * @note   Warning: the software has to set correctly these bits to insure that the VCO
2056   *                  output frequency is between its valid frequency range, which is:
2057   *                  192 to 836 MHz or 128 to 560 MHz(*) if PLL3VCOSEL = 0
2058   *                  150 to 420 MHz if PLL3VCOSEL = 1.
2059   *
2060   * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
2061   *
2062   * @retval None
2063   */
2064 #define  __HAL_RCC_PLL3FRACN_CONFIG(__RCC_PLL3FRACN__) MODIFY_REG(RCC->PLL3FRACR, RCC_PLL3FRACR_FRACN3, (uint32_t)(__RCC_PLL3FRACN__) << RCC_PLL3FRACR_FRACN3_Pos)
2065 
2066 /** @brief  Macro to select  the PLL3  reference frequency range.
2067   * @param  __RCC_PLL3VCIRange__ specifies the PLL1 input frequency range
2068   *         This parameter can be one of the following values:
2069   *            @arg RCC_PLL3VCIRANGE_0: Range frequency is between 1 and 2 MHz
2070   *            @arg RCC_PLL3VCIRANGE_1: Range frequency is between 2 and 4 MHz
2071   *            @arg RCC_PLL3VCIRANGE_2: Range frequency is between 4 and 8 MHz
2072   *            @arg RCC_PLL3VCIRANGE_3: Range frequency is between 8 and 16 MHz
2073   * @retval None
2074   */
2075 #define __HAL_RCC_PLL3_VCIRANGE(__RCC_PLL3VCIRange__) \
2076                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3RGE, (__RCC_PLL3VCIRange__))
2077 
2078 
2079 /** @brief  Macro to select  the PLL3  reference frequency range.
2080   * @param  __RCC_PLL3VCORange__ specifies the PLL1 input frequency range
2081   *         This parameter can be one of the following values:
2082   *            @arg RCC_PLL3VCOWIDE: Range frequency is between 192 and 836 MHz  or between 128 to 560 MHz(*)
2083   *            @arg RCC_PLL3VCOMEDIUM: Range frequency is between 150 and 420 MHz
2084   *
2085   * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
2086   *
2087   * @retval None
2088   */
2089 #define __HAL_RCC_PLL3_VCORANGE(__RCC_PLL3VCORange__) \
2090                   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3VCOSEL, (__RCC_PLL3VCORange__))
2091 /**
2092   * @brief  Macro to Configure the SAI1 clock source.
2093   * @param  __RCC_SAI1CLKSource__ defines the SAI1 clock source. This clock is derived
2094   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2095   *          This parameter can be one of the following values:
2096   *             @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL
2097   *             @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2
2098   *             @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3
2099   *             @arg RCC_SAI1CLKSOURCE_OSC: SAI1 clock  = OSC
2100   *             @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock
2101   * @retval None
2102   */
2103 #if defined(RCC_D2CCIP1R_SAI1SEL)
2104 #define __HAL_RCC_SAI1_CONFIG(__RCC_SAI1CLKSource__ )\
2105                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL, (__RCC_SAI1CLKSource__))
2106 #else
2107 #define __HAL_RCC_SAI1_CONFIG(__RCC_SAI1CLKSource__ )\
2108                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI1SEL, (__RCC_SAI1CLKSource__))
2109 #endif /* RCC_D2CCIP1R_SAI1SEL */
2110 
2111 /** @brief  Macro to get the SAI1 clock source.
2112   * @retval The clock source can be one of the following values:
2113   *             @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL
2114   *             @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2
2115   *             @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3
2116   *             @arg RCC_SAI1CLKSOURCE_CLKP: SAI1 clock  = CLKP
2117   *             @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock
2118   */
2119 #if defined(RCC_D2CCIP1R_SAI1SEL)
2120 #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL)))
2121 #else
2122 #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI1SEL)))
2123 #endif /* RCC_D2CCIP1R_SAI1SEL */
2124 
2125 /**
2126   * @brief  Macro to Configure the SPDIFRX clock source.
2127   * @param  __RCC_SPDIFCLKSource__ defines the SPDIFRX clock source. This clock is derived
2128   *         from system PLL, PLL2, PLL3,  or internal OSC clock
2129   *          This parameter can be one of the following values:
2130   *             @arg RCC_SPDIFRXCLKSOURCE_PLL:  SPDIFRX clock = PLL
2131   *             @arg RCC_SPDIFRXCLKSOURCE_PLL2: SPDIFRX clock = PLL2
2132   *             @arg RCC_SPDIFRXCLKSOURCE_PLL3: SPDIFRX clock = PLL3
2133   *             @arg RCC_SPDIFRXCLKSOURCE_HSI:  SPDIFRX clock  = HSI
2134   * @retval None
2135   */
2136 #if defined(RCC_D2CCIP1R_SPDIFSEL)
2137 #define __HAL_RCC_SPDIFRX_CONFIG(__RCC_SPDIFCLKSource__ )\
2138                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL, (__RCC_SPDIFCLKSource__))
2139 #else
2140 #define __HAL_RCC_SPDIFRX_CONFIG(__RCC_SPDIFCLKSource__ )\
2141                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL, (__RCC_SPDIFCLKSource__))
2142 #endif /* RCC_D2CCIP1R_SPDIFSEL */
2143 
2144 /**
2145   * @brief  Macro to get the SPDIFRX clock source.
2146   * @retval None
2147   */
2148 #if defined(RCC_D2CCIP1R_SPDIFSEL)
2149 #define __HAL_RCC_GET_SPDIFRX_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL)))
2150 #else
2151 #define __HAL_RCC_GET_SPDIFRX_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL)))
2152 #endif /* RCC_D2CCIP1R_SPDIFSEL */
2153 
2154 #if defined(SAI3)
2155 /**
2156   * @brief  Macro to Configure the SAI2/3 clock source.
2157   * @param  __RCC_SAI23CLKSource__ defines the SAI2/3 clock source. This clock is derived
2158   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2159   *          This parameter can be one of the following values:
2160   *             @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL
2161   *             @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2
2162   *             @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3
2163   *             @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock  = CLKP
2164   *             @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock
2165   * @retval None
2166   */
2167 #define __HAL_RCC_SAI23_CONFIG(__RCC_SAI23CLKSource__ )\
2168                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL, (__RCC_SAI23CLKSource__))
2169 
2170 /** @brief  Macro to get the SAI2/3 clock source.
2171   * @retval The clock source can be one of the following values:
2172   *             @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL
2173   *             @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2
2174   *             @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3
2175   *             @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock  = CLKP
2176   *             @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock
2177   */
2178 #define __HAL_RCC_GET_SAI23_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL)))
2179 
2180 /**
2181   * @brief  Macro to Configure the SAI2 clock source.
2182   * @param  __RCC_SAI2CLKSource__ defines the SAI2 clock source. This clock is derived
2183   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2184   *          This parameter can be one of the following values:
2185   *             @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL
2186   *             @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2
2187   *             @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3
2188   *             @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock  = CLKP
2189   *             @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock
2190   * @retval None
2191   */
2192 #define __HAL_RCC_SAI2_CONFIG  __HAL_RCC_SAI23_CONFIG
2193 
2194 /** @brief  Macro to get the SAI2 clock source.
2195   * @retval The clock source can be one of the following values:
2196   *             @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL
2197   *             @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2
2198   *             @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3
2199   *             @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock  = CLKP
2200   *             @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock
2201   */
2202 #define __HAL_RCC_GET_SAI2_SOURCE  __HAL_RCC_GET_SAI23_SOURCE
2203 
2204 /**
2205   * @brief  Macro to Configure the SAI3 clock source.
2206   * @param  __RCC_SAI3CLKSource__ defines the SAI3 clock source. This clock is derived
2207   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2208   *          This parameter can be one of the following values:
2209   *             @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL
2210   *             @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2
2211   *             @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3
2212   *             @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock  = CLKP
2213   *             @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock
2214   * @retval None
2215   */
2216 #define __HAL_RCC_SAI3_CONFIG __HAL_RCC_SAI23_CONFIG
2217 
2218 /** @brief  Macro to get the SAI3 clock source.
2219   * @retval The clock source can be one of the following values:
2220   *             @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL
2221   *             @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2
2222   *             @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3
2223   *             @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock  = CLKP
2224   *             @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock
2225   */
2226 #define __HAL_RCC_GET_SAI3_SOURCE  __HAL_RCC_GET_SAI23_SOURCE
2227 #endif /* SAI3 */
2228 
2229 #if defined(RCC_CDCCIP1R_SAI2ASEL)
2230 /**
2231   * @brief  Macro to Configure the SAI2A clock source.
2232   * @param  __RCC_SAI2ACLKSource__ defines the SAI2A clock source. This clock is derived
2233   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2234   *          This parameter can be one of the following values:
2235   *             @arg RCC_SAI2ACLKSOURCE_PLL: SAI2A clock = PLL
2236   *             @arg RCC_SAI2ACLKSOURCE_PLL2: SAI2A clock = PLL2
2237   *             @arg RCC_SAI2ACLKSOURCE_PLL3: SAI2A clock = PLL3
2238   *             @arg RCC_SAI2ACLKSOURCE_CLKP: SAI2A clock  = CLKP
2239   *             @arg RCC_SAI2ACLKSOURCE_PIN: SAI2A clock = External Clock
2240   *             @arg RCC_SAI2ACLKSOURCE_SPDIF: SAI2A clock = SPDIF Clock
2241   * @retval None
2242   */
2243 #define __HAL_RCC_SAI2A_CONFIG(__RCC_SAI2ACLKSource__ )\
2244                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2ASEL, (__RCC_SAI2ACLKSource__))
2245 
2246 /** @brief  Macro to get the SAI2A clock source.
2247   * @retval The clock source can be one of the following values:
2248   *             @arg RCC_SAI2CLKSOURCE_PLL: SAI2A clock = PLL
2249   *             @arg RCC_SAI2CLKSOURCE_PLL2: SAI2A clock = PLL2
2250   *             @arg RCC_SAI2CLKSOURCE_PLL3: SAI2A clock = PLL3
2251   *             @arg RCC_SAI2CLKSOURCE_CLKP: SAI2A clock  = CLKP
2252   *             @arg RCC_SAI2CLKSOURCE_PIN: SAI2A clock = External Clock
2253   *             @arg RCC_SAI2ACLKSOURCE_SPDIF: SAI2A clock = SPDIF Clock
2254   */
2255 #define __HAL_RCC_GET_SAI2A_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2ASEL)))
2256 #endif /* defined(RCC_CDCCIP1R_SAI2ASEL) */
2257 
2258 #if defined(RCC_CDCCIP1R_SAI2BSEL)
2259 /**
2260   * @brief  Macro to Configure the SAI2B clock source.
2261   * @param  __RCC_SAI2BCLKSource__ defines the SAI2B clock source. This clock is derived
2262   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2263   *          This parameter can be one of the following values:
2264   *             @arg RCC_SAI2BCLKSOURCE_PLL: SAI2B clock = PLL
2265   *             @arg RCC_SAI2BCLKSOURCE_PLL2: SAI2B clock = PLL2
2266   *             @arg RCC_SAI2BCLKSOURCE_PLL3: SAI2B clock = PLL3
2267   *             @arg RCC_SAI2BCLKSOURCE_CLKP: SAI2B clock  = CLKP
2268   *             @arg RCC_SAI2BCLKSOURCE_PIN: SAI2B clock = External Clock
2269   *             @arg RCC_SAI2BCLKSOURCE_SPDIF: SAI2B clock = SPDIF Clock
2270   * @retval None
2271   */
2272 #define __HAL_RCC_SAI2B_CONFIG(__RCC_SAI2BCLKSource__ )\
2273                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2BSEL, (__RCC_SAI2BCLKSource__))
2274 
2275 /** @brief  Macro to get the SAI2B clock source.
2276   * @retval The clock source can be one of the following values:
2277   *             @arg RCC_SAI2BCLKSOURCE_PLL: SAI2B clock = PLL
2278   *             @arg RCC_SAI2BCLKSOURCE_PLL2: SAI2B clock = PLL2
2279   *             @arg RCC_SAI2BCLKSOURCE_PLL3: SAI2B clock = PLL3
2280   *             @arg RCC_SAI2BCLKSOURCE_CLKP: SAI2B clock  = CLKP
2281   *             @arg RCC_SAI2BCLKSOURCE_PIN: SAI2B clock = External Clock
2282   *             @arg RCC_SAI2BCLKSOURCE_SPDIF: SAI2B clock = SPDIF Clock
2283   */
2284 #define __HAL_RCC_GET_SAI2B_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2BSEL)))
2285 #endif /* defined(RCC_CDCCIP1R_SAI2BSEL) */
2286 
2287 
2288 #if defined(SAI4_Block_A)
2289 /**
2290   * @brief  Macro to Configure the SAI4A clock source.
2291   * @param  __RCC_SAI4ACLKSource__ defines the SAI4A clock source. This clock is derived
2292   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2293   *          This parameter can be one of the following values:
2294   *             @arg RCC_SAI4ACLKSOURCE_PLL: SAI4A clock = PLL
2295   *             @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4A clock = PLL2
2296   *             @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4A clock = PLL3
2297   *             @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4A clock  = CLKP
2298   *             @arg RCC_SAI4ACLKSOURCE_PIN: SAI4A clock = External Clock
2299   * @retval None
2300   */
2301 #define __HAL_RCC_SAI4A_CONFIG(__RCC_SAI4ACLKSource__ )\
2302                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL, (__RCC_SAI4ACLKSource__))
2303 
2304 /** @brief  Macro to get the SAI4A clock source.
2305   * @retval The clock source can be one of the following values:
2306   *             @arg RCC_SAI4ACLKSOURCE_PLL: SAI4B clock = PLL
2307   *             @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4B clock = PLL2
2308   *             @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4B clock = PLL3
2309   *             @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4B clock  = CLKP
2310   *             @arg RCC_SAI4ACLKSOURCE_PIN: SAI4B clock = External Clock
2311   */
2312 #define __HAL_RCC_GET_SAI4A_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL)))
2313 #endif /* SAI4_Block_A */
2314 
2315 #if defined(SAI4_Block_B)
2316 /**
2317   * @brief  Macro to Configure the SAI4B clock source.
2318   * @param  __RCC_SAI4BCLKSource__ defines the SAI4B clock source. This clock is derived
2319   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
2320   *          This parameter can be one of the following values:
2321   *             @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL
2322   *             @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2
2323   *             @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3
2324   *             @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock  = CLKP
2325   *             @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock
2326   * @retval None
2327   */
2328 #define __HAL_RCC_SAI4B_CONFIG(__RCC_SAI4BCLKSource__ )\
2329                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL, (__RCC_SAI4BCLKSource__))
2330 
2331 /** @brief  Macro to get the SAI4B clock source.
2332   * @retval The clock source can be one of the following values:
2333   *             @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL
2334   *             @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2
2335   *             @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3
2336   *             @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock  = CLKP
2337   *             @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock
2338   */
2339 #define __HAL_RCC_GET_SAI4B_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL)))
2340 #endif /* SAI4_Block_B */
2341 
2342 /** @brief macro to configure the I2C1/2/3/5* clock (I2C123CLK).
2343   *
2344   * @param  __I2C1235CLKSource__ specifies the I2C1/2/3/5* clock source.
2345   *          This parameter can be one of the following values:
2346   *            @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3/5* clock
2347   *            @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3/5* clock
2348   *            @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3/5* clock
2349   *            @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3/5* clock
2350   *
2351   * (**): Available on stm32h72xxx and stm32h73xxx family lines.
2352   */
2353 #if defined(RCC_D2CCIP2R_I2C123SEL)
2354 #define __HAL_RCC_I2C123_CONFIG(__I2C1235CLKSource__) \
2355                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C1235CLKSource__))
2356 #elif defined(RCC_CDCCIP2R_I2C123SEL)
2357 #define __HAL_RCC_I2C123_CONFIG(__I2C1235CLKSource__) \
2358                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_I2C123SEL, (uint32_t)(__I2C1235CLKSource__))
2359 #else /* RCC_D2CCIP2R_I2C1235SEL */
2360 #define __HAL_RCC_I2C1235_CONFIG(__I2C1235CLKSource__) \
2361                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C1235SEL, (uint32_t)(__I2C1235CLKSource__))
2362 /* alias */
2363 #define __HAL_RCC_I2C123_CONFIG  __HAL_RCC_I2C1235_CONFIG
2364 #endif /* RCC_D2CCIP2R_I2C123SEL */
2365 
2366 /** @brief  macro to get the I2C1/2/3/5* clock source.
2367   * @retval The clock source can be one of the following values:
2368   *            @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3/5* clock
2369   *            @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3/5* clock
2370   *            @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3/5* clock
2371   *            @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3/5* clock
2372   *
2373   * (**): Available on stm32h72xxx and stm32h73xxx family lines.
2374   */
2375 #if defined(RCC_D2CCIP2R_I2C123SEL)
2376 #define __HAL_RCC_GET_I2C123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))
2377 #elif defined(RCC_CDCCIP2R_I2C123SEL)
2378 #define __HAL_RCC_GET_I2C123_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_I2C123SEL)))
2379 #else /* RCC_D2CCIP2R_I2C1235SEL */
2380 #define __HAL_RCC_GET_I2C1235_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C1235SEL)))
2381 /* alias */
2382 #define __HAL_RCC_GET_I2C123_SOURCE  __HAL_RCC_GET_I2C1235_SOURCE
2383 #endif /* RCC_D2CCIP2R_I2C123SEL */
2384 
2385 /** @brief macro to configure the I2C1 clock (I2C1CLK).
2386   *
2387   * @param  __I2C1CLKSource__ specifies the I2C1 clock source.
2388   *          This parameter can be one of the following values:
2389   *            @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock
2390   *            @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock
2391   *            @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock
2392   *            @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock
2393   */
2394 #if defined(I2C5)
2395 #define __HAL_RCC_I2C1_CONFIG  __HAL_RCC_I2C1235_CONFIG
2396 #else
2397 #define __HAL_RCC_I2C1_CONFIG  __HAL_RCC_I2C123_CONFIG
2398 #endif /*I2C5*/
2399 
2400 /** @brief  macro to get the I2C1 clock source.
2401   * @retval The clock source can be one of the following values:
2402   *            @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock
2403   *            @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock
2404   *            @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock
2405   *            @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock
2406   */
2407 #if defined(I2C5)
2408 #define __HAL_RCC_GET_I2C1_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
2409 #else
2410 #define __HAL_RCC_GET_I2C1_SOURCE __HAL_RCC_GET_I2C123_SOURCE
2411 #endif /*I2C5*/
2412 
2413 /** @brief macro to configure the I2C2 clock (I2C2CLK).
2414   *
2415   * @param  __I2C2CLKSource__ specifies the I2C2 clock source.
2416   *          This parameter can be one of the following values:
2417   *            @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock
2418   *            @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock
2419   *            @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock
2420   *            @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock
2421   */
2422 #if defined(I2C5)
2423 #define __HAL_RCC_I2C2_CONFIG __HAL_RCC_I2C1235_CONFIG
2424 #else
2425 #define __HAL_RCC_I2C2_CONFIG __HAL_RCC_I2C123_CONFIG
2426 #endif /*I2C5*/
2427 
2428 /** @brief  macro to get the I2C2 clock source.
2429   * @retval The clock source can be one of the following values:
2430   *            @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock
2431   *            @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock
2432   *            @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock
2433   *            @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock
2434   */
2435 #if defined(I2C5)
2436 #define __HAL_RCC_GET_I2C2_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
2437 #else
2438 #define __HAL_RCC_GET_I2C2_SOURCE __HAL_RCC_GET_I2C123_SOURCE
2439 #endif /*I2C5*/
2440 
2441 /** @brief macro to configure the I2C3 clock (I2C3CLK).
2442   *
2443   * @param  __I2C3CLKSource__ specifies the I2C3 clock source.
2444   *          This parameter can be one of the following values:
2445   *            @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock
2446   *            @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock
2447   *            @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock
2448   *            @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock
2449   */
2450 #if defined(I2C5)
2451 #define __HAL_RCC_I2C3_CONFIG __HAL_RCC_I2C1235_CONFIG
2452 #else
2453 #define __HAL_RCC_I2C3_CONFIG __HAL_RCC_I2C123_CONFIG
2454 #endif /*I2C5*/
2455 
2456 /** @brief  macro to get the I2C3 clock source.
2457   * @retval The clock source can be one of the following values:
2458   *            @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock
2459   *            @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock
2460   *            @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock
2461   *            @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock
2462   */
2463 #if defined(I2C5)
2464 #define __HAL_RCC_GET_I2C3_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
2465 #else
2466 #define __HAL_RCC_GET_I2C3_SOURCE __HAL_RCC_GET_I2C123_SOURCE
2467 #endif /*I2C5*/
2468 
2469 /** @brief macro to configure the I2C4 clock (I2C4CLK).
2470   *
2471   * @param  __I2C4CLKSource__ specifies the I2C4 clock source.
2472   *          This parameter can be one of the following values:
2473   *            @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock
2474   *            @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock
2475   *            @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock
2476   *            @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock
2477   */
2478 #if defined(RCC_D3CCIPR_I2C4SEL)
2479 #define __HAL_RCC_I2C4_CONFIG(__I2C4CLKSource__) \
2480                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL, (uint32_t)(__I2C4CLKSource__))
2481 #else
2482 #define __HAL_RCC_I2C4_CONFIG(__I2C4CLKSource__) \
2483                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_I2C4SEL, (uint32_t)(__I2C4CLKSource__))
2484 #endif /* RCC_D3CCIPR_I2C4SEL */
2485 
2486 /** @brief  macro to get the I2C4 clock source.
2487   * @retval The clock source can be one of the following values:
2488   *            @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock
2489   *            @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock
2490   *            @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock
2491   *            @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock
2492   */
2493 #if defined(RCC_D3CCIPR_I2C4SEL)
2494 #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL)))
2495 #else
2496 #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_I2C4SEL)))
2497 #endif /* RCC_D3CCIPR_I2C4SEL */
2498 
2499 #if defined(I2C5)
2500 /** @brief macro to configure the I2C5 clock (I2C5CLK).
2501   *
2502   * @param  __I2C5CLKSource__ specifies the I2C5 clock source.
2503   *          This parameter can be one of the following values:
2504   *            @arg RCC_I2C5CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C5 clock
2505   *            @arg RCC_I2C5CLKSOURCE_PLL3: PLL3 selected as I2C5 clock
2506   *            @arg RCC_I2C5CLKSOURCE_HSI: HSI selected as I2C5 clock
2507   *            @arg RCC_I2C5CLKSOURCE_CSI: CSI selected as I2C5 clock
2508   */
2509 #define __HAL_RCC_I2C5_CONFIG  __HAL_RCC_I2C1235_CONFIG
2510 #endif /* I2C5 */
2511 
2512 #if defined(I2C5)
2513 /** @brief  macro to get the I2C5 clock source.
2514   * @retval The clock source can be one of the following values:
2515   *            @arg RCC_I2C5CLKSOURCE_D2PCLK1: D2PCLK5 selected as I2C5 clock
2516   *            @arg RCC_I2C5CLKSOURCE_PLL3: PLL3 selected as I2C5 clock
2517   *            @arg RCC_I2C5CLKSOURCE_HSI: HSI selected as I2C5 clock
2518   *            @arg RCC_I2C5CLKSOURCE_CSI: CSI selected as I2C5 clock
2519   */
2520 #define __HAL_RCC_GET_I2C5_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
2521 #endif /* I2C5 */
2522 
2523 /** @brief macro to configure the USART1/6/9* /10* clock (USART16CLK).
2524   *
2525   * @param  __USART16910CLKSource__ specifies the USART1/6/9* /10* clock source.
2526   *          This parameter can be one of the following values:
2527   *            @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6/9* /10* clock
2528   *            @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6/9* /10* clock
2529   *            @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6/9* /10* clock
2530   *            @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6/9* /10* clock
2531   *            @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6/9* /10* clock
2532   *            @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6/9* /10* clock
2533   *
2534   * (*) : Available on some STM32H7 lines only.
2535   */
2536 #if defined(RCC_D2CCIP2R_USART16SEL)
2537 #define __HAL_RCC_USART16_CONFIG(__USART16910CLKSource__) \
2538                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL, (uint32_t)(__USART16910CLKSource__))
2539 #elif defined(RCC_CDCCIP2R_USART16910SEL)
2540 #define __HAL_RCC_USART16910_CONFIG(__USART16910CLKSource__) \
2541                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USART16910SEL, (uint32_t)(__USART16910CLKSource__))
2542 /* alias */
2543 #define __HAL_RCC_USART16_CONFIG  __HAL_RCC_USART16910_CONFIG
2544 #else  /* RCC_D2CCIP2R_USART16910SEL */
2545 #define __HAL_RCC_USART16910_CONFIG(__USART16910CLKSource__) \
2546                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16910SEL, (uint32_t)(__USART16910CLKSource__))
2547 /* alias */
2548 #define __HAL_RCC_USART16_CONFIG  __HAL_RCC_USART16910_CONFIG
2549 #endif /* RCC_D2CCIP2R_USART16SEL */
2550 
2551 /** @brief  macro to get the USART1/6/9* /10* clock source.
2552   * @retval The clock source can be one of the following values:
2553   *            @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6/9* /10* clock
2554   *            @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6/9* /10* clock
2555   *            @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6/9* /10* clock
2556   *            @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6/9* /10* clock
2557   *            @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6/9* /10* clock
2558   *            @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6/9* /10* clock
2559   *
2560   * (*) : Available on some STM32H7 lines only.
2561   */
2562 #if defined(RCC_D2CCIP2R_USART16SEL)
2563 #define __HAL_RCC_GET_USART16_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL)))
2564 #elif defined(RCC_CDCCIP2R_USART16910SEL)
2565 #define __HAL_RCC_GET_USART16910_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USART16910SEL)))
2566 /* alias*/
2567 #define  __HAL_RCC_GET_USART16_SOURCE  __HAL_RCC_GET_USART16910_SOURCE
2568 #else  /* RCC_D2CCIP2R_USART16910SEL */
2569 #define __HAL_RCC_GET_USART16910_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16910SEL)))
2570 /* alias */
2571 #define __HAL_RCC_GET_USART16_SOURCE  __HAL_RCC_GET_USART16910_SOURCE
2572 #endif /* RCC_D2CCIP2R_USART16SEL */
2573 
2574 /** @brief macro to configure the USART234578 clock (USART234578CLK).
2575   *
2576   * @param  __USART234578CLKSource__ specifies the USART2/3/4/5/7/8 clock source.
2577   *          This parameter can be one of the following values:
2578   *            @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock
2579   *            @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock
2580   *            @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock
2581   *            @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock
2582   *            @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock
2583   *            @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock
2584   */
2585 #if defined(RCC_D2CCIP2R_USART28SEL)
2586 #define __HAL_RCC_USART234578_CONFIG(__USART234578CLKSource__) \
2587                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__USART234578CLKSource__))
2588 #else
2589 #define __HAL_RCC_USART234578_CONFIG(__USART234578CLKSource__) \
2590                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USART234578SEL, (uint32_t)(__USART234578CLKSource__))
2591 #endif /* RCC_D2CCIP2R_USART28SEL */
2592 
2593 /** @brief  macro to get the USART2/3/4/5/7/8 clock source.
2594   * @retval The clock source can be one of the following values:
2595   *            @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock
2596   *            @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock
2597   *            @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock
2598   *            @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock
2599   *            @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock
2600   *            @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock
2601   */
2602 #if defined(RCC_D2CCIP2R_USART28SEL)
2603 #define __HAL_RCC_GET_USART234578_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))
2604 #else
2605 #define __HAL_RCC_GET_USART234578_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USART234578SEL)))
2606 #endif /* RCC_D2CCIP2R_USART28SEL */
2607 
2608 /** @brief macro to configure the USART1 clock (USART1CLK).
2609   *
2610   * @param  __USART1CLKSource__ specifies the USART1 clock source.
2611   *          This parameter can be one of the following values:
2612   *            @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock
2613   *            @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock
2614   *            @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock
2615   *            @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock
2616   *            @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock
2617   *            @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock
2618   */
2619 #define __HAL_RCC_USART1_CONFIG  __HAL_RCC_USART16_CONFIG
2620 
2621 /** @brief  macro to get the USART1 clock source.
2622   * @retval The clock source can be one of the following values:
2623   *            @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock
2624   *            @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock
2625   *            @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock
2626   *            @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock
2627   *            @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock
2628   *            @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock
2629   */
2630 #define __HAL_RCC_GET_USART1_SOURCE  __HAL_RCC_GET_USART16_SOURCE
2631 
2632 /** @brief macro to configure the USART2 clock (USART2CLK).
2633   *
2634   * @param  __USART2CLKSource__ specifies the USART2 clock source.
2635   *          This parameter can be one of the following values:
2636   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock
2637   *            @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock
2638   *            @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock
2639   *            @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock
2640   *            @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock
2641   *            @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock
2642   */
2643 #define __HAL_RCC_USART2_CONFIG  __HAL_RCC_USART234578_CONFIG
2644 
2645 /** @brief  macro to get the USART2 clock source.
2646   * @retval The clock source can be one of the following values:
2647   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock
2648   *            @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock
2649   *            @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock
2650   *            @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock
2651   *            @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock
2652   *            @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock
2653   */
2654 #define __HAL_RCC_GET_USART2_SOURCE __HAL_RCC_GET_USART234578_SOURCE
2655 
2656 /** @brief macro to configure the USART3 clock (USART3CLK).
2657   *
2658   * @param  __USART3CLKSource__ specifies the USART3 clock source.
2659   *          This parameter can be one of the following values:
2660   *            @arg RCC_USART3CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock
2661   *            @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock
2662   *            @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock
2663   *            @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock
2664   *            @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock
2665   *            @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock
2666   */
2667 #define __HAL_RCC_USART3_CONFIG  __HAL_RCC_USART234578_CONFIG
2668 
2669 /** @brief  macro to get the USART3 clock source.
2670   * @retval The clock source can be one of the following values:
2671   *            @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock
2672   *            @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock
2673   *            @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock
2674   *            @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock
2675   *            @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock
2676   *            @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock
2677   */
2678 #define __HAL_RCC_GET_USART3_SOURCE  __HAL_RCC_GET_USART234578_SOURCE
2679 
2680 /** @brief macro to configure the UART4 clock (UART4CLK).
2681   *
2682   * @param  __UART4CLKSource__ specifies the UART4 clock source.
2683   *          This parameter can be one of the following values:
2684   *            @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock
2685   *            @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock
2686   *            @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock
2687   *            @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock
2688   *            @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock
2689   *            @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock
2690   */
2691 #define __HAL_RCC_UART4_CONFIG  __HAL_RCC_USART234578_CONFIG
2692 
2693 /** @brief  macro to get the UART4 clock source.
2694   * @retval The clock source can be one of the following values:
2695   *            @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock
2696   *            @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock
2697   *            @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock
2698   *            @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock
2699   *            @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock
2700   *            @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock
2701   */
2702 #define __HAL_RCC_GET_UART4_SOURCE  __HAL_RCC_GET_USART234578_SOURCE
2703 
2704 /** @brief macro to configure the UART5 clock (UART5CLK).
2705   *
2706   * @param  __UART5CLKSource__ specifies the UART5 clock source.
2707   *          This parameter can be one of the following values:
2708   *            @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock
2709   *            @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock
2710   *            @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock
2711   *            @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock
2712   *            @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock
2713   *            @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock
2714   */
2715 #define __HAL_RCC_UART5_CONFIG  __HAL_RCC_USART234578_CONFIG
2716 
2717 /** @brief  macro to get the UART5 clock source.
2718   * @retval The clock source can be one of the following values:
2719   *            @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock
2720   *            @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock
2721   *            @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock
2722   *            @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock
2723   *            @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock
2724   *            @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock
2725   */
2726 #define __HAL_RCC_GET_UART5_SOURCE  __HAL_RCC_GET_USART234578_SOURCE
2727 
2728 /** @brief macro to configure the USART6 clock (USART6CLK).
2729   *
2730   * @param  __USART6CLKSource__ specifies the USART6 clock source.
2731   *          This parameter can be one of the following values:
2732   *            @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock
2733   *            @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock
2734   *            @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock
2735   *            @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock
2736   *            @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock
2737   *            @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock
2738   */
2739 #define __HAL_RCC_USART6_CONFIG  __HAL_RCC_USART16_CONFIG
2740 
2741 /** @brief  macro to get the USART6 clock source.
2742   * @retval The clock source can be one of the following values:
2743   *            @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock
2744   *            @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock
2745   *            @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock
2746   *            @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock
2747   *            @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock
2748   *            @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock
2749   */
2750 #define __HAL_RCC_GET_USART6_SOURCE  __HAL_RCC_GET_USART16_SOURCE
2751 
2752 /** @brief macro to configure the UART5 clock (UART7CLK).
2753   *
2754   * @param  __UART7CLKSource__ specifies the UART7 clock source.
2755   *          This parameter can be one of the following values:
2756   *            @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock
2757   *            @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock
2758   *            @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock
2759   *            @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock
2760   *            @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock
2761   *            @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock
2762   */
2763 #define __HAL_RCC_UART7_CONFIG  __HAL_RCC_USART234578_CONFIG
2764 
2765 /** @brief  macro to get the UART7 clock source.
2766   * @retval The clock source can be one of the following values:
2767   *            @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock
2768   *            @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock
2769   *            @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock
2770   *            @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock
2771   *            @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock
2772   *            @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock
2773   */
2774 #define __HAL_RCC_GET_UART7_SOURCE  __HAL_RCC_GET_USART234578_SOURCE
2775 
2776 /** @brief macro to configure the UART8 clock (UART8CLK).
2777   *
2778   * @param  __UART8CLKSource__ specifies the UART8 clock source.
2779   *          This parameter can be one of the following values:
2780   *            @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock
2781   *            @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock
2782   *            @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock
2783   *            @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock
2784   *            @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock
2785   *            @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock
2786   */
2787 #define __HAL_RCC_UART8_CONFIG  __HAL_RCC_USART234578_CONFIG
2788 
2789 /** @brief  macro to get the UART8 clock source.
2790   * @retval The clock source can be one of the following values:
2791   *            @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock
2792   *            @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock
2793   *            @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock
2794   *            @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock
2795   *            @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock
2796   *            @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock
2797   */
2798 #define __HAL_RCC_GET_UART8_SOURCE  __HAL_RCC_GET_USART234578_SOURCE
2799 
2800 #if defined(UART9)
2801 /** @brief macro to configure the UART9 clock (UART9CLK).
2802   *
2803   * @param  __UART8CLKSource__ specifies the UART8 clock source.
2804   *          This parameter can be one of the following values:
2805   *            @arg RCC_UART9CLKSOURCE_D2PCLK1: APB1 Clock selected as UART9 clock
2806   *            @arg RCC_UART9CLKSOURCE_PLL2: PLL2_Q Clock selected as UART9 clock
2807   *            @arg RCC_UART9CLKSOURCE_PLL3: PLL3_Q Clock selected as UART9 clock
2808   *            @arg RCC_UART9CLKSOURCE_HSI: HSI selected as UART9 clock
2809   *            @arg RCC_UART9CLKSOURCE_CSI: CSI Clock selected as UART9 clock
2810   *            @arg RCC_UART9CLKSOURCE_LSE: LSE selected as UART9 clock
2811   */
2812 #define __HAL_RCC_UART9_CONFIG  __HAL_RCC_USART16_CONFIG
2813 
2814 /** @brief  macro to get the UART9 clock source.
2815   * @retval The clock source can be one of the following values:
2816   *            @arg RCC_UART9CLKSOURCE_D2PCLK1: APB1 Clock selected as UART99 clock
2817   *            @arg RCC_UART9CLKSOURCE_PLL2: PLL2_Q Clock selected as UART99 clock
2818   *            @arg RCC_UART9CLKSOURCE_PLL3: PLL3_Q Clock selected as UART99 clock
2819   *            @arg RCC_UART9CLKSOURCE_HSI: HSI selected as UART9 clock
2820   *            @arg RCC_UART9CLKSOURCE_CSI: CSI Clock selected as UART9 clock
2821   *            @arg RCC_UART9CLKSOURCE_LSE: LSE selected as UART9 clock
2822   */
2823 #define __HAL_RCC_GET_UART9_SOURCE  __HAL_RCC_GET_USART16_SOURCE
2824 #endif /* UART9 */
2825 
2826 #if defined(USART10)
2827 /** @brief macro to configure the USART10 clock (USART10CLK).
2828   *
2829   * @param  __UART8CLKSource__ specifies the UART8 clock source.
2830   *          This parameter can be one of the following values:
2831   *            @arg RCC_USART10CLKSOURCE_D2PCLK1: APB1 Clock selected as USART10 clock
2832   *            @arg RCC_USART10CLKSOURCE_PLL2: PLL2_Q Clock selected as USART10 clock
2833   *            @arg RCC_USART10CLKSOURCE_PLL3: PLL3_Q Clock selected as USART10 clock
2834   *            @arg RCC_USART10CLKSOURCE_HSI: HSI selected as USART10 clock
2835   *            @arg RCC_USART10CLKSOURCE_CSI: CSI Clock selected as USART10 clock
2836   *            @arg RCC_USART10CLKSOURCE_LSE: LSE selected as USART10 clock
2837   */
2838 #define __HAL_RCC_USART10_CONFIG  __HAL_RCC_USART16_CONFIG
2839 
2840 /** @brief  macro to get the USART10 clock source.
2841   * @retval The clock source can be one of the following values:
2842   *            @arg RCC_USART10CLKSOURCE_D2PCLK1: APB1 Clock selected as USART10 clock
2843   *            @arg RCC_USART10CLKSOURCE_PLL2: PLL2_Q Clock selected as USART10 clock
2844   *            @arg RCC_USART10CLKSOURCE_PLL3: PLL3_Q Clock selected as USART10 clock
2845   *            @arg RCC_USART10CLKSOURCE_HSI: HSI selected as USART10 clock
2846   *            @arg RCC_USART10CLKSOURCE_CSI: CSI Clock selected as USART10 clock
2847   *            @arg RCC_USART10CLKSOURCE_LSE: LSE selected as USART10 clock
2848   */
2849 #define __HAL_RCC_GET_USART10_SOURCE  __HAL_RCC_GET_USART16_SOURCE
2850 #endif /* USART10 */
2851 
2852 /** @brief macro to configure the LPUART1 clock (LPUART1CLK).
2853   *
2854   * @param  __LPUART1CLKSource__ specifies the LPUART1 clock source.
2855   *          This parameter can be one of the following values:
2856   *            @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock
2857   *            @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock
2858   *            @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock
2859   *            @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock
2860   *            @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock
2861   *            @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock
2862   */
2863 #if defined (RCC_D3CCIPR_LPUART1SEL)
2864 #define __HAL_RCC_LPUART1_CONFIG(__LPUART1CLKSource__) \
2865                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL, (uint32_t)(__LPUART1CLKSource__))
2866 #else
2867 #define __HAL_RCC_LPUART1_CONFIG(__LPUART1CLKSource__) \
2868                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL, (uint32_t)(__LPUART1CLKSource__))
2869 #endif /* RCC_D3CCIPR_LPUART1SEL */
2870 
2871 /** @brief  macro to get the LPUART1 clock source.
2872   * @retval The clock source can be one of the following values:
2873   *            @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock
2874   *            @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock
2875   *            @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock
2876   *            @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock
2877   *            @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock
2878   *            @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock
2879   */
2880 #if defined (RCC_D3CCIPR_LPUART1SEL)
2881 #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL)))
2882 #else
2883 #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL)))
2884 #endif /* RCC_D3CCIPR_LPUART1SEL */
2885 
2886 /** @brief  macro to configure the LPTIM1 clock source.
2887   *
2888   * @param  __LPTIM1CLKSource__ specifies the LPTIM1 clock source.
2889   *          This parameter can be one of the following values:
2890   *            @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock
2891   *            @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock
2892   *            @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock
2893   *            @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock
2894   *            @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock
2895   *            @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock
2896   */
2897 #if defined(RCC_D2CCIP2R_LPTIM1SEL)
2898 #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1CLKSource__) \
2899                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL, (uint32_t)(__LPTIM1CLKSource__))
2900 #else
2901 #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1CLKSource__) \
2902                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_LPTIM1SEL, (uint32_t)(__LPTIM1CLKSource__))
2903 #endif /* RCC_D2CCIP2R_LPTIM1SEL */
2904 
2905 /** @brief  macro to get the LPTIM1 clock source.
2906   * @retval The clock source can be one of the following values:
2907   *            @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock
2908   *            @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock
2909   *            @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock
2910   *            @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock
2911   *            @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock
2912   *            @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock
2913   */
2914 #if defined(RCC_D2CCIP2R_LPTIM1SEL)
2915 #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL)))
2916 #else
2917 #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_LPTIM1SEL)))
2918 #endif /* RCC_D2CCIP2R_LPTIM1SEL */
2919 
2920 /** @brief  macro to configure the LPTIM2 clock source.
2921   *
2922   * @param  __LPTIM2CLKSource__ specifies the LPTIM2 clock source.
2923   *          This parameter can be one of the following values:
2924   *            @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock
2925   *            @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock
2926   *            @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock
2927   *            @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock
2928   *            @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock
2929   *            @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock
2930   */
2931 #if defined(RCC_D3CCIPR_LPTIM2SEL)
2932 #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2CLKSource__) \
2933                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2CLKSource__))
2934 #else
2935 #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2CLKSource__) \
2936                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2CLKSource__))
2937 #endif /* RCC_D3CCIPR_LPTIM2SEL */
2938 
2939 /** @brief  macro to get the LPTIM2 clock source.
2940   * @retval The clock source can be one of the following values:
2941   *            @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock
2942   *            @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock
2943   *            @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock
2944   *            @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock
2945   *            @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock
2946   *            @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock
2947   */
2948 #if defined(RCC_D3CCIPR_LPTIM2SEL)
2949 #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL)))
2950 #else
2951 #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM2SEL)))
2952 #endif /* RCC_D3CCIPR_LPTIM2SEL */
2953 
2954 /** @brief  macro to configure the LPTIM3/4/5 clock source.
2955   *
2956   * @param  __LPTIM345CLKSource__ specifies the LPTIM3/4/5 clock source.
2957   *            @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock
2958   *            @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock
2959   *            @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock
2960   *            @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock
2961   *            @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock
2962   *            @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock
2963   */
2964 #if defined(RCC_D3CCIPR_LPTIM345SEL)
2965 #define __HAL_RCC_LPTIM345_CONFIG(__LPTIM345CLKSource__) \
2966                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM345CLKSource__))
2967 #else
2968 #define __HAL_RCC_LPTIM345_CONFIG(__LPTIM345CLKSource__) \
2969                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM3SEL, (uint32_t)(__LPTIM345CLKSource__))
2970 #endif /* RCC_D3CCIPR_LPTIM345SEL */
2971 
2972 /** @brief  macro to get the LPTIM3/4/5 clock source.
2973   * @retval The clock source can be one of the following values:
2974   *            @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock
2975   *            @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock
2976   *            @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock
2977   *            @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock
2978   *            @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock
2979   *            @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock
2980   */
2981 #if defined(RCC_D3CCIPR_LPTIM345SEL)
2982 #define __HAL_RCC_GET_LPTIM345_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))
2983 #else
2984 #define __HAL_RCC_GET_LPTIM345_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM3SEL)))
2985 #endif /* RCC_D3CCIPR_LPTIM345SEL */
2986 
2987 /** @brief  macro to configure the LPTIM3 clock source.
2988   *
2989   * @param  __LPTIM3CLKSource__ specifies the LPTIM3 clock source.
2990   *            @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock
2991   *            @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock
2992   *            @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock
2993   *            @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock
2994   *            @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock
2995   *            @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock
2996   */
2997 #define __HAL_RCC_LPTIM3_CONFIG  __HAL_RCC_LPTIM345_CONFIG
2998 
2999 /** @brief  macro to get the LPTIM3 clock source.
3000   * @retval The clock source can be one of the following values:
3001   *            @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock
3002   *            @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock
3003   *            @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock
3004   *            @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock
3005   *            @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock
3006   *            @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock
3007   */
3008 #define __HAL_RCC_GET_LPTIM3_SOURCE  __HAL_RCC_GET_LPTIM345_SOURCE
3009 
3010 #if defined(LPTIM4)
3011 /** @brief  macro to configure the LPTIM4 clock source.
3012   *
3013   * @param  __LPTIM4CLKSource__ specifies the LPTIM4 clock source.
3014   *            @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock
3015   *            @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock
3016   *            @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock
3017   *            @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock
3018   *            @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock
3019   *            @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock
3020   */
3021 #define __HAL_RCC_LPTIM4_CONFIG  __HAL_RCC_LPTIM345_CONFIG
3022 
3023 
3024 /** @brief  macro to get the LPTIM4 clock source.
3025   * @retval The clock source can be one of the following values:
3026   *            @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock
3027   *            @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock
3028   *            @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock
3029   *            @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock
3030   *            @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock
3031   *            @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock
3032   */
3033 #define __HAL_RCC_GET_LPTIM4_SOURCE  __HAL_RCC_GET_LPTIM345_SOURCE
3034 #endif /* LPTIM4 */
3035 
3036 #if defined(LPTIM5)
3037 /** @brief  macro to configure the LPTIM5 clock source.
3038   *
3039   * @param  __LPTIM5CLKSource__ specifies the LPTIM5 clock source.
3040   *            @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock
3041   *            @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock
3042   *            @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock
3043   *            @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock
3044   *            @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock
3045   *            @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock
3046   */
3047 #define __HAL_RCC_LPTIM5_CONFIG  __HAL_RCC_LPTIM345_CONFIG
3048 
3049 
3050 /** @brief  macro to get the LPTIM5 clock source.
3051   * @retval The clock source can be one of the following values:
3052   *            @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock
3053   *            @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock
3054   *            @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock
3055   *            @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock
3056   *            @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock
3057   *            @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock
3058   */
3059 #define __HAL_RCC_GET_LPTIM5_SOURCE  __HAL_RCC_GET_LPTIM345_SOURCE
3060 #endif /* LPTIM5 */
3061 
3062 #if defined(QUADSPI)
3063 /** @brief  macro to configure the QSPI clock source.
3064   *
3065   * @param  __QSPICLKSource__ specifies the QSPI clock source.
3066   *            @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock
3067   *            @arg RCC_RCC_QSPICLKSOURCE_PLL   : PLL1_Q Clock selected as QSPI clock
3068   *            @arg RCC_RCC_QSPICLKSOURCE_PLL2  : PLL2_R Clock selected as QSPI clock
3069   *            @arg RCC_RCC_QSPICLKSOURCE_CLKP    CLKP selected as QSPI clock
3070   */
3071 #define __HAL_RCC_QSPI_CONFIG(__QSPICLKSource__) \
3072                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL, (uint32_t)(__QSPICLKSource__))
3073 
3074 
3075 /** @brief  macro to get the QSPI clock source.
3076   * @retval The clock source can be one of the following values:
3077   *            @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock
3078   *            @arg RCC_RCC_QSPICLKSOURCE_PLL   : PLL1_Q Clock selected as QSPI clock
3079   *            @arg RCC_RCC_QSPICLKSOURCE_PLL2  : PLL2_R Clock selected as QSPI clock
3080   *            @arg RCC_RCC_QSPICLKSOURCE_CLKP    CLKP selected as QSPI clock
3081   */
3082 #define __HAL_RCC_GET_QSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL)))
3083 #endif /* QUADSPI */
3084 
3085 #if defined(OCTOSPI1) || defined(OCTOSPI2)
3086 /** @brief  macro to configure the OSPI clock source.
3087   *
3088   * @param  __OSPICLKSource__ specifies the OSPI clock source.
3089   *            @arg RCC_RCC_OSPICLKSOURCE_CDHCLK: Domain1 HCLK Clock selected as OSPI clock
3090   *            @arg RCC_RCC_OSPICLKSOURCE_PLL   : PLL1_Q Clock selected as OSPI clock
3091   *            @arg RCC_RCC_OSPICLKSOURCE_PLL2  : PLL2_R Clock selected as OSPI clock
3092   *            @arg RCC_RCC_OSPICLKSOURCE_CLKP    CLKP selected as OSPI clock
3093   */
3094 #if defined(RCC_CDCCIPR_OCTOSPISEL)
3095 #define __HAL_RCC_OSPI_CONFIG(__OSPICLKSource__) \
3096                   MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL, (uint32_t)(__OSPICLKSource__))
3097 #else
3098 #define __HAL_RCC_OSPI_CONFIG(__OSPICLKSource__) \
3099                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_OCTOSPISEL, (uint32_t)(__OSPICLKSource__))
3100 #endif /* RCC_CDCCIPR_OCTOSPISEL */
3101 
3102 /** @brief  macro to get the OSPI clock source.
3103   * @retval The clock source can be one of the following values:
3104   *            @arg RCC_RCC_OSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as OSPI clock
3105   *            @arg RCC_RCC_OSPICLKSOURCE_PLL   : PLL1_Q Clock selected as OSPI clock
3106   *            @arg RCC_RCC_OSPICLKSOURCE_PLL2  : PLL2_R Clock selected as OSPI clock
3107   *            @arg RCC_RCC_OSPICLKSOURCE_CLKP    CLKP selected as OSPI clock
3108   */
3109 #if defined(RCC_CDCCIPR_OCTOSPISEL)
3110 #define __HAL_RCC_GET_OSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL)))
3111 #else
3112 #define __HAL_RCC_GET_OSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_OCTOSPISEL)))
3113 #endif /* RCC_CDCCIPR_OCTOSPISEL */
3114 #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
3115 
3116 
3117 #if defined(DSI)
3118 /** @brief  macro to configure the DSI clock source.
3119   *
3120   * @param  __DSICLKSource__ specifies the DSI clock source.
3121   *            @arg RCC_RCC_DSICLKSOURCE_PHY:DSI clock from PHY is selected as DSI byte lane clock
3122   *            @arg RCC_RCC_DSICLKSOURCE_PLL2   : PLL2_Q Clock clock is selected as DSI byte lane clock
3123   */
3124 #define __HAL_RCC_DSI_CONFIG(__DSICLKSource__) \
3125                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL, (uint32_t)(__DSICLKSource__))
3126 
3127 
3128 /** @brief  macro to get the DSI clock source.
3129   * @retval The clock source can be one of the following values:
3130   *            @arg RCC_RCC_DSICLKSOURCE_PHY: DSI clock from PHY is selected as DSI byte lane clock
3131   *            @arg RCC_RCC_DSICLKSOURCE_PLL2: PLL2_Q Clock clock is selected as DSI byte lane clock
3132   */
3133 #define __HAL_RCC_GET_DSI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL)))
3134 #endif /*DSI*/
3135 
3136 /** @brief  macro to configure the FMC clock source.
3137   *
3138   * @param  __FMCCLKSource__ specifies the FMC clock source.
3139   *            @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock
3140   *            @arg RCC_RCC_FMCCLKSOURCE_PLL   : PLL1_Q Clock selected as FMC clock
3141   *            @arg RCC_RCC_FMCCLKSOURCE_PLL2  : PLL2_R Clock selected as FMC clock
3142   *            @arg RCC_RCC_FMCCLKSOURCE_CLKP    CLKP selected as FMC clock
3143   */
3144 #if defined(RCC_D1CCIPR_FMCSEL)
3145 #define __HAL_RCC_FMC_CONFIG(__FMCCLKSource__) \
3146                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL, (uint32_t)(__FMCCLKSource__))
3147 #else
3148 #define __HAL_RCC_FMC_CONFIG(__FMCCLKSource__) \
3149                   MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL, (uint32_t)(__FMCCLKSource__))
3150 #endif /* RCC_D1CCIPR_FMCSEL */
3151 
3152 /** @brief  macro to get the FMC clock source.
3153   * @retval The clock source can be one of the following values:
3154   *            @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock
3155   *            @arg RCC_RCC_FMCCLKSOURCE_PLL   : PLL1_Q Clock selected as FMC clock
3156   *            @arg RCC_RCC_FMCCLKSOURCE_PLL2  : PLL2_R Clock selected as FMC clock
3157   *            @arg RCC_RCC_FMCCLKSOURCE_CLKP    CLKP selected as FMC clock
3158   */
3159 #if defined(RCC_D1CCIPR_FMCSEL)
3160 #define __HAL_RCC_GET_FMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL)))
3161 #else
3162 #define __HAL_RCC_GET_FMC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL)))
3163 #endif /* RCC_D1CCIPR_FMCSEL */
3164 
3165 /** @brief  Macro to configure the USB clock (USBCLK).
3166   * @param  __USBCLKSource__ specifies the USB clock source.
3167   *         This parameter can be one of the following values:
3168   *            @arg RCC_USBCLKSOURCE_PLL:   PLL1Q selected as USB clock
3169   *            @arg RCC_USBCLKSOURCE_PLL3:  PLL3Q Clock selected as USB clock
3170   *            @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock
3171   */
3172 #if defined(RCC_D2CCIP2R_USBSEL)
3173 #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \
3174                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL, (uint32_t)(__USBCLKSource__))
3175 #else
3176 #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \
3177                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL, (uint32_t)(__USBCLKSource__))
3178 #endif /* RCC_D2CCIP2R_USBSEL */
3179 
3180 /** @brief  Macro to get the USB clock source.
3181   * @retval The clock source can be one of the following values:
3182   *            @arg RCC_USBCLKSOURCE_PLL:   PLL1Q selected as USB clock
3183   *            @arg RCC_USBCLKSOURCE_PLL3:  PLL3Q Clock selected as USB clock
3184   *            @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock
3185   */
3186 #if defined(RCC_D2CCIP2R_USBSEL)
3187 #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL)))
3188 #else
3189 #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL)))
3190 #endif /* RCC_D2CCIP2R_USBSEL */
3191 
3192 /** @brief  Macro to configure the ADC clock
3193   * @param  __ADCCLKSource__ specifies the ADC digital interface clock source.
3194   *         This parameter can be one of the following values:
3195   *            @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock
3196   *            @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock
3197   *            @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock
3198   */
3199 #if defined(RCC_D3CCIPR_ADCSEL)
3200 #define __HAL_RCC_ADC_CONFIG(__ADCCLKSource__) \
3201                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL, (uint32_t)(__ADCCLKSource__))
3202 #else
3203 #define __HAL_RCC_ADC_CONFIG(__ADCCLKSource__) \
3204                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL, (uint32_t)(__ADCCLKSource__))
3205 #endif /* RCC_D3CCIPR_ADCSEL */
3206 
3207 /** @brief  Macro to get the ADC clock source.
3208   * @retval The clock source can be one of the following values:
3209   *            @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock
3210   *            @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock
3211   *            @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock
3212   */
3213 #if defined(RCC_D3CCIPR_ADCSEL)
3214 #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL)))
3215 #else
3216 #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL)))
3217 #endif /* RCC_D3CCIPR_ADCSEL */
3218 
3219 /** @brief  Macro to configure the SWPMI1 clock
3220  * @param  __SWPMI1CLKSource__ specifies the SWPMI1  clock source.
3221  *         This parameter can be one of the following values:
3222  *            @arg RCC_SWPMI1CLKSOURCE_D2PCLK1:  D2PCLK1 Clock selected as SWPMI1 clock
3223  *            @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock
3224  */
3225 #if defined(RCC_D2CCIP1R_SWPSEL)
3226 #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1CLKSource__) \
3227                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL, (uint32_t)(__SWPMI1CLKSource__))
3228 #else
3229 #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1CLKSource__) \
3230                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL, (uint32_t)(__SWPMI1CLKSource__))
3231 #endif /* RCC_D2CCIP1R_SWPSEL */
3232 
3233 /** @brief  Macro to get the SWPMI1 clock source.
3234   * @retval The clock source can be one of the following values:
3235   *            @arg RCC_SWPMI1CLKSOURCE_D2PCLK1:  D2PCLK1 Clock selected as SWPMI1 clock
3236   *            @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock
3237   */
3238 #if defined(RCC_D2CCIP1R_SWPSEL)
3239 #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL)))
3240 #else
3241 #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL)))
3242 #endif /* RCC_D2CCIP1R_SWPSEL */
3243 
3244 /** @brief  Macro to configure the DFSDM1 clock
3245  * @param  __DFSDM1CLKSource__ specifies the DFSDM1  clock source.
3246  *         This parameter can be one of the following values:
3247  *            @arg RCC_DFSDM1CLKSOURCE_D2PCLK:  D2PCLK Clock selected as DFSDM1 clock
3248  *            @arg RCC_DFSDM1CLKSOURCE_SYS:     System Clock selected as DFSDM1 clock
3249  */
3250 #if defined(RCC_D2CCIP1R_DFSDM1SEL)
3251 #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1CLKSource__) \
3252                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL, (uint32_t)(__DFSDM1CLKSource__))
3253 #else
3254 #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1CLKSource__) \
3255                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL, (uint32_t)(__DFSDM1CLKSource__))
3256 #endif /* RCC_D2CCIP1R_DFSDM1SEL */
3257 
3258 /** @brief  Macro to get the DFSDM1 clock source.
3259   * @retval The clock source can be one of the following values:
3260   *            @arg RCC_DFSDM1CLKSOURCE_D2PCLK:  D2PCLK Clock selected as DFSDM1 clock
3261   *            @arg RCC_DFSDM1CLKSOURCE_SYS:   System Clock selected as DFSDM1 clock
3262   */
3263 #if defined (RCC_D2CCIP1R_DFSDM1SEL)
3264 #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL)))
3265 #else
3266 #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL)))
3267 #endif /* RCC_D2CCIP1R_DFSDM1SEL */
3268 
3269 #if defined(DFSDM2_BASE)
3270 /** @brief  Macro to configure the DFSDM2 clock
3271  * @param  __DFSDM2CLKSource__ specifies the DFSDM2  clock source.
3272  *         This parameter can be one of the following values:
3273  *            @arg RCC_DFSDM2CLKSOURCE_SRDPCLK1:  SRDPCLK1 (APB4) selected as DFSDM2 clock
3274  *            @arg RCC_DFSDM2CLKSOURCE_SYS:   System Clock selected as DFSDM2 clock
3275  */
3276 #define __HAL_RCC_DFSDM2_CONFIG(__DFSDM2CLKSource__) \
3277                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL, (uint32_t)(__DFSDM2CLKSource__))
3278 
3279 /** @brief  Macro to get the DFSDM2 clock source.
3280   * @retval The clock source can be one of the following values:
3281   *            @arg RCC_DFSDM2CLKSOURCE_SRDPCLK1:  SRDPCLK1 (APB4) Clock selected as DFSDM2 clock
3282   *            @arg RCC_DFSDM2CLKSOURCE_SYS:   System Clock selected as DFSDM2 clock
3283   */
3284 #define __HAL_RCC_GET_DFSDM2_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL)))
3285 #endif /* DFSDM2 */
3286 
3287 /** @brief macro to configure the CEC clock (CECCLK).
3288   *
3289   * @param  __CECCLKSource__ specifies the CEC clock source.
3290   *          This parameter can be one of the following values:
3291   *            @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock
3292   *            @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock
3293   *            @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock
3294   */
3295 #if defined(RCC_D2CCIP2R_CECSEL)
3296 #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \
3297                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL, (uint32_t)(__CECCLKSource__))
3298 #else
3299 #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \
3300                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL, (uint32_t)(__CECCLKSource__))
3301 #endif /* RCC_D2CCIP2R_CECSEL */
3302 
3303 /** @brief  macro to get the CEC clock source.
3304   * @retval The clock source can be one of the following values:
3305   *            @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock
3306   *            @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock
3307   *            @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock
3308   */
3309 #if defined(RCC_D2CCIP2R_CECSEL)
3310 #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL)))
3311 #else
3312 #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL)))
3313 #endif /* RCC_D2CCIP2R_CECSEL */
3314 
3315 /** @brief  Macro to configure the CLKP : Oscillator clock for peripheral
3316   * @param  __CLKPSource__ specifies Oscillator clock for peripheral
3317   *         This parameter can be one of the following values:
3318   *            @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral
3319   *            @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral
3320   *            @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral
3321   */
3322 #if defined(RCC_D1CCIPR_CKPERSEL)
3323 #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \
3324                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL, (uint32_t)(__CLKPSource__))
3325 #else
3326 #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \
3327                   MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL, (uint32_t)(__CLKPSource__))
3328 #endif /* RCC_D1CCIPR_CKPERSEL */
3329 
3330 /** @brief  Macro to get the Oscillator clock for peripheral  source.
3331   * @retval The clock source can be one of the following values:
3332   *            @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral
3333   *            @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral
3334   *            @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral
3335   */
3336 #if defined(RCC_D1CCIPR_CKPERSEL)
3337 #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL)))
3338 #else
3339 #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL)))
3340 #endif /* RCC_D1CCIPR_CKPERSEL */
3341 
3342 #if defined(FDCAN1) || defined(FDCAN2)
3343 /** @brief  Macro to configure the FDCAN clock
3344   * @param  __FDCANCLKSource__ specifies  clock source  for FDCAN
3345   *         This parameter can be one of the following values:
3346   *            @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock
3347   *            @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock
3348   *            @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock
3349   */
3350 #if defined(RCC_D2CCIP1R_FDCANSEL)
3351 #define __HAL_RCC_FDCAN_CONFIG(__FDCANCLKSource__) \
3352                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL, (uint32_t)(__FDCANCLKSource__))
3353 #else
3354 #define __HAL_RCC_FDCAN_CONFIG(__FDCANCLKSource__) \
3355                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL, (uint32_t)(__FDCANCLKSource__))
3356 #endif /* RCC_D2CCIP1R_FDCANSEL */
3357 
3358 /** @brief  Macro to get the FDCAN clock
3359   * @retval The clock source can be one of the following values:
3360   *            @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock
3361   *            @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock
3362   *            @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock
3363   */
3364 #if defined(RCC_D2CCIP1R_FDCANSEL)
3365 #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL)))
3366 #else
3367 #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL)))
3368 #endif /* RCC_D2CCIP1R_FDCANSEL */
3369 
3370 #endif /*FDCAN1 || FDCAN2*/
3371 
3372 /**
3373   * @brief  Macro to Configure the SPI1/2/3 clock source.
3374   * @param  __RCC_SPI123CLKSource__ defines the SPI1/2/3 clock source. This clock is derived
3375   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
3376   *          This parameter can be one of the following values:
3377   *             @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL
3378   *             @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2
3379   *             @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3
3380   *             @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock  = CLKP
3381   *             @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock
3382   * @retval None
3383   */
3384 #if defined(RCC_D2CCIP1R_SPI123SEL)
3385 #define __HAL_RCC_SPI123_CONFIG(__RCC_SPI123CLKSource__ )\
3386                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI123CLKSource__))
3387 #else
3388 #define __HAL_RCC_SPI123_CONFIG(__RCC_SPI123CLKSource__ )\
3389                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI123SEL, (__RCC_SPI123CLKSource__))
3390 #endif /* RCC_D2CCIP1R_SPI123SEL */
3391 
3392 /** @brief  Macro to get the SPI1/2/3 clock source.
3393   * @retval The clock source can be one of the following values:
3394   *             @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL
3395   *             @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2
3396   *             @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3
3397   *             @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock  = CLKP
3398   *             @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock
3399   */
3400 #if defined(RCC_D2CCIP1R_SPI123SEL)
3401 #define __HAL_RCC_GET_SPI123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))
3402 #else
3403 #define __HAL_RCC_GET_SPI123_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI123SEL)))
3404 #endif /* RCC_D2CCIP1R_SPI123SEL */
3405 
3406 /**
3407   * @brief  Macro to Configure the SPI1 clock source.
3408   * @param  __RCC_SPI1CLKSource__ defines the SPI1 clock source. This clock is derived
3409   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
3410   *          This parameter can be one of the following values:
3411   *             @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL
3412   *             @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2
3413   *             @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3
3414   *             @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock  = CLKP
3415   *             @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock
3416   * @retval None
3417   */
3418 #define __HAL_RCC_SPI1_CONFIG  __HAL_RCC_SPI123_CONFIG
3419 
3420 /** @brief  Macro to get the SPI1 clock source.
3421   * @retval The clock source can be one of the following values:
3422   *             @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL
3423   *             @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2
3424   *             @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3
3425   *             @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock  = CLKP
3426   *             @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock
3427   */
3428 #define __HAL_RCC_GET_SPI1_SOURCE  __HAL_RCC_GET_SPI123_SOURCE
3429 
3430 /**
3431   * @brief  Macro to Configure the SPI2 clock source.
3432   * @param  __RCC_SPI2CLKSource__ defines the SPI2 clock source. This clock is derived
3433   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
3434   *          This parameter can be one of the following values:
3435   *             @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL
3436   *             @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2
3437   *             @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3
3438   *             @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock  = CLKP
3439   *             @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock
3440   * @retval None
3441   */
3442 #define __HAL_RCC_SPI2_CONFIG  __HAL_RCC_SPI123_CONFIG
3443 
3444 /** @brief  Macro to get the SPI2 clock source.
3445   * @retval The clock source can be one of the following values:
3446   *             @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL
3447   *             @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2
3448   *             @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3
3449   *             @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock  = CLKP
3450   *             @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock
3451   */
3452 #define __HAL_RCC_GET_SPI2_SOURCE  __HAL_RCC_GET_SPI123_SOURCE
3453 
3454 /**
3455   * @brief  Macro to Configure the SPI3 clock source.
3456   * @param  __RCC_SPI3CLKSource__ defines the SPI3 clock source. This clock is derived
3457   *         from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
3458   *          This parameter can be one of the following values:
3459   *             @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL
3460   *             @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2
3461   *             @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3
3462   *             @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock  = CLKP
3463   *             @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock
3464   * @retval None
3465   */
3466 #define __HAL_RCC_SPI3_CONFIG  __HAL_RCC_SPI123_CONFIG
3467 
3468 /** @brief  Macro to get the SPI3 clock source.
3469   * @retval The clock source can be one of the following values:
3470   *             @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL
3471   *             @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2
3472   *             @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3
3473   *             @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock  = CLKP
3474   *             @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock
3475   */
3476 #define __HAL_RCC_GET_SPI3_SOURCE  __HAL_RCC_GET_SPI123_SOURCE
3477 
3478 /**
3479   * @brief  Macro to Configure the SPI4/5 clock source.
3480   * @param  __RCC_SPI45CLKSource__ defines the SPI4/5 clock source. This clock is derived
3481   *         from system PCLK, PLL2, PLL3, OSC
3482   *          This parameter can be one of the following values:
3483   *             @arg RCC_SPI45CLKSOURCE_D2PCLK2:SPI4/5 clock = D2PCLK2
3484   *             @arg RCC_SPI45CLKSOURCE_PLL2:   SPI4/5 clock = PLL2
3485   *             @arg RCC_SPI45CLKSOURCE_PLL3:   SPI4/5 clock = PLL3
3486   *             @arg RCC_SPI45CLKSOURCE_HSI:    SPI4/5 clock = HSI
3487   *             @arg RCC_SPI45CLKSOURCE_CSI:    SPI4/5 clock = CSI
3488   *             @arg RCC_SPI45CLKSOURCE_HSE:    SPI4/5 clock = HSE
3489   * @retval None
3490   */
3491 #if defined(RCC_D2CCIP1R_SPI45SEL)
3492 #define __HAL_RCC_SPI45_CONFIG(__RCC_SPI45CLKSource__ )\
3493                   MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL, (__RCC_SPI45CLKSource__))
3494 #else
3495 #define __HAL_RCC_SPI45_CONFIG(__RCC_SPI45CLKSource__ )\
3496                   MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI45SEL, (__RCC_SPI45CLKSource__))
3497 #endif /* RCC_D2CCIP1R_SPI45SEL */
3498 
3499 /** @brief  Macro to get the SPI4/5 clock source.
3500   * @retval The clock source can be one of the following values:
3501   *             @arg RCC_SPI45CLKSOURCE_D2PCLK2:SPI4/5 clock = D2PCLK2
3502   *             @arg RCC_SPI45CLKSOURCE_PLL2:   SPI4/5 clock = PLL2
3503   *             @arg RCC_SPI45CLKSOURCE_PLL3:   SPI4/5 clock = PLL3
3504   *             @arg RCC_SPI45CLKSOURCE_HSI:    SPI4/5 clock = HSI
3505   *             @arg RCC_SPI45CLKSOURCE_CSI:    SPI4/5 clock = CSI
3506   *             @arg RCC_SPI45CLKSOURCE_HSE:    SPI4/5 clock = HSE
3507 */
3508 #if defined(RCC_D2CCIP1R_SPI45SEL)
3509 #define __HAL_RCC_GET_SPI45_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL)))
3510 #else
3511 #define __HAL_RCC_GET_SPI45_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI45SEL)))
3512 #endif /* RCC_D2CCIP1R_SPI45SEL */
3513 
3514 /**
3515   * @brief  Macro to Configure the SPI4 clock source.
3516   * @param  __RCC_SPI4CLKSource__ defines the SPI4 clock source. This clock is derived
3517   *         from system PCLK, PLL2, PLL3, OSC
3518   *          This parameter can be one of the following values:
3519   *             @arg RCC_SPI4CLKSOURCE_D2PCLK2:SPI4 clock = D2PCLK2
3520   *             @arg RCC_SPI4CLKSOURCE_PLL2:   SPI4 clock = PLL2
3521   *             @arg RCC_SPI4CLKSOURCE_PLL3:   SPI4 clock = PLL3
3522   *             @arg RCC_SPI4CLKSOURCE_HSI:    SPI4 clock = HSI
3523   *             @arg RCC_SPI4CLKSOURCE_CSI:    SPI4 clock = CSI
3524   *             @arg RCC_SPI4CLKSOURCE_HSE:    SPI4 clock = HSE
3525   * @retval None
3526   */
3527 #define __HAL_RCC_SPI4_CONFIG  __HAL_RCC_SPI45_CONFIG
3528 
3529 /** @brief  Macro to get the SPI4 clock source.
3530   * @retval The clock source can be one of the following values:
3531   *             @arg RCC_SPI4CLKSOURCE_D2PCLK2:SPI4 clock = D2PCLK2
3532   *             @arg RCC_SPI4CLKSOURCE_PLL2:   SPI4 clock = PLL2
3533   *             @arg RCC_SPI4CLKSOURCE_PLL3:   SPI4 clock = PLL3
3534   *             @arg RCC_SPI4CLKSOURCE_HSI:    SPI4 clock = HSI
3535   *             @arg RCC_SPI4CLKSOURCE_CSI:    SPI4 clock = CSI
3536   *             @arg RCC_SPI4CLKSOURCE_HSE:    SPI4 clock = HSE
3537 */
3538 #define __HAL_RCC_GET_SPI4_SOURCE  __HAL_RCC_GET_SPI45_SOURCE
3539 
3540 /**
3541   * @brief  Macro to Configure the SPI5 clock source.
3542   * @param  __RCC_SPI5CLKSource__ defines the SPI5 clock source. This clock is derived
3543   *         from system PCLK, PLL2, PLL3, OSC
3544   *          This parameter can be one of the following values:
3545   *             @arg RCC_SPI5CLKSOURCE_D2PCLK2:SPI5 clock = D2PCLK2
3546   *             @arg RCC_SPI5CLKSOURCE_PLL2:   SPI5 clock = PLL2
3547   *             @arg RCC_SPI5CLKSOURCE_PLL3:   SPI5 clock = PLL3
3548   *             @arg RCC_SPI5CLKSOURCE_HSI:    SPI5 clock = HSI
3549   *             @arg RCC_SPI5CLKSOURCE_CSI:    SPI5 clock = CSI
3550   *             @arg RCC_SPI5CLKSOURCE_HSE:    SPI5 clock = HSE
3551   * @retval None
3552   */
3553 #define __HAL_RCC_SPI5_CONFIG  __HAL_RCC_SPI45_CONFIG
3554 
3555 /** @brief  Macro to get the SPI5 clock source.
3556   * @retval The clock source can be one of the following values:
3557   *             @arg RCC_SPI5CLKSOURCE_D2PCLK2:SPI5 clock = D2PCLK2
3558   *             @arg RCC_SPI5CLKSOURCE_PLL2:   SPI5 clock = PLL2
3559   *             @arg RCC_SPI5CLKSOURCE_PLL3:   SPI5 clock = PLL3
3560   *             @arg RCC_SPI5CLKSOURCE_HSI:    SPI5 clock = HSI
3561   *             @arg RCC_SPI5CLKSOURCE_CSI:    SPI5 clock = CSI
3562   *             @arg RCC_SPI5CLKSOURCE_HSE:    SPI5 clock = HSE
3563 */
3564 #define __HAL_RCC_GET_SPI5_SOURCE  __HAL_RCC_GET_SPI45_SOURCE
3565 
3566 /**
3567   * @brief  Macro to Configure the SPI6 clock source.
3568   * @param  __RCC_SPI6CLKSource__ defines the SPI6 clock source. This clock is derived
3569   *         from system PCLK, PLL2, PLL3, OSC
3570   *          This parameter can be one of the following values:
3571   *             @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1
3572   *             @arg RCC_SPI6CLKSOURCE_PLL2:   SPI6 clock = PLL2
3573   *             @arg RCC_SPI6CLKSOURCE_PLL3:   SPI6 clock = PLL3
3574   *             @arg RCC_SPI6CLKSOURCE_HSI:    SPI6 clock = HSI
3575   *             @arg RCC_SPI6CLKSOURCE_CSI:    SPI6 clock = CSI
3576   *             @arg RCC_SPI6CLKSOURCE_HSE:    SPI6 clock = HSE
3577   *             @arg RCC_SPI6CLKSOURCE_PIN:    SPI6 clock = I2S_CKIN (*)
3578   *
3579   * @retval None
3580   *
3581   * (*) : Available on stm32h7a3xx and stm32h7b3xx family lines.
3582   *
3583   */
3584 #if defined(RCC_D3CCIPR_SPI6SEL)
3585 #define __HAL_RCC_SPI6_CONFIG(__RCC_SPI6CLKSource__ )\
3586                   MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL, (__RCC_SPI6CLKSource__))
3587 #else
3588 #define __HAL_RCC_SPI6_CONFIG(__RCC_SPI6CLKSource__ )\
3589                   MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_SPI6SEL, (__RCC_SPI6CLKSource__))
3590 #endif /* RCC_D3CCIPR_SPI6SEL */
3591 
3592 /** @brief  Macro to get the SPI6 clock source.
3593   * @retval The clock source can be one of the following values:
3594   *             @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1
3595   *             @arg RCC_SPI6CLKSOURCE_PLL2:   SPI6 clock = PLL2
3596   *             @arg RCC_SPI6CLKSOURCE_PLL3:   SPI6 clock = PLL3
3597   *             @arg RCC_SPI6CLKSOURCE_HSI:    SPI6 clock = HSI
3598   *             @arg RCC_SPI6CLKSOURCE_CSI:    SPI6 clock = CSI
3599   *             @arg RCC_SPI6CLKSOURCE_HSE:    SPI6 clock = HSE
3600   *                @arg RCC_SPI6CLKSOURCE_PIN:    SPI6 clock = I2S_CKIN
3601 */
3602 #if defined(RCC_D3CCIPR_SPI6SEL)
3603 #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL)))
3604 #else
3605 #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_SPI6SEL)))
3606 #endif /* RCC_D3CCIPR_SPI6SEL */
3607 
3608 /** @brief  Macro to configure the SDMMC clock
3609   * @param  __SDMMCCLKSource__ specifies  clock source  for SDMMC
3610   *         This parameter can be one of the following values:
3611   *            @arg RCC_SDMMCCLKSOURCE_PLL:  PLLQ selected as SDMMC clock
3612   *            @arg RCC_SDMMCCLKSOURCE_PLL2: PLL2R selected as SDMMC clock
3613   */
3614 #if defined(RCC_D1CCIPR_SDMMCSEL)
3615 #define __HAL_RCC_SDMMC_CONFIG(__SDMMCCLKSource__) \
3616                   MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL, (uint32_t)(__SDMMCCLKSource__))
3617 #else
3618 #define __HAL_RCC_SDMMC_CONFIG(__SDMMCCLKSource__) \
3619                   MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL, (uint32_t)(__SDMMCCLKSource__))
3620 #endif /* RCC_D1CCIPR_SDMMCSEL */
3621 
3622 /** @brief  Macro to get the SDMMC clock
3623   */
3624 #if defined(RCC_D1CCIPR_SDMMCSEL)
3625 #define __HAL_RCC_GET_SDMMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL)))
3626 #else
3627 #define __HAL_RCC_GET_SDMMC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL)))
3628 #endif /* RCC_D1CCIPR_SDMMCSEL */
3629 
3630 /** @brief macro to configure the RNG clock (RNGCLK).
3631   *
3632   * @param  __RNGCLKSource__ specifies the RNG clock source.
3633   *          This parameter can be one of the following values:
3634   *            @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock
3635   *            @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock
3636   *            @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock
3637   *            @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock
3638   */
3639 #if defined(RCC_D2CCIP2R_RNGSEL)
3640 #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \
3641                   MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL, (uint32_t)(__RNGCLKSource__))
3642 #else
3643 #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \
3644                   MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL, (uint32_t)(__RNGCLKSource__))
3645 #endif /* RCC_D2CCIP2R_RNGSEL */
3646 
3647 /** @brief  macro to get the RNG clock source.
3648   * @retval The clock source can be one of the following values:
3649   *            @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock
3650   *            @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock
3651   *            @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock
3652   *            @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock
3653   */
3654 #if defined(RCC_D2CCIP2R_RNGSEL)
3655 #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL)))
3656 #else
3657 #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL)))
3658 #endif /* RCC_D2CCIP2R_RNGSEL */
3659 
3660 #if defined(HRTIM1)
3661 /** @brief  Macro to configure the HRTIM1 prescaler clock source.
3662   * @param  __HRTIM1CLKSource__ specifies the HRTIM1 prescaler clock source.
3663   *         This parameter can be one of the following values:
3664   *            @arg @ref RCC_HRTIM1CLK_TIMCLK    Timers  clock  selected as HRTIM1 prescaler clock
3665   *            @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock
3666   */
3667 #define __HAL_RCC_HRTIM1_CONFIG(__HRTIM1CLKSource__) \
3668                   MODIFY_REG(RCC->CFGR, RCC_CFGR_HRTIMSEL, (uint32_t)(__HRTIM1CLKSource__))
3669 
3670 /** @brief  Macro to get the HRTIM1 clock source.
3671   * @retval The clock source can be one of the following values:
3672   *            @arg @ref RCC_HRTIM1CLK_TIMCLK   Timers  clock  selected as HRTIM1 prescaler clock
3673   *            @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock
3674   */
3675 #define __HAL_RCC_GET_HRTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HRTIMSEL)))
3676 #endif /* HRTIM1 */
3677 
3678 /** @brief  Macro to configure the Timers clocks prescalers
3679   * @param  __PRESC__  specifies the Timers clocks prescalers selection
3680   *         This parameter can be one of the following values:
3681   *            @arg RCC_TIMPRES_DESACTIVATED: The Timers kernels clocks prescaler is
3682   *                 equal to rcc_hclk1 if D2PPREx is corresponding to division by 1 or 2,
3683   *                 else it is equal to 2 x Frcc_pclkx_d2 (default after reset)
3684   *            @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is
3685   *                 equal to rcc_hclk1 if D2PPREx is corresponding to division by 1, 2 or 4,
3686   *                 else it is equal to 4 x Frcc_pclkx_d2
3687   */
3688 #define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) do {RCC->CFGR &= ~(RCC_CFGR_TIMPRE);\
3689                                                  RCC->CFGR |= (__PRESC__);       \
3690                                                 }while(0)
3691 
3692 /**
3693   * @brief Enable the RCC LSE CSS Extended Interrupt Line.
3694   * @retval None
3695   */
3696 #define __HAL_RCC_LSECSS_EXTI_ENABLE_IT()      SET_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
3697 
3698 /**
3699   * @brief Disable the RCC LSE CSS Extended Interrupt Line.
3700   * @retval None
3701   */
3702 #define __HAL_RCC_LSECSS_EXTI_DISABLE_IT()     CLEAR_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
3703 
3704 /**
3705   * @brief Enable the RCC LSE CSS Event Line.
3706   * @retval None.
3707   */
3708 #define __HAL_RCC_LSECSS_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
3709 
3710 /**
3711   * @brief Disable the RCC LSE CSS Event Line.
3712   * @retval None.
3713   */
3714 #define __HAL_RCC_LSECSS_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
3715 
3716 #if defined(DUAL_CORE)
3717 /**
3718   * @brief Enable the RCC LSE CSS Extended Interrupt Line for CM4.
3719   * @retval None
3720   */
3721 #define __HAL_RCC_C2_LSECSS_EXTI_ENABLE_IT()       SET_BIT(EXTI->C2IMR1, RCC_EXTI_LINE_LSECSS)
3722 
3723 /**
3724   * @brief Disable the RCC LSE CSS Extended Interrupt Line for CM4.
3725   * @retval None
3726   */
3727 #define __HAL_RCC_C2_LSECSS_EXTI_DISABLE_IT()      CLEAR_BIT(EXTI->C2IMR1, RCC_EXTI_LINE_LSECSS)
3728 
3729 /**
3730   * @brief Enable the RCC LSE CSS Event Line for CM4.
3731   * @retval None.
3732   */
3733 #define __HAL_RCC_C2_LSECSS_EXTI_ENABLE_EVENT()    SET_BIT(EXTI->C2EMR1, RCC_EXTI_LINE_LSECSS)
3734 
3735 /**
3736   * @brief Disable the RCC LSE CSS Event Line for CM4.
3737   * @retval None.
3738   */
3739 #define __HAL_RCC_C2_LSECSS_EXTI_DISABLE_EVENT()   CLEAR_BIT(EXTI->C2EMR1, RCC_EXTI_LINE_LSECSS)
3740 #endif /* DUAL_CORE */
3741 
3742 /**
3743   * @brief  Enable the RCC LSE CSS Extended Interrupt Falling Trigger.
3744   * @retval None.
3745   */
3746 #define __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE()  SET_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
3747 
3748 
3749 /**
3750   * @brief Disable the RCC LSE CSS Extended Interrupt Falling Trigger.
3751   * @retval None.
3752   */
3753 #define __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
3754 
3755 
3756 /**
3757   * @brief  Enable the RCC LSE CSS Extended Interrupt Rising Trigger.
3758   * @retval None.
3759   */
3760 #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
3761 
3762 /**
3763   * @brief Disable the RCC LSE CSS Extended Interrupt Rising Trigger.
3764   * @retval None.
3765   */
3766 #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
3767 
3768 /**
3769   * @brief Enable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
3770   * @retval None.
3771   */
3772 #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_FALLING_EDGE()  \
3773   do {                                                      \
3774     __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE();             \
3775     __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE();            \
3776   } while(0)
3777 
3778 /**
3779   * @brief Disable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
3780   * @retval None.
3781   */
3782 #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_FALLING_EDGE()  \
3783   do {                                                       \
3784     __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE();             \
3785     __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE();            \
3786   } while(0)
3787 
3788 /**
3789   * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not.
3790   * @retval EXTI RCC LSE CSS Line Status.
3791   */
3792 #define __HAL_RCC_LSECSS_EXTI_GET_FLAG()       (READ_BIT(EXTI->PR1, RCC_EXTI_LINE_LSECSS) == RCC_EXTI_LINE_LSECSS)
3793 
3794 /**
3795   * @brief Clear the RCC LSE CSS EXTI flag.
3796   * @retval None.
3797   */
3798 #define __HAL_RCC_LSECSS_EXTI_CLEAR_FLAG()     WRITE_REG(EXTI->PR1, RCC_EXTI_LINE_LSECSS)
3799 
3800 #if defined(DUAL_CORE)
3801 /**
3802   * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not for CM4.
3803   * @retval EXTI RCC LSE CSS Line Status.
3804   */
3805 #define __HAL_RCC_C2_LSECSS_EXTI_GET_FLAG()       (READ_BIT(EXTI->C2PR1, RCC_EXTI_LINE_LSECSS) == RCC_EXTI_LINE_LSECSS)
3806 
3807 /**
3808   * @brief Clear the RCC LSE CSS EXTI flag or not for CM4.
3809   * @retval None.
3810   */
3811 #define __HAL_RCC_C2_LSECSS_EXTI_CLEAR_FLAG()     WRITE_REG(EXTI->C2PR1, RCC_EXTI_LINE_LSECSS)
3812 #endif /* DUAL_CORE */
3813 /**
3814   * @brief Generate a Software interrupt on the RCC LSE CSS EXTI line.
3815   * @retval None.
3816   */
3817 #define __HAL_RCC_LSECSS_EXTI_GENERATE_SWIT()  SET_BIT(EXTI->SWIER1, RCC_EXTI_LINE_LSECSS)
3818 
3819 /**
3820   * @brief  Enable the specified CRS interrupts.
3821   * @param  __INTERRUPT__ specifies the CRS interrupt sources to be enabled.
3822   *          This parameter can be any combination of the following values:
3823   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt
3824   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt
3825   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt
3826   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt
3827   * @retval None
3828   */
3829 #define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__)   SET_BIT(CRS->CR, (__INTERRUPT__))
3830 
3831 /**
3832   * @brief  Disable the specified CRS interrupts.
3833   * @param  __INTERRUPT__ specifies the CRS interrupt sources to be disabled.
3834   *          This parameter can be any combination of the following values:
3835   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt
3836   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt
3837   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt
3838   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt
3839   * @retval None
3840   */
3841 #define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__)  CLEAR_BIT(CRS->CR, (__INTERRUPT__))
3842 
3843 /** @brief  Check whether the CRS interrupt has occurred or not.
3844   * @param  __INTERRUPT__ specifies the CRS interrupt source to check.
3845   *         This parameter can be one of the following values:
3846   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt
3847   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt
3848   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt
3849   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt
3850   * @retval The new state of __INTERRUPT__ (SET or RESET).
3851   */
3852 #define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__)  ((READ_BIT(CRS->CR, (__INTERRUPT__)) != 0U) ? SET : RESET)
3853 
3854 /** @brief  Clear the CRS interrupt pending bits
3855   * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.
3856   *         This parameter can be any combination of the following values:
3857   *              @arg @ref RCC_CRS_IT_SYNCOK  SYNC event OK interrupt
3858   *              @arg @ref RCC_CRS_IT_SYNCWARN  SYNC warning interrupt
3859   *              @arg @ref RCC_CRS_IT_ERR  Synchronization or trimming error interrupt
3860   *              @arg @ref RCC_CRS_IT_ESYNC  Expected SYNC interrupt
3861   *              @arg @ref RCC_CRS_IT_TRIMOVF  Trimming overflow or underflow interrupt
3862   *              @arg @ref RCC_CRS_IT_SYNCERR  SYNC error interrupt
3863   *              @arg @ref RCC_CRS_IT_SYNCMISS  SYNC missed interrupt
3864   */
3865 /* CRS IT Error Mask */
3866 #define  RCC_CRS_IT_ERROR_MASK                 ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS))
3867 
3868 #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__)  do { \
3869                                                  if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != 0U) \
3870                                                  { \
3871                                                    WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \
3872                                                  } \
3873                                                  else \
3874                                                  { \
3875                                                    WRITE_REG(CRS->ICR, (__INTERRUPT__)); \
3876                                                  } \
3877                                                } while(0)
3878 
3879 /**
3880   * @brief  Check whether the specified CRS flag is set or not.
3881   * @param  __FLAG__ specifies the flag to check.
3882   *          This parameter can be one of the following values:
3883   *              @arg @ref RCC_CRS_FLAG_SYNCOK  SYNC event OK
3884   *              @arg @ref RCC_CRS_FLAG_SYNCWARN  SYNC warning
3885   *              @arg @ref RCC_CRS_FLAG_ERR  Error
3886   *              @arg @ref RCC_CRS_FLAG_ESYNC  Expected SYNC
3887   *              @arg @ref RCC_CRS_FLAG_TRIMOVF  Trimming overflow or underflow
3888   *              @arg @ref RCC_CRS_FLAG_SYNCERR  SYNC error
3889   *              @arg @ref RCC_CRS_FLAG_SYNCMISS  SYNC missed
3890   * @retval The new state of _FLAG_ (TRUE or FALSE).
3891   */
3892 #define __HAL_RCC_CRS_GET_FLAG(__FLAG__)  (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__))
3893 
3894 /**
3895   * @brief  Clear the CRS specified FLAG.
3896   * @param __FLAG__ specifies the flag to clear.
3897   *          This parameter can be one of the following values:
3898   *              @arg @ref RCC_CRS_FLAG_SYNCOK  SYNC event OK
3899   *              @arg @ref RCC_CRS_FLAG_SYNCWARN  SYNC warning
3900   *              @arg @ref RCC_CRS_FLAG_ERR  Error
3901   *              @arg @ref RCC_CRS_FLAG_ESYNC  Expected SYNC
3902   *              @arg @ref RCC_CRS_FLAG_TRIMOVF  Trimming overflow or underflow
3903   *              @arg @ref RCC_CRS_FLAG_SYNCERR  SYNC error
3904   *              @arg @ref RCC_CRS_FLAG_SYNCMISS  SYNC missed
3905   * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS and consequently RCC_CRS_FLAG_ERR
3906   * @retval None
3907   */
3908 
3909 /* CRS Flag Error Mask */
3910 #define RCC_CRS_FLAG_ERROR_MASK                ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS))
3911 
3912 #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__)     do { \
3913                                                  if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != 0U) \
3914                                                  { \
3915                                                    WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \
3916                                                  } \
3917                                                  else \
3918                                                  { \
3919                                                    WRITE_REG(CRS->ICR, (__FLAG__)); \
3920                                                  } \
3921                                                } while(0)
3922 
3923 /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features
3924   * @ingroup RTEMSBSPsARMSTM32H7
3925  * @{
3926  */
3927 /**
3928   * @brief  Enable the oscillator clock for frequency error counter.
3929   * @note   when the CEN bit is set the CRS_CFGR register becomes write-protected.
3930   * @retval None
3931   */
3932 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE()  SET_BIT(CRS->CR, CRS_CR_CEN)
3933 
3934 /**
3935   * @brief  Disable the oscillator clock for frequency error counter.
3936   * @retval None
3937   */
3938 #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN)
3939 
3940 /**
3941   * @brief  Enable the automatic hardware adjustment of TRIM bits.
3942   * @note   When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected.
3943   * @retval None
3944   */
3945 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE()     SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
3946 
3947 /**
3948   * @brief  Enable or disable the automatic hardware adjustment of TRIM bits.
3949   * @retval None
3950   */
3951 #define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE()    CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
3952 
3953 /**
3954   * @brief  Macro to calculate reload value to be set in CRS register according to target and sync frequencies
3955   * @note   The RELOAD value should be selected according to the ratio between the target frequency and the frequency
3956   *             of the synchronization source after pre-scaling. It is then decreased by one in order to
3957   *             reach the expected synchronization on the zero value. The formula is the following:
3958   *             RELOAD = (fTARGET / fSYNC) -1
3959   * @param  __FTARGET__ Target frequency (value in Hz)
3960   * @param  __FSYNC__ Synchronization signal frequency (value in Hz)
3961   * @retval None
3962   */
3963 #define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)  (((__FTARGET__) / (__FSYNC__)) - 1U)
3964 
3965 
3966 /**
3967   * @}
3968   */
3969 
3970 
3971 /**
3972   * @}
3973   */
3974 
3975 
3976 /* Exported functions --------------------------------------------------------*/
3977 /** @addtogroup RCCEx_Exported_Functions
3978  * @{
3979  */
3980 
3981 /** @addtogroup RCCEx_Exported_Functions_Group1
3982   * @{
3983   */
3984 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
3985 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
3986 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk);
3987 uint32_t HAL_RCCEx_GetD1PCLK1Freq(void);
3988 uint32_t HAL_RCCEx_GetD3PCLK1Freq(void);
3989 uint32_t HAL_RCCEx_GetD1SysClockFreq(void);
3990 void     HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks);
3991 void     HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks);
3992 void     HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks);
3993 /**
3994   * @}
3995   */
3996 
3997 /** @addtogroup RCCEx_Exported_Functions_Group2
3998   * @{
3999   */
4000 void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk);
4001 void HAL_RCCEx_KerWakeUpStopCLKConfig(uint32_t WakeUpClk);
4002 void HAL_RCCEx_EnableLSECSS(void);
4003 void HAL_RCCEx_DisableLSECSS(void);
4004 void HAL_RCCEx_EnableLSECSS_IT(void);
4005 void HAL_RCCEx_LSECSS_IRQHandler(void);
4006 void HAL_RCCEx_LSECSS_Callback(void);
4007 #if defined(DUAL_CORE)
4008 void HAL_RCCEx_EnableBootCore(uint32_t RCC_BootCx);
4009 #endif /*DUAL_CORE*/
4010 #if defined(RCC_GCR_WW1RSC)
4011 void HAL_RCCEx_WWDGxSysResetConfig(uint32_t RCC_WWDGx);
4012 #endif /*RCC_GCR_WW1RSC*/
4013 /**
4014   * @}
4015   */
4016 
4017 
4018 /** @addtogroup RCCEx_Exported_Functions_Group3
4019   * @{
4020   */
4021 
4022 void     HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit);
4023 void     HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void);
4024 void     HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo);
4025 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout);
4026 void     HAL_RCCEx_CRS_IRQHandler(void);
4027 void     HAL_RCCEx_CRS_SyncOkCallback(void);
4028 void     HAL_RCCEx_CRS_SyncWarnCallback(void);
4029 void     HAL_RCCEx_CRS_ExpectedSyncCallback(void);
4030 void     HAL_RCCEx_CRS_ErrorCallback(uint32_t Error);
4031 
4032 /**
4033   * @}
4034   */
4035 
4036 /**
4037   * @}
4038   */
4039 
4040 /* Private macros ------------------------------------------------------------*/
4041 /** @addtogroup RCCEx_Private_Macros RCCEx Private Macros
4042   * @{
4043   */
4044 /** @defgroup RCCEx_IS_RCC_Definitions RCC Private macros to check input parameters
4045   * @ingroup RTEMSBSPsARMSTM32H7
4046   * @{
4047   */
4048 
4049 #define IS_RCC_PLL2CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL2_DIVP) || \
4050                                          ((VALUE) == RCC_PLL2_DIVQ)  || \
4051                                          ((VALUE) == RCC_PLL2_DIVR))
4052 
4053 #define IS_RCC_PLL3CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL3_DIVP) || \
4054                                           ((VALUE) == RCC_PLL3_DIVQ) || \
4055                                           ((VALUE) == RCC_PLL3_DIVR))
4056 
4057 #if defined(RCC_D2CCIP2R_USART16SEL)
4058 #define IS_RCC_USART16CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART16CLKSOURCE_D2PCLK2)|| \
4059                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL2)   || \
4060                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL3)   || \
4061                                          ((SOURCE) == RCC_USART16CLKSOURCE_CSI)    || \
4062                                          ((SOURCE) == RCC_USART16CLKSOURCE_LSE)    || \
4063                                          ((SOURCE) == RCC_USART16CLKSOURCE_HSI))
4064 #else
4065 #define IS_RCC_USART16CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART16CLKSOURCE_D2PCLK2)|| \
4066                                          ((SOURCE) == RCC_USART16CLKSOURCE_CDPCLK2)|| \
4067                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL2)   || \
4068                                          ((SOURCE) == RCC_USART16CLKSOURCE_PLL3)   || \
4069                                          ((SOURCE) == RCC_USART16CLKSOURCE_CSI)    || \
4070                                          ((SOURCE) == RCC_USART16CLKSOURCE_LSE)    || \
4071                                          ((SOURCE) == RCC_USART16CLKSOURCE_HSI))
4072 /* alias*/
4073 #define IS_RCC_USART16910CLKSOURCE    IS_RCC_USART16CLKSOURCE
4074 #endif /* RCC_D2CCIP2R_USART16SEL */
4075 
4076 #if defined(RCC_D2CCIP2R_USART28SEL)
4077 #define IS_RCC_USART234578CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART234578CLKSOURCE_D2PCLK1)|| \
4078                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL2)   || \
4079                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL3)   || \
4080                                              ((SOURCE) == RCC_USART234578CLKSOURCE_CSI)    || \
4081                                              ((SOURCE) == RCC_USART234578CLKSOURCE_LSE)    || \
4082                                              ((SOURCE) == RCC_USART234578CLKSOURCE_HSI))
4083 #else
4084 #define IS_RCC_USART234578CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART234578CLKSOURCE_D2PCLK1)|| \
4085                                              ((SOURCE) == RCC_USART234578CLKSOURCE_CDPCLK1)|| \
4086                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL2)   || \
4087                                              ((SOURCE) == RCC_USART234578CLKSOURCE_PLL3)   || \
4088                                              ((SOURCE) == RCC_USART234578CLKSOURCE_CSI)    || \
4089                                              ((SOURCE) == RCC_USART234578CLKSOURCE_LSE)    || \
4090                                              ((SOURCE) == RCC_USART234578CLKSOURCE_HSI))
4091 #endif /* RCC_D2CCIP2R_USART28SEL */
4092 
4093 #define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_D2PCLK2)|| \
4094                                         ((SOURCE) == RCC_USART1CLKSOURCE_PLL2)   || \
4095                                         ((SOURCE) == RCC_USART1CLKSOURCE_PLL3)   || \
4096                                         ((SOURCE) == RCC_USART1CLKSOURCE_CSI)    || \
4097                                         ((SOURCE) == RCC_USART1CLKSOURCE_LSE)    || \
4098                                         ((SOURCE) == RCC_USART1CLKSOURCE_HSI))
4099 
4100 #define IS_RCC_USART2CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART2CLKSOURCE_D2PCLK1)|| \
4101                                         ((SOURCE) == RCC_USART2CLKSOURCE_PLL2)   || \
4102                                         ((SOURCE) == RCC_USART2CLKSOURCE_PLL3)   || \
4103                                         ((SOURCE) == RCC_USART2CLKSOURCE_CSI)    || \
4104                                         ((SOURCE) == RCC_USART2CLKSOURCE_LSE)    || \
4105                                         ((SOURCE) == RCC_USART2CLKSOURCE_HSI))
4106 
4107 #define IS_RCC_USART3CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART3CLKSOURCE_D2PCLK1)|| \
4108                                         ((SOURCE) == RCC_USART3CLKSOURCE_PLL2)   || \
4109                                         ((SOURCE) == RCC_USART3CLKSOURCE_PLL3)   || \
4110                                         ((SOURCE) == RCC_USART3CLKSOURCE_CSI)    || \
4111                                         ((SOURCE) == RCC_USART3CLKSOURCE_LSE)    || \
4112                                         ((SOURCE) == RCC_USART3CLKSOURCE_HSI))
4113 
4114 #define IS_RCC_UART4CLKSOURCE(SOURCE)  (((SOURCE) == RCC_UART4CLKSOURCE_D2PCLK1) || \
4115                                         ((SOURCE) == RCC_UART4CLKSOURCE_PLL2)    || \
4116                                         ((SOURCE) == RCC_UART4CLKSOURCE_PLL3)    || \
4117                                         ((SOURCE) == RCC_UART4CLKSOURCE_CSI)     || \
4118                                         ((SOURCE) == RCC_UART4CLKSOURCE_LSE)     || \
4119                                         ((SOURCE) == RCC_UART4CLKSOURCE_HSI))
4120 
4121 #define IS_RCC_UART5CLKSOURCE(SOURCE)  (((SOURCE) == RCC_UART5CLKSOURCE_D2PCLK1) || \
4122                                         ((SOURCE) == RCC_UART5CLKSOURCE_PLL2)    || \
4123                                         ((SOURCE) == RCC_UART5CLKSOURCE_PLL3)    || \
4124                                         ((SOURCE) == RCC_UART5CLKSOURCE_CSI)     || \
4125                                         ((SOURCE) == RCC_UART5CLKSOURCE_LSE)     || \
4126                                         ((SOURCE) == RCC_UART5CLKSOURCE_HSI))
4127 
4128 #define IS_RCC_USART6CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART6CLKSOURCE_D2PCLK2)|| \
4129                                         ((SOURCE) == RCC_USART6CLKSOURCE_PLL2)   || \
4130                                         ((SOURCE) == RCC_USART6CLKSOURCE_PLL3)   || \
4131                                         ((SOURCE) == RCC_USART6CLKSOURCE_CSI)    || \
4132                                         ((SOURCE) == RCC_USART6CLKSOURCE_LSE)    || \
4133                                         ((SOURCE) == RCC_USART6CLKSOURCE_HSI))
4134 
4135 #define IS_RCC_UART7CLKSOURCE(SOURCE)  (((SOURCE) == RCC_UART7CLKSOURCE_D2PCLK1) || \
4136                                         ((SOURCE) == RCC_UART7CLKSOURCE_PLL2)    || \
4137                                         ((SOURCE) == RCC_UART7CLKSOURCE_PLL3)    || \
4138                                         ((SOURCE) == RCC_UART7CLKSOURCE_CSI)     || \
4139                                         ((SOURCE) == RCC_UART7CLKSOURCE_LSE)     || \
4140                                         ((SOURCE) == RCC_UART7CLKSOURCE_HSI))
4141 
4142 #define IS_RCC_UART8CLKSOURCE(SOURCE)  (((SOURCE) == RCC_UART8CLKSOURCE_D2PCLK1) || \
4143                                         ((SOURCE) == RCC_UART8CLKSOURCE_PLL2)    || \
4144                                         ((SOURCE) == RCC_UART8CLKSOURCE_PLL3)    || \
4145                                         ((SOURCE) == RCC_UART8CLKSOURCE_CSI)     || \
4146                                         ((SOURCE) == RCC_UART8CLKSOURCE_LSE)     || \
4147                                         ((SOURCE) == RCC_UART8CLKSOURCE_HSI))
4148 
4149 #if defined(UART9)
4150 #define IS_RCC_UART9CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART9CLKSOURCE_D2PCLK2)|| \
4151                                         ((SOURCE) == RCC_UART9CLKSOURCE_PLL2)  || \
4152                                         ((SOURCE) == RCC_UART9CLKSOURCE_PLL3)  || \
4153                                         ((SOURCE) == RCC_UART9CLKSOURCE_CSI)   || \
4154                                         ((SOURCE) == RCC_UART9CLKSOURCE_LSE)   || \
4155                                         ((SOURCE) == RCC_UART9CLKSOURCE_HSI))
4156 #endif
4157 
4158 #if defined(USART10)
4159 #define IS_RCC_USART10CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART10CLKSOURCE_D2PCLK2)|| \
4160                                         ((SOURCE) == RCC_USART10CLKSOURCE_PLL2)    || \
4161                                         ((SOURCE) == RCC_USART10CLKSOURCE_PLL3)    || \
4162                                         ((SOURCE) == RCC_USART10CLKSOURCE_CSI)     || \
4163                                         ((SOURCE) == RCC_USART10CLKSOURCE_LSE)     || \
4164                                         ((SOURCE) == RCC_USART10CLKSOURCE_HSI))
4165 #endif
4166 
4167 #define IS_RCC_LPUART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPUART1CLKSOURCE_D3PCLK1) || \
4168                                          ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL2)    || \
4169                                          ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL3)    || \
4170                                          ((SOURCE) == RCC_LPUART1CLKSOURCE_CSI)     || \
4171                                          ((SOURCE) == RCC_LPUART1CLKSOURCE_LSE)     || \
4172                                          ((SOURCE) == RCC_LPUART1CLKSOURCE_HSI))
4173 
4174 #if defined(I2C5)
4175 #define IS_RCC_I2C1235CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C1235CLKSOURCE_PLL3)   || \
4176                                           ((SOURCE) == RCC_I2C1235CLKSOURCE_HSI)     || \
4177                                           ((SOURCE) == RCC_I2C1235CLKSOURCE_D2PCLK1) || \
4178                                           ((SOURCE) == RCC_I2C1235CLKSOURCE_CSI))
4179 
4180 #define IS_RCC_I2C123CLKSOURCE    IS_RCC_I2C1235CLKSOURCE  /* For  API Backward compatibility */
4181 #else
4182 #define IS_RCC_I2C123CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C123CLKSOURCE_PLL3)   || \
4183                                           ((SOURCE) == RCC_I2C123CLKSOURCE_HSI)    || \
4184                                           ((SOURCE) == RCC_I2C123CLKSOURCE_D2PCLK1)|| \
4185                                           ((SOURCE) == RCC_I2C123CLKSOURCE_CSI))
4186 #endif /*I2C5*/
4187 
4188 #define IS_RCC_I2C1CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C1CLKSOURCE_PLL3)   || \
4189                                         ((SOURCE) == RCC_I2C1CLKSOURCE_HSI)    || \
4190                                         ((SOURCE) == RCC_I2C1CLKSOURCE_D2PCLK1)|| \
4191                                         ((SOURCE) == RCC_I2C1CLKSOURCE_CSI))
4192 
4193 #define IS_RCC_I2C2CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C2CLKSOURCE_PLL3)   || \
4194                                         ((SOURCE) == RCC_I2C2CLKSOURCE_HSI)    || \
4195                                         ((SOURCE) == RCC_I2C2CLKSOURCE_D2PCLK1)|| \
4196                                         ((SOURCE) == RCC_I2C2CLKSOURCE_CSI))
4197 
4198 #define IS_RCC_I2C3CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C3CLKSOURCE_PLL3)   || \
4199                                         ((SOURCE) == RCC_I2C3CLKSOURCE_HSI)    || \
4200                                         ((SOURCE) == RCC_I2C3CLKSOURCE_D2PCLK1)|| \
4201                                         ((SOURCE) == RCC_I2C3CLKSOURCE_CSI))
4202 
4203 #define IS_RCC_I2C4CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C4CLKSOURCE_PLL3)   || \
4204                                         ((SOURCE) == RCC_I2C4CLKSOURCE_HSI)    || \
4205                                         ((SOURCE) == RCC_I2C4CLKSOURCE_D3PCLK1)|| \
4206                                         ((SOURCE) == RCC_I2C4CLKSOURCE_CSI))
4207 
4208 #if defined(I2C5)
4209 #define IS_RCC_I2C5CLKSOURCE(SOURCE)   (((SOURCE) == RCC_I2C5CLKSOURCE_PLL3)   || \
4210                                         ((SOURCE) == RCC_I2C5CLKSOURCE_HSI)    || \
4211                                         ((SOURCE) == RCC_I2C5CLKSOURCE_D2PCLK1)|| \
4212                                         ((SOURCE) == RCC_I2C5CLKSOURCE_CSI))
4213 #endif /*I2C5*/
4214 
4215 #define IS_RCC_RNGCLKSOURCE(SOURCE)    (((SOURCE) == RCC_RNGCLKSOURCE_HSI48)|| \
4216                                         ((SOURCE) == RCC_RNGCLKSOURCE_PLL)  || \
4217                                         ((SOURCE) == RCC_RNGCLKSOURCE_LSE)  || \
4218                                         ((SOURCE) == RCC_RNGCLKSOURCE_LSI))
4219 
4220 #if defined(HRTIM1)
4221 #define IS_RCC_HRTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_HRTIM1CLK_TIMCLK) || \
4222                                         ((SOURCE) == RCC_HRTIM1CLK_CPUCLK))
4223 #endif
4224 
4225 #define IS_RCC_USBCLKSOURCE(SOURCE)    (((SOURCE) == RCC_USBCLKSOURCE_PLL)  || \
4226                                         ((SOURCE) == RCC_USBCLKSOURCE_PLL3) || \
4227                                         ((SOURCE) == RCC_USBCLKSOURCE_HSI48))
4228 
4229 #define IS_RCC_SAI1CLK(__SOURCE__)   \
4230                (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL)  || \
4231                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL2) || \
4232                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL3) || \
4233                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_CLKP) || \
4234                 ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN))
4235 
4236 #if defined(SAI3)
4237 #define IS_RCC_SAI23CLK(__SOURCE__)   \
4238                (((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL)  || \
4239                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL2) || \
4240                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL3) || \
4241                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_CLKP) || \
4242                 ((__SOURCE__) == RCC_SAI23CLKSOURCE_PIN))
4243 
4244 #define IS_RCC_SAI2CLK(__SOURCE__)   \
4245                (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL)  || \
4246                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL2) || \
4247                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL3) || \
4248                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_CLKP) || \
4249                 ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN))
4250 
4251 
4252 #define IS_RCC_SAI3CLK(__SOURCE__)   \
4253                (((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL)  || \
4254                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL2) || \
4255                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL3) || \
4256                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_CLKP) || \
4257                 ((__SOURCE__) == RCC_SAI3CLKSOURCE_PIN))
4258 #endif
4259 
4260 #if defined(RCC_CDCCIP1R_SAI2ASEL)
4261 #define IS_RCC_SAI2ACLK(__SOURCE__)   \
4262                (((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL)  || \
4263                 ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL2) || \
4264                 ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL3) || \
4265                 ((__SOURCE__) == RCC_SAI2ACLKSOURCE_CLKP) || \
4266                 ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PIN) || \
4267                 ((__SOURCE__) == RCC_SAI2ACLKSOURCE_SPDIF))
4268 #endif
4269 
4270 #if defined(RCC_CDCCIP1R_SAI2BSEL)
4271 #define IS_RCC_SAI2BCLK(__SOURCE__)   \
4272                (((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL)  || \
4273                 ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL2) || \
4274                 ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL3) || \
4275                 ((__SOURCE__) == RCC_SAI2BCLKSOURCE_CLKP) || \
4276                 ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PIN) || \
4277                 ((__SOURCE__) == RCC_SAI2BCLKSOURCE_SPDIF))
4278 #endif
4279 
4280 #define IS_RCC_SPI123CLK(__SOURCE__)   \
4281                (((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL)  || \
4282                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL2) || \
4283                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL3) || \
4284                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_CLKP) || \
4285                 ((__SOURCE__) == RCC_SPI123CLKSOURCE_PIN))
4286 
4287 #define IS_RCC_SPI1CLK(__SOURCE__)   \
4288                (((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL)  || \
4289                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL2) || \
4290                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL3) || \
4291                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_CLKP) || \
4292                 ((__SOURCE__) == RCC_SPI1CLKSOURCE_PIN))
4293 
4294 #define IS_RCC_SPI2CLK(__SOURCE__)   \
4295                (((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL)  || \
4296                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL2) || \
4297                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL3) || \
4298                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_CLKP) || \
4299                 ((__SOURCE__) == RCC_SPI2CLKSOURCE_PIN))
4300 
4301 #define IS_RCC_SPI3CLK(__SOURCE__)   \
4302                (((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL)  || \
4303                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL2) || \
4304                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL3) || \
4305                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_CLKP) || \
4306                 ((__SOURCE__) == RCC_SPI3CLKSOURCE_PIN))
4307 
4308 #define IS_RCC_SPI45CLK(__SOURCE__)   \
4309                (((__SOURCE__) == RCC_SPI45CLKSOURCE_D2PCLK2)  || \
4310                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL2)     || \
4311                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL3)     || \
4312                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSI)      || \
4313                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_CSI)      || \
4314                 ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSE))
4315 
4316 #define IS_RCC_SPI4CLK(__SOURCE__)   \
4317                (((__SOURCE__) == RCC_SPI4CLKSOURCE_D2PCLK2)  || \
4318                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL2)     || \
4319                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL3)     || \
4320                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSI)      || \
4321                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_CSI)      || \
4322                 ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSE))
4323 
4324 #define IS_RCC_SPI5CLK(__SOURCE__)   \
4325                (((__SOURCE__) == RCC_SPI5CLKSOURCE_D2PCLK2)|| \
4326                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL2)   || \
4327                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL3)   || \
4328                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSI)    || \
4329                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_CSI)    || \
4330                 ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSE))
4331 
4332 #if defined(RCC_D3CCIPR_SPI6SEL)
4333 #define IS_RCC_SPI6CLK(__SOURCE__)   \
4334                (((__SOURCE__) == RCC_SPI6CLKSOURCE_D3PCLK1) || \
4335                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2)    || \
4336                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3)    || \
4337                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI)     || \
4338                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI)     || \
4339                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE))
4340 #else
4341 #define IS_RCC_SPI6CLK(__SOURCE__)   \
4342                (((__SOURCE__) == RCC_SPI6CLKSOURCE_D3PCLK1) || \
4343                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2)    || \
4344                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3)    || \
4345                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI)     || \
4346                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI)     || \
4347                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE)     || \
4348                 ((__SOURCE__) == RCC_SPI6CLKSOURCE_PIN))
4349 #endif /* RCC_D3CCIPR_SPI6SEL */
4350 
4351 #if defined(SAI4)
4352 #define IS_RCC_SAI4ACLK(__SOURCE__)   \
4353                (((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL)  || \
4354                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL2) || \
4355                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL3) || \
4356                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_CLKP) || \
4357                 ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PIN))
4358 
4359 #define IS_RCC_SAI4BCLK(__SOURCE__)   \
4360                (((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL)  || \
4361                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL2) || \
4362                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL3) || \
4363                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_CLKP) || \
4364                 ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PIN))
4365 #endif /*SAI4*/
4366 
4367 #define IS_RCC_PLL3M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))
4368 #define IS_RCC_PLL3N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))
4369 #define IS_RCC_PLL3P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4370 #define IS_RCC_PLL3Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4371 #define IS_RCC_PLL3R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4372 
4373 #define IS_RCC_PLL2M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))
4374 #define IS_RCC_PLL2N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))
4375 #define IS_RCC_PLL2P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4376 #define IS_RCC_PLL2Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4377 #define IS_RCC_PLL2R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
4378 
4379 #define IS_RCC_PLL2RGE_VALUE(VALUE) (((VALUE) == RCC_PLL2VCIRANGE_0)  || \
4380                                     ((VALUE) == RCC_PLL2VCIRANGE_1)   || \
4381                                     ((VALUE) == RCC_PLL2VCIRANGE_2)   || \
4382                                     ((VALUE) == RCC_PLL2VCIRANGE_3))
4383 
4384 #define IS_RCC_PLL3RGE_VALUE(VALUE) (((VALUE) == RCC_PLL3VCIRANGE_0)  || \
4385                                     ((VALUE) == RCC_PLL3VCIRANGE_1)   || \
4386                                     ((VALUE) == RCC_PLL3VCIRANGE_2)   || \
4387                                     ((VALUE) == RCC_PLL3VCIRANGE_3))
4388 
4389 #define IS_RCC_PLL2VCO_VALUE(VALUE) (((VALUE) == RCC_PLL2VCOWIDE)  || \
4390                                     ((VALUE) == RCC_PLL2VCOMEDIUM))
4391 
4392 #define IS_RCC_PLL3VCO_VALUE(VALUE) (((VALUE) == RCC_PLL3VCOWIDE)  || \
4393                                     ((VALUE) == RCC_PLL3VCOMEDIUM))
4394 
4395 #define IS_RCC_LPTIM1CLK(SOURCE)       (((SOURCE) == RCC_LPTIM1CLKSOURCE_D2PCLK1)|| \
4396                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL2)   || \
4397                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL3)   || \
4398                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)    || \
4399                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI)    || \
4400                                         ((SOURCE) == RCC_LPTIM1CLKSOURCE_CLKP))
4401 
4402 #define IS_RCC_LPTIM2CLK(SOURCE)       (((SOURCE) == RCC_LPTIM2CLKSOURCE_D3PCLK1)|| \
4403                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL2)   || \
4404                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL3)   || \
4405                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSE)    || \
4406                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSI)    || \
4407                                         ((SOURCE) == RCC_LPTIM2CLKSOURCE_CLKP))
4408 
4409 #define IS_RCC_LPTIM345CLK(SOURCE)     (((SOURCE) == RCC_LPTIM345CLKSOURCE_D3PCLK1)|| \
4410                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL2)   || \
4411                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL3)   || \
4412                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSE)    || \
4413                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSI)    || \
4414                                         ((SOURCE) == RCC_LPTIM345CLKSOURCE_CLKP))
4415 
4416 #define IS_RCC_LPTIM3CLK(SOURCE)       (((SOURCE) == RCC_LPTIM3CLKSOURCE_D3PCLK1)  || \
4417                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL2)     || \
4418                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL3)     || \
4419                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSE)      || \
4420                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSI)      || \
4421                                         ((SOURCE) == RCC_LPTIM3CLKSOURCE_CLKP))
4422 
4423 #if defined(LPTIM4)
4424 #define IS_RCC_LPTIM4CLK(SOURCE)       (((SOURCE) == RCC_LPTIM4CLKSOURCE_D3PCLK1)|| \
4425                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL2)   || \
4426                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL3)   || \
4427                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSE)    || \
4428                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSI)    || \
4429                                         ((SOURCE) == RCC_LPTIM4CLKSOURCE_CLKP))
4430 #endif /* LPTIM4*/
4431 
4432 #if defined(LPTIM5)
4433 #define IS_RCC_LPTIM5CLK(SOURCE)       (((SOURCE) == RCC_LPTIM5CLKSOURCE_D3PCLK1)|| \
4434                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL2)   || \
4435                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL3)   || \
4436                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSE)    || \
4437                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSI)    || \
4438                                         ((SOURCE) == RCC_LPTIM5CLKSOURCE_CLKP))
4439 #endif /*LPTIM5*/
4440 
4441 #if defined(QUADSPI)
4442 #define IS_RCC_QSPICLK(__SOURCE__)   \
4443                (((__SOURCE__) == RCC_QSPICLKSOURCE_D1HCLK)  || \
4444                 ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL)     || \
4445                 ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL2)    || \
4446                 ((__SOURCE__) == RCC_QSPICLKSOURCE_CLKP))
4447 #endif /*QUADSPI*/
4448 
4449 #if defined(OCTOSPI1) || defined(OCTOSPI1)
4450 #define IS_RCC_OSPICLK(__SOURCE__)   \
4451                (((__SOURCE__) == RCC_OSPICLKSOURCE_D1HCLK)  || \
4452                 ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL)     || \
4453                 ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL2)    || \
4454                 ((__SOURCE__) == RCC_OSPICLKSOURCE_CLKP))
4455 #endif /*OCTOSPI1 || OCTOSPI1*/
4456 
4457 #if defined(DSI)
4458 #define IS_RCC_DSICLK(__SOURCE__)   \
4459                (((__SOURCE__) == RCC_DSICLKSOURCE_PHY)  || \
4460                 ((__SOURCE__) == RCC_DSICLKSOURCE_PLL2))
4461 #endif /*DSI*/
4462 
4463 #define IS_RCC_FMCCLK(__SOURCE__)   \
4464                (((__SOURCE__) == RCC_FMCCLKSOURCE_D1HCLK)  || \
4465                 ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL)     || \
4466                 ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL2)    || \
4467                 ((__SOURCE__) == RCC_FMCCLKSOURCE_CLKP))
4468 
4469 #if defined(FDCAN1) || defined(FDCAN2)
4470 #define IS_RCC_FDCANCLK(__SOURCE__)   \
4471                (((__SOURCE__) == RCC_FDCANCLKSOURCE_HSE)  || \
4472                 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL)  || \
4473                 ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL2))
4474 #endif /*FDCAN1 || FDCAN2*/
4475 
4476 #define IS_RCC_SDMMC(__SOURCE__)   \
4477                 (((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL)  || \
4478                 ((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL2))
4479 
4480 #define IS_RCC_ADCCLKSOURCE(SOURCE)    (((SOURCE) == RCC_ADCCLKSOURCE_PLL2) || \
4481                                         ((SOURCE) == RCC_ADCCLKSOURCE_PLL3) || \
4482                                         ((SOURCE) == RCC_ADCCLKSOURCE_CLKP))
4483 
4484 #define IS_RCC_SWPMI1CLKSOURCE(SOURCE) (((SOURCE) == RCC_SWPMI1CLKSOURCE_D2PCLK1) || \
4485                                         ((SOURCE) == RCC_SWPMI1CLKSOURCE_HSI))
4486 
4487 #define IS_RCC_DFSDM1CLKSOURCE(SOURCE)  (((SOURCE) == RCC_DFSDM1CLKSOURCE_D2PCLK1) || \
4488                                          ((SOURCE) == RCC_DFSDM1CLKSOURCE_SYS))
4489 
4490 #if defined(DFSDM2_BASE)
4491 #define IS_RCC_DFSDM2CLKSOURCE(SOURCE)  (((SOURCE) == RCC_DFSDM2CLKSOURCE_SRDPCLK1) || \
4492                                         ((SOURCE) == RCC_DFSDM2CLKSOURCE_SYS))
4493 #endif /*DFSDM2*/
4494 
4495 #define IS_RCC_SPDIFRXCLKSOURCE(SOURCE)(((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL)  || \
4496                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL2) || \
4497                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL3) || \
4498                                         ((SOURCE) == RCC_SPDIFRXCLKSOURCE_HSI))
4499 
4500 #define IS_RCC_CECCLKSOURCE(SOURCE)  (((SOURCE) == RCC_CECCLKSOURCE_LSE) || \
4501                                       ((SOURCE) == RCC_CECCLKSOURCE_LSI) || \
4502                                       ((SOURCE) == RCC_CECCLKSOURCE_CSI))
4503 
4504 #define IS_RCC_CLKPSOURCE(SOURCE)   (((SOURCE) == RCC_CLKPSOURCE_HSI)  || \
4505                                       ((SOURCE) == RCC_CLKPSOURCE_CSI) || \
4506                                       ((SOURCE) == RCC_CLKPSOURCE_HSE))
4507 #define IS_RCC_TIMPRES(VALUE)  \
4508                (((VALUE) == RCC_TIMPRES_DESACTIVATED) || \
4509                 ((VALUE) == RCC_TIMPRES_ACTIVATED))
4510 
4511 #if defined(DUAL_CORE)
4512 #define IS_RCC_BOOT_CORE(CORE)   (((CORE) == RCC_BOOT_C1)  || \
4513                                   ((CORE) == RCC_BOOT_C2))
4514 #endif /*DUAL_CORE*/
4515 
4516 #if defined(DUAL_CORE)
4517 #define IS_RCC_SCOPE_WWDG(WWDG)   (((WWDG) == RCC_WWDG1)  || \
4518                                   ((WWDG) == RCC_WWDG2))
4519 #else
4520 #define IS_RCC_SCOPE_WWDG(WWDG)   ((WWDG) == RCC_WWDG1)
4521 
4522 #endif /*DUAL_CORE*/
4523 
4524 #define IS_RCC_CRS_SYNC_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB2) || \
4525                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_LSE)  || \
4526                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB1) || \
4527                                             ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_PIN))
4528 
4529 #define IS_RCC_CRS_SYNC_DIV(__DIV__)       (((__DIV__) == RCC_CRS_SYNC_DIV1)  || ((__DIV__) == RCC_CRS_SYNC_DIV2)  || \
4530                                             ((__DIV__) == RCC_CRS_SYNC_DIV4)  || ((__DIV__) == RCC_CRS_SYNC_DIV8)  || \
4531                                             ((__DIV__) == RCC_CRS_SYNC_DIV16) || ((__DIV__) == RCC_CRS_SYNC_DIV32) || \
4532                                             ((__DIV__) == RCC_CRS_SYNC_DIV64) || ((__DIV__) == RCC_CRS_SYNC_DIV128))
4533 
4534 #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \
4535                                                 ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING))
4536 
4537 #define IS_RCC_CRS_RELOADVALUE(__VALUE__)  (((__VALUE__) <= 0xFFFFU))
4538 
4539 #define IS_RCC_CRS_ERRORLIMIT(__VALUE__)   (((__VALUE__) <= 0xFFU))
4540 
4541 #define IS_RCC_CRS_HSI48CALIBRATION(__VALUE__) (((__VALUE__) <= 0x3FU))
4542 
4543 #define IS_RCC_CRS_FREQERRORDIR(__DIR__)   (((__DIR__) == RCC_CRS_FREQERRORDIR_UP) || \
4544                                             ((__DIR__) == RCC_CRS_FREQERRORDIR_DOWN))
4545 /**
4546   * @}
4547   */
4548 
4549 /**
4550   * @}
4551   */
4552 
4553 /**
4554   * @}
4555   */
4556 
4557 /**
4558   * @}
4559   */
4560 
4561 #ifdef __cplusplus
4562 }
4563 #endif
4564 
4565 #endif /* STM32H7xx_HAL_RCC_EX_H */
4566