You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

6327 lines
230 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_ll_rcc.h
  4. * @author MCD Application Team
  5. * @version $VERSION$
  6. * @date $DATE$
  7. * @brief Header file of RCC LL module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics.
  12. * All rights reserved.</center></h2>
  13. *
  14. * This software component is licensed by ST under BSD 3-Clause license,
  15. * the "License"; You may not use this file except in compliance with the
  16. * License. You may obtain a copy of the License at:
  17. * opensource.org/licenses/BSD-3-Clause
  18. *
  19. ******************************************************************************
  20. */
  21. /* Define to prevent recursive inclusion -------------------------------------*/
  22. #ifndef STM32H7xx_LL_RCC_H
  23. #define STM32H7xx_LL_RCC_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /* Includes ------------------------------------------------------------------*/
  28. #include "stm32h7xx.h"
  29. #include <math.h>
  30. /** @addtogroup STM32H7xx_LL_Driver
  31. * @{
  32. */
  33. #if defined(RCC)
  34. /** @defgroup RCC_LL RCC
  35. * @{
  36. */
  37. /* Private types -------------------------------------------------------------*/
  38. /* Private variables ---------------------------------------------------------*/
  39. /** @defgroup RCC_LL_Private_Variables RCC Private Variables
  40. * @{
  41. */
  42. extern const uint8_t LL_RCC_PrescTable[16];
  43. /**
  44. * @}
  45. */
  46. /* Private constants ---------------------------------------------------------*/
  47. /* Private macros ------------------------------------------------------------*/
  48. #if !defined(UNUSED)
  49. #define UNUSED(x) ((void)(x))
  50. #endif
  51. /* 32 24 16 8 0
  52. --------------------------------------------------------
  53. | Mask | ClkSource | Bit | Register |
  54. | | Config | Position | Offset |
  55. --------------------------------------------------------*/
  56. #if defined(RCC_VER_2_0)
  57. /* Clock source register offset Vs CDCCIPR regsiter */
  58. #define CDCCIP 0x0UL
  59. #define CDCCIP1 0x4UL
  60. #define CDCCIP2 0x8UL
  61. #define SRDCCIP 0xCUL
  62. #else
  63. /* Clock source register offset Vs D1CCIPR regsiter */
  64. #define D1CCIP 0x0UL
  65. #define D2CCIP1 0x4UL
  66. #define D2CCIP2 0x8UL
  67. #define D3CCIP 0xCUL
  68. #endif /* RCC_VER_2_0 */
  69. #define LL_RCC_REG_SHIFT 0U
  70. #define LL_RCC_POS_SHIFT 8U
  71. #define LL_RCC_CONFIG_SHIFT 16U
  72. #define LL_RCC_MASK_SHIFT 24U
  73. #define LL_CLKSOURCE_SHIFT(__CLKSOURCE__) (((__CLKSOURCE__) >> LL_RCC_POS_SHIFT ) & 0x1FUL)
  74. #define LL_CLKSOURCE_MASK(__CLKSOURCE__) ((((__CLKSOURCE__) >> LL_RCC_MASK_SHIFT ) & 0xFFUL) << LL_CLKSOURCE_SHIFT(__CLKSOURCE__))
  75. #define LL_CLKSOURCE_CONFIG(__CLKSOURCE__) ((((__CLKSOURCE__) >> LL_RCC_CONFIG_SHIFT) & 0xFFUL) << LL_CLKSOURCE_SHIFT(__CLKSOURCE__))
  76. #define LL_CLKSOURCE_REG(__CLKSOURCE__) (((__CLKSOURCE__) >> LL_RCC_REG_SHIFT ) & 0xFFUL)
  77. #define LL_CLKSOURCE(__REG__, __MSK__, __POS__, __CLK__) ((uint32_t)((((__MSK__) >> (__POS__)) << LL_RCC_MASK_SHIFT) | \
  78. (( __POS__ ) << LL_RCC_POS_SHIFT) | \
  79. (( __REG__ ) << LL_RCC_REG_SHIFT) | \
  80. (((__CLK__) >> (__POS__)) << LL_RCC_CONFIG_SHIFT)))
  81. #if defined(USE_FULL_LL_DRIVER)
  82. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  83. * @{
  84. */
  85. /**
  86. * @}
  87. */
  88. #endif /*USE_FULL_LL_DRIVER*/
  89. /* Exported types ------------------------------------------------------------*/
  90. #if defined(USE_FULL_LL_DRIVER)
  91. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  92. * @{
  93. */
  94. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  95. * @{
  96. */
  97. /**
  98. * @brief RCC Clocks Frequency Structure
  99. */
  100. typedef struct
  101. {
  102. uint32_t SYSCLK_Frequency;
  103. uint32_t CPUCLK_Frequency;
  104. uint32_t HCLK_Frequency;
  105. uint32_t PCLK1_Frequency;
  106. uint32_t PCLK2_Frequency;
  107. uint32_t PCLK3_Frequency;
  108. uint32_t PCLK4_Frequency;
  109. } LL_RCC_ClocksTypeDef;
  110. /**
  111. * @}
  112. */
  113. /**
  114. * @brief PLL Clocks Frequency Structure
  115. */
  116. typedef struct
  117. {
  118. uint32_t PLL_P_Frequency;
  119. uint32_t PLL_Q_Frequency;
  120. uint32_t PLL_R_Frequency;
  121. } LL_PLL_ClocksTypeDef;
  122. /**
  123. * @}
  124. */
  125. #endif /* USE_FULL_LL_DRIVER */
  126. /* Exported constants --------------------------------------------------------*/
  127. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  128. * @{
  129. */
  130. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  131. * @brief Defines used to adapt values of different oscillators
  132. * @note These values could be modified in the user environment according to
  133. * HW set-up.
  134. * @{
  135. */
  136. #if !defined (HSE_VALUE)
  137. #if defined(RCC_VER_X)
  138. #define HSE_VALUE 25000000U /*!< Value of the HSE oscillator in Hz */
  139. #else
  140. #define HSE_VALUE 24000000U /*!< Value of the HSE oscillator in Hz */
  141. #endif /* RCC_VER_X */
  142. #endif /* HSE_VALUE */
  143. #if !defined (HSI_VALUE)
  144. #define HSI_VALUE 64000000U /*!< Value of the HSI oscillator in Hz */
  145. #endif /* HSI_VALUE */
  146. #if !defined (CSI_VALUE)
  147. #define CSI_VALUE 4000000U /*!< Value of the CSI oscillator in Hz */
  148. #endif /* CSI_VALUE */
  149. #if !defined (LSE_VALUE)
  150. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  151. #endif /* LSE_VALUE */
  152. #if !defined (LSI_VALUE)
  153. #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */
  154. #endif /* LSI_VALUE */
  155. #if !defined (EXTERNAL_CLOCK_VALUE)
  156. #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the I2S_CKIN external oscillator in Hz */
  157. #endif /* EXTERNAL_CLOCK_VALUE */
  158. #if !defined (HSI48_VALUE)
  159. #define HSI48_VALUE 48000000U /*!< Value of the HSI48 oscillator in Hz */
  160. #endif /* HSI48_VALUE */
  161. /**
  162. * @}
  163. */
  164. /** @defgroup RCC_LL_EC_HSIDIV HSI oscillator divider
  165. * @{
  166. */
  167. #define LL_RCC_HSI_DIV1 RCC_CR_HSIDIV_1
  168. #define LL_RCC_HSI_DIV2 RCC_CR_HSIDIV_2
  169. #define LL_RCC_HSI_DIV4 RCC_CR_HSIDIV_4
  170. #define LL_RCC_HSI_DIV8 RCC_CR_HSIDIV_8
  171. /**
  172. * @}
  173. */
  174. /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
  175. * @{
  176. */
  177. #define LL_RCC_LSEDRIVE_LOW (uint32_t)(0x00000000U)
  178. #define LL_RCC_LSEDRIVE_MEDIUMLOW (uint32_t)(RCC_BDCR_LSEDRV_0)
  179. #define LL_RCC_LSEDRIVE_MEDIUMHIGH (uint32_t)(RCC_BDCR_LSEDRV_1)
  180. #define LL_RCC_LSEDRIVE_HIGH (uint32_t)(RCC_BDCR_LSEDRV)
  181. /**
  182. * @}
  183. */
  184. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  185. * @{
  186. */
  187. #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI
  188. #define LL_RCC_SYS_CLKSOURCE_CSI RCC_CFGR_SW_CSI
  189. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE
  190. #define LL_RCC_SYS_CLKSOURCE_PLL1 RCC_CFGR_SW_PLL1
  191. /**
  192. * @}
  193. */
  194. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  195. * @{
  196. */
  197. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
  198. #define LL_RCC_SYS_CLKSOURCE_STATUS_CSI RCC_CFGR_SWS_CSI /*!< CSI used as system clock */
  199. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
  200. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL1 RCC_CFGR_SWS_PLL1 /*!< PLL1 used as system clock */
  201. /**
  202. * @}
  203. */
  204. /** @defgroup RCC_LL_EC_SYSWAKEUP_CLKSOURCE System wakeup clock source
  205. * @{
  206. */
  207. #define LL_RCC_SYSWAKEUP_CLKSOURCE_HSI (uint32_t)(0x00000000U)
  208. #define LL_RCC_SYSWAKEUP_CLKSOURCE_CSI (uint32_t)(RCC_CFGR_STOPWUCK)
  209. /**
  210. * @}
  211. */
  212. /** @defgroup RCC_LL_EC_KERWAKEUP_CLKSOURCE Kernel wakeup clock source
  213. * @{
  214. */
  215. #define LL_RCC_KERWAKEUP_CLKSOURCE_HSI (uint32_t)(0x00000000U)
  216. #define LL_RCC_KERWAKEUP_CLKSOURCE_CSI (uint32_t)(RCC_CFGR_STOPKERWUCK)
  217. /**
  218. * @}
  219. */
  220. /** @defgroup RCC_LL_EC_SYSCLK_DIV System prescaler
  221. * @{
  222. */
  223. #if defined(RCC_D1CFGR_D1CPRE_DIV1)
  224. #define LL_RCC_SYSCLK_DIV_1 RCC_D1CFGR_D1CPRE_DIV1
  225. #define LL_RCC_SYSCLK_DIV_2 RCC_D1CFGR_D1CPRE_DIV2
  226. #define LL_RCC_SYSCLK_DIV_4 RCC_D1CFGR_D1CPRE_DIV4
  227. #define LL_RCC_SYSCLK_DIV_8 RCC_D1CFGR_D1CPRE_DIV8
  228. #define LL_RCC_SYSCLK_DIV_16 RCC_D1CFGR_D1CPRE_DIV16
  229. #define LL_RCC_SYSCLK_DIV_64 RCC_D1CFGR_D1CPRE_DIV64
  230. #define LL_RCC_SYSCLK_DIV_128 RCC_D1CFGR_D1CPRE_DIV128
  231. #define LL_RCC_SYSCLK_DIV_256 RCC_D1CFGR_D1CPRE_DIV256
  232. #define LL_RCC_SYSCLK_DIV_512 RCC_D1CFGR_D1CPRE_DIV512
  233. #else
  234. #define LL_RCC_SYSCLK_DIV_1 RCC_CDCFGR1_CDCPRE_DIV1
  235. #define LL_RCC_SYSCLK_DIV_2 RCC_CDCFGR1_CDCPRE_DIV2
  236. #define LL_RCC_SYSCLK_DIV_4 RCC_CDCFGR1_CDCPRE_DIV4
  237. #define LL_RCC_SYSCLK_DIV_8 RCC_CDCFGR1_CDCPRE_DIV8
  238. #define LL_RCC_SYSCLK_DIV_16 RCC_CDCFGR1_CDCPRE_DIV16
  239. #define LL_RCC_SYSCLK_DIV_64 RCC_CDCFGR1_CDCPRE_DIV64
  240. #define LL_RCC_SYSCLK_DIV_128 RCC_CDCFGR1_CDCPRE_DIV128
  241. #define LL_RCC_SYSCLK_DIV_256 RCC_CDCFGR1_CDCPRE_DIV256
  242. #define LL_RCC_SYSCLK_DIV_512 RCC_CDCFGR1_CDCPRE_DIV512
  243. #endif /* RCC_D1CFGR_D1CPRE_DIV1 */
  244. /**
  245. * @}
  246. */
  247. /** @defgroup RCC_LL_EC_AHB_DIV AHB prescaler
  248. * @{
  249. */
  250. #if defined(RCC_D1CFGR_HPRE_DIV1)
  251. #define LL_RCC_AHB_DIV_1 RCC_D1CFGR_HPRE_DIV1
  252. #define LL_RCC_AHB_DIV_2 RCC_D1CFGR_HPRE_DIV2
  253. #define LL_RCC_AHB_DIV_4 RCC_D1CFGR_HPRE_DIV4
  254. #define LL_RCC_AHB_DIV_8 RCC_D1CFGR_HPRE_DIV8
  255. #define LL_RCC_AHB_DIV_16 RCC_D1CFGR_HPRE_DIV16
  256. #define LL_RCC_AHB_DIV_64 RCC_D1CFGR_HPRE_DIV64
  257. #define LL_RCC_AHB_DIV_128 RCC_D1CFGR_HPRE_DIV128
  258. #define LL_RCC_AHB_DIV_256 RCC_D1CFGR_HPRE_DIV256
  259. #define LL_RCC_AHB_DIV_512 RCC_D1CFGR_HPRE_DIV512
  260. #else
  261. #define LL_RCC_AHB_DIV_1 RCC_CDCFGR1_HPRE_DIV1
  262. #define LL_RCC_AHB_DIV_2 RCC_CDCFGR1_HPRE_DIV2
  263. #define LL_RCC_AHB_DIV_4 RCC_CDCFGR1_HPRE_DIV4
  264. #define LL_RCC_AHB_DIV_8 RCC_CDCFGR1_HPRE_DIV8
  265. #define LL_RCC_AHB_DIV_16 RCC_CDCFGR1_HPRE_DIV16
  266. #define LL_RCC_AHB_DIV_64 RCC_CDCFGR1_HPRE_DIV64
  267. #define LL_RCC_AHB_DIV_128 RCC_CDCFGR1_HPRE_DIV128
  268. #define LL_RCC_AHB_DIV_256 RCC_CDCFGR1_HPRE_DIV256
  269. #define LL_RCC_AHB_DIV_512 RCC_CDCFGR1_HPRE_DIV512
  270. #endif /* RCC_D1CFGR_HPRE_DIV1 */
  271. /**
  272. * @}
  273. */
  274. /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
  275. * @{
  276. */
  277. #if defined(RCC_D2CFGR_D2PPRE1_DIV1)
  278. #define LL_RCC_APB1_DIV_1 RCC_D2CFGR_D2PPRE1_DIV1
  279. #define LL_RCC_APB1_DIV_2 RCC_D2CFGR_D2PPRE1_DIV2
  280. #define LL_RCC_APB1_DIV_4 RCC_D2CFGR_D2PPRE1_DIV4
  281. #define LL_RCC_APB1_DIV_8 RCC_D2CFGR_D2PPRE1_DIV8
  282. #define LL_RCC_APB1_DIV_16 RCC_D2CFGR_D2PPRE1_DIV16
  283. #else
  284. #define LL_RCC_APB1_DIV_1 RCC_CDCFGR2_CDPPRE1_DIV1
  285. #define LL_RCC_APB1_DIV_2 RCC_CDCFGR2_CDPPRE1_DIV2
  286. #define LL_RCC_APB1_DIV_4 RCC_CDCFGR2_CDPPRE1_DIV4
  287. #define LL_RCC_APB1_DIV_8 RCC_CDCFGR2_CDPPRE1_DIV8
  288. #define LL_RCC_APB1_DIV_16 RCC_CDCFGR2_CDPPRE1_DIV16
  289. #endif /* RCC_D2CFGR_D2PPRE1_DIV1 */
  290. /**
  291. * @}
  292. */
  293. /** @defgroup RCC_LL_EC_APB2_DIV APB low-speed prescaler (APB2)
  294. * @{
  295. */
  296. #if defined(RCC_D2CFGR_D2PPRE2_DIV1)
  297. #define LL_RCC_APB2_DIV_1 RCC_D2CFGR_D2PPRE2_DIV1
  298. #define LL_RCC_APB2_DIV_2 RCC_D2CFGR_D2PPRE2_DIV2
  299. #define LL_RCC_APB2_DIV_4 RCC_D2CFGR_D2PPRE2_DIV4
  300. #define LL_RCC_APB2_DIV_8 RCC_D2CFGR_D2PPRE2_DIV8
  301. #define LL_RCC_APB2_DIV_16 RCC_D2CFGR_D2PPRE2_DIV16
  302. #else
  303. #define LL_RCC_APB2_DIV_1 RCC_CDCFGR2_CDPPRE2_DIV1
  304. #define LL_RCC_APB2_DIV_2 RCC_CDCFGR2_CDPPRE2_DIV2
  305. #define LL_RCC_APB2_DIV_4 RCC_CDCFGR2_CDPPRE2_DIV4
  306. #define LL_RCC_APB2_DIV_8 RCC_CDCFGR2_CDPPRE2_DIV8
  307. #define LL_RCC_APB2_DIV_16 RCC_CDCFGR2_CDPPRE2_DIV16
  308. #endif /* RCC_D2CFGR_D2PPRE2_DIV1 */
  309. /**
  310. * @}
  311. */
  312. /** @defgroup RCC_LL_EC_APB3_DIV APB low-speed prescaler (APB3)
  313. * @{
  314. */
  315. #if defined(RCC_D1CFGR_D1PPRE_DIV1)
  316. #define LL_RCC_APB3_DIV_1 RCC_D1CFGR_D1PPRE_DIV1
  317. #define LL_RCC_APB3_DIV_2 RCC_D1CFGR_D1PPRE_DIV2
  318. #define LL_RCC_APB3_DIV_4 RCC_D1CFGR_D1PPRE_DIV4
  319. #define LL_RCC_APB3_DIV_8 RCC_D1CFGR_D1PPRE_DIV8
  320. #define LL_RCC_APB3_DIV_16 RCC_D1CFGR_D1PPRE_DIV16
  321. #else
  322. #define LL_RCC_APB3_DIV_1 RCC_CDCFGR1_CDPPRE_DIV1
  323. #define LL_RCC_APB3_DIV_2 RCC_CDCFGR1_CDPPRE_DIV2
  324. #define LL_RCC_APB3_DIV_4 RCC_CDCFGR1_CDPPRE_DIV4
  325. #define LL_RCC_APB3_DIV_8 RCC_CDCFGR1_CDPPRE_DIV8
  326. #define LL_RCC_APB3_DIV_16 RCC_CDCFGR1_CDPPRE_DIV16
  327. #endif /* RCC_D1CFGR_D1PPRE_DIV1 */
  328. /**
  329. * @}
  330. */
  331. /** @defgroup RCC_LL_EC_APB4_DIV APB low-speed prescaler (APB4)
  332. * @{
  333. */
  334. #if defined(RCC_D3CFGR_D3PPRE_DIV1)
  335. #define LL_RCC_APB4_DIV_1 RCC_D3CFGR_D3PPRE_DIV1
  336. #define LL_RCC_APB4_DIV_2 RCC_D3CFGR_D3PPRE_DIV2
  337. #define LL_RCC_APB4_DIV_4 RCC_D3CFGR_D3PPRE_DIV4
  338. #define LL_RCC_APB4_DIV_8 RCC_D3CFGR_D3PPRE_DIV8
  339. #define LL_RCC_APB4_DIV_16 RCC_D3CFGR_D3PPRE_DIV16
  340. #else
  341. #define LL_RCC_APB4_DIV_1 RCC_SRDCFGR_SRDPPRE_DIV1
  342. #define LL_RCC_APB4_DIV_2 RCC_SRDCFGR_SRDPPRE_DIV2
  343. #define LL_RCC_APB4_DIV_4 RCC_SRDCFGR_SRDPPRE_DIV4
  344. #define LL_RCC_APB4_DIV_8 RCC_SRDCFGR_SRDPPRE_DIV8
  345. #define LL_RCC_APB4_DIV_16 RCC_SRDCFGR_SRDPPRE_DIV16
  346. #endif /* RCC_D3CFGR_D3PPRE_DIV1 */
  347. /**
  348. * @}
  349. */
  350. /** @defgroup RCC_LL_EC_MCOxSOURCE MCO source selection
  351. * @{
  352. */
  353. #define LL_RCC_MCO1SOURCE_HSI (uint32_t)((RCC_CFGR_MCO1>>16U) | 0x00000000U)
  354. #define LL_RCC_MCO1SOURCE_LSE (uint32_t)((RCC_CFGR_MCO1>>16U) | RCC_CFGR_MCO1_0)
  355. #define LL_RCC_MCO1SOURCE_HSE (uint32_t)((RCC_CFGR_MCO1>>16U) | RCC_CFGR_MCO1_1)
  356. #define LL_RCC_MCO1SOURCE_PLL1QCLK (uint32_t)((RCC_CFGR_MCO1>>16U) | RCC_CFGR_MCO1_1|RCC_CFGR_MCO1_0)
  357. #define LL_RCC_MCO1SOURCE_HSI48 (uint32_t)((RCC_CFGR_MCO1>>16U) | RCC_CFGR_MCO1_2)
  358. #define LL_RCC_MCO2SOURCE_SYSCLK (uint32_t)((RCC_CFGR_MCO2>>16U) | 0x00000000U)
  359. #define LL_RCC_MCO2SOURCE_PLL2PCLK (uint32_t)((RCC_CFGR_MCO2>>16U) | RCC_CFGR_MCO2_0)
  360. #define LL_RCC_MCO2SOURCE_HSE (uint32_t)((RCC_CFGR_MCO2>>16U) | RCC_CFGR_MCO2_1)
  361. #define LL_RCC_MCO2SOURCE_PLL1PCLK (uint32_t)((RCC_CFGR_MCO2>>16U) | RCC_CFGR_MCO2_1|RCC_CFGR_MCO2_0)
  362. #define LL_RCC_MCO2SOURCE_CSI (uint32_t)((RCC_CFGR_MCO2>>16U) | RCC_CFGR_MCO2_2)
  363. #define LL_RCC_MCO2SOURCE_LSI (uint32_t)((RCC_CFGR_MCO2>>16U) | RCC_CFGR_MCO2_2|RCC_CFGR_MCO2_0)
  364. /**
  365. * @}
  366. */
  367. /** @defgroup RCC_LL_EC_MCOx_DIV MCO prescaler
  368. * @{
  369. */
  370. #define LL_RCC_MCO1_DIV_1 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0)
  371. #define LL_RCC_MCO1_DIV_2 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1)
  372. #define LL_RCC_MCO1_DIV_3 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_1)
  373. #define LL_RCC_MCO1_DIV_4 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2)
  374. #define LL_RCC_MCO1_DIV_5 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_2)
  375. #define LL_RCC_MCO1_DIV_6 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2)
  376. #define LL_RCC_MCO1_DIV_7 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2)
  377. #define LL_RCC_MCO1_DIV_8 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_3)
  378. #define LL_RCC_MCO1_DIV_9 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_3)
  379. #define LL_RCC_MCO1_DIV_10 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_3)
  380. #define LL_RCC_MCO1_DIV_11 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_3)
  381. #define LL_RCC_MCO1_DIV_12 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2 | RCC_CFGR_MCO1PRE_3)
  382. #define LL_RCC_MCO1_DIV_13 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_2 | RCC_CFGR_MCO1PRE_3)
  383. #define LL_RCC_MCO1_DIV_14 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2 | RCC_CFGR_MCO1PRE_3)
  384. #define LL_RCC_MCO1_DIV_15 (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE)
  385. #define LL_RCC_MCO2_DIV_1 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0)
  386. #define LL_RCC_MCO2_DIV_2 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1)
  387. #define LL_RCC_MCO2_DIV_3 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_1)
  388. #define LL_RCC_MCO2_DIV_4 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2)
  389. #define LL_RCC_MCO2_DIV_5 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_2)
  390. #define LL_RCC_MCO2_DIV_6 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1 | RCC_CFGR_MCO2PRE_2)
  391. #define LL_RCC_MCO2_DIV_7 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_1 | RCC_CFGR_MCO2PRE_2)
  392. #define LL_RCC_MCO2_DIV_8 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_3)
  393. #define LL_RCC_MCO2_DIV_9 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_3)
  394. #define LL_RCC_MCO2_DIV_10 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1 | RCC_CFGR_MCO2PRE_3)
  395. #define LL_RCC_MCO2_DIV_11 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_1 | RCC_CFGR_MCO2PRE_3)
  396. #define LL_RCC_MCO2_DIV_12 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2 | RCC_CFGR_MCO2PRE_3)
  397. #define LL_RCC_MCO2_DIV_13 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0 | RCC_CFGR_MCO2PRE_2 | RCC_CFGR_MCO2PRE_3)
  398. #define LL_RCC_MCO2_DIV_14 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1 | RCC_CFGR_MCO2PRE_2 | RCC_CFGR_MCO2PRE_3)
  399. #define LL_RCC_MCO2_DIV_15 (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE)
  400. /**
  401. * @}
  402. */
  403. /** @defgroup RCC_LL_EC_RTC_HSEDIV HSE prescaler for RTC clock
  404. * @{
  405. */
  406. #define LL_RCC_RTC_NOCLOCK (uint32_t)(0x00000000U)
  407. #define LL_RCC_RTC_HSE_DIV_2 (uint32_t)(RCC_CFGR_RTCPRE_1)
  408. #define LL_RCC_RTC_HSE_DIV_3 (uint32_t)(RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  409. #define LL_RCC_RTC_HSE_DIV_4 (uint32_t)(RCC_CFGR_RTCPRE_2)
  410. #define LL_RCC_RTC_HSE_DIV_5 (uint32_t)(RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  411. #define LL_RCC_RTC_HSE_DIV_6 (uint32_t)(RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  412. #define LL_RCC_RTC_HSE_DIV_7 (uint32_t)(RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  413. #define LL_RCC_RTC_HSE_DIV_8 (uint32_t)(RCC_CFGR_RTCPRE_3)
  414. #define LL_RCC_RTC_HSE_DIV_9 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0)
  415. #define LL_RCC_RTC_HSE_DIV_10 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1)
  416. #define LL_RCC_RTC_HSE_DIV_11 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  417. #define LL_RCC_RTC_HSE_DIV_12 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2)
  418. #define LL_RCC_RTC_HSE_DIV_13 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  419. #define LL_RCC_RTC_HSE_DIV_14 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  420. #define LL_RCC_RTC_HSE_DIV_15 (uint32_t)(RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  421. #define LL_RCC_RTC_HSE_DIV_16 (uint32_t)(RCC_CFGR_RTCPRE_4)
  422. #define LL_RCC_RTC_HSE_DIV_17 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_0)
  423. #define LL_RCC_RTC_HSE_DIV_18 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1)
  424. #define LL_RCC_RTC_HSE_DIV_19 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  425. #define LL_RCC_RTC_HSE_DIV_20 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2)
  426. #define LL_RCC_RTC_HSE_DIV_21 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  427. #define LL_RCC_RTC_HSE_DIV_22 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  428. #define LL_RCC_RTC_HSE_DIV_23 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  429. #define LL_RCC_RTC_HSE_DIV_24 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3)
  430. #define LL_RCC_RTC_HSE_DIV_25 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0)
  431. #define LL_RCC_RTC_HSE_DIV_26 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1)
  432. #define LL_RCC_RTC_HSE_DIV_27 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  433. #define LL_RCC_RTC_HSE_DIV_28 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2)
  434. #define LL_RCC_RTC_HSE_DIV_29 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  435. #define LL_RCC_RTC_HSE_DIV_30 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  436. #define LL_RCC_RTC_HSE_DIV_31 (uint32_t)(RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  437. #define LL_RCC_RTC_HSE_DIV_32 (uint32_t)(RCC_CFGR_RTCPRE_5)
  438. #define LL_RCC_RTC_HSE_DIV_33 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_0)
  439. #define LL_RCC_RTC_HSE_DIV_34 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_1)
  440. #define LL_RCC_RTC_HSE_DIV_35 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  441. #define LL_RCC_RTC_HSE_DIV_36 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_2)
  442. #define LL_RCC_RTC_HSE_DIV_37 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  443. #define LL_RCC_RTC_HSE_DIV_38 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  444. #define LL_RCC_RTC_HSE_DIV_39 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  445. #define LL_RCC_RTC_HSE_DIV_40 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3)
  446. #define LL_RCC_RTC_HSE_DIV_41 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0)
  447. #define LL_RCC_RTC_HSE_DIV_42 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1)
  448. #define LL_RCC_RTC_HSE_DIV_43 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  449. #define LL_RCC_RTC_HSE_DIV_44 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2)
  450. #define LL_RCC_RTC_HSE_DIV_45 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  451. #define LL_RCC_RTC_HSE_DIV_46 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  452. #define LL_RCC_RTC_HSE_DIV_47 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  453. #define LL_RCC_RTC_HSE_DIV_48 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4)
  454. #define LL_RCC_RTC_HSE_DIV_49 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_0)
  455. #define LL_RCC_RTC_HSE_DIV_50 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1)
  456. #define LL_RCC_RTC_HSE_DIV_51 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  457. #define LL_RCC_RTC_HSE_DIV_52 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2)
  458. #define LL_RCC_RTC_HSE_DIV_53 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  459. #define LL_RCC_RTC_HSE_DIV_54 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  460. #define LL_RCC_RTC_HSE_DIV_55 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  461. #define LL_RCC_RTC_HSE_DIV_56 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3)
  462. #define LL_RCC_RTC_HSE_DIV_57 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0)
  463. #define LL_RCC_RTC_HSE_DIV_58 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1)
  464. #define LL_RCC_RTC_HSE_DIV_59 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  465. #define LL_RCC_RTC_HSE_DIV_60 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2)
  466. #define LL_RCC_RTC_HSE_DIV_61 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0)
  467. #define LL_RCC_RTC_HSE_DIV_62 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1)
  468. #define LL_RCC_RTC_HSE_DIV_63 (uint32_t)(RCC_CFGR_RTCPRE_5|RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0)
  469. /**
  470. * @}
  471. */
  472. /** @defgroup RCC_LL_EC_USARTx_CLKSOURCE Peripheral USART clock source selection
  473. * @{
  474. */
  475. #if defined(RCC_D2CCIP2R_USART16SEL)
  476. #define LL_RCC_USART16_CLKSOURCE_PCLK2 LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, 0x00000000U)
  477. #define LL_RCC_USART16_CLKSOURCE_PLL2Q LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, RCC_D2CCIP2R_USART16SEL_0)
  478. #define LL_RCC_USART16_CLKSOURCE_PLL3Q LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, RCC_D2CCIP2R_USART16SEL_1)
  479. #define LL_RCC_USART16_CLKSOURCE_HSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_1)
  480. #define LL_RCC_USART16_CLKSOURCE_CSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, RCC_D2CCIP2R_USART16SEL_2)
  481. #define LL_RCC_USART16_CLKSOURCE_LSE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_2)
  482. #else
  483. #define LL_RCC_USART16910_CLKSOURCE_PCLK2 LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, 0x00000000U)
  484. #define LL_RCC_USART16910_CLKSOURCE_PLL2Q LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, RCC_CDCCIP2R_USART16910SEL_0)
  485. #define LL_RCC_USART16910_CLKSOURCE_PLL3Q LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, RCC_CDCCIP2R_USART16910SEL_1)
  486. #define LL_RCC_USART16910_CLKSOURCE_HSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_1)
  487. #define LL_RCC_USART16910_CLKSOURCE_CSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, RCC_CDCCIP2R_USART16910SEL_2)
  488. #define LL_RCC_USART16910_CLKSOURCE_LSE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_2)
  489. /* Aliases */
  490. #define LL_RCC_USART16_CLKSOURCE_PCLK2 LL_RCC_USART16910_CLKSOURCE_PCLK2
  491. #define LL_RCC_USART16_CLKSOURCE_PLL2Q LL_RCC_USART16910_CLKSOURCE_PLL2Q
  492. #define LL_RCC_USART16_CLKSOURCE_PLL3Q LL_RCC_USART16910_CLKSOURCE_PLL3Q
  493. #define LL_RCC_USART16_CLKSOURCE_HSI LL_RCC_USART16910_CLKSOURCE_HSI
  494. #define LL_RCC_USART16_CLKSOURCE_CSI LL_RCC_USART16910_CLKSOURCE_CSI
  495. #define LL_RCC_USART16_CLKSOURCE_LSE LL_RCC_USART16910_CLKSOURCE_LSE
  496. #endif /* RCC_D2CCIP2R_USART16SEL */
  497. #if defined(RCC_D2CCIP2R_USART28SEL)
  498. #define LL_RCC_USART234578_CLKSOURCE_PCLK1 LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, 0x00000000U)
  499. #define LL_RCC_USART234578_CLKSOURCE_PLL2Q LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, RCC_D2CCIP2R_USART28SEL_0)
  500. #define LL_RCC_USART234578_CLKSOURCE_PLL3Q LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, RCC_D2CCIP2R_USART28SEL_1)
  501. #define LL_RCC_USART234578_CLKSOURCE_HSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_1)
  502. #define LL_RCC_USART234578_CLKSOURCE_CSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, RCC_D2CCIP2R_USART28SEL_2)
  503. #define LL_RCC_USART234578_CLKSOURCE_LSE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_2)
  504. #else
  505. #define LL_RCC_USART234578_CLKSOURCE_PCLK1 LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, 0x00000000U)
  506. #define LL_RCC_USART234578_CLKSOURCE_PLL2Q LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, RCC_CDCCIP2R_USART234578SEL_0)
  507. #define LL_RCC_USART234578_CLKSOURCE_PLL3Q LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, RCC_CDCCIP2R_USART234578SEL_1)
  508. #define LL_RCC_USART234578_CLKSOURCE_HSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_1)
  509. #define LL_RCC_USART234578_CLKSOURCE_CSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, RCC_CDCCIP2R_USART234578SEL_2)
  510. #define LL_RCC_USART234578_CLKSOURCE_LSE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_2)
  511. #endif /* RCC_D2CCIP2R_USART28SEL */
  512. /**
  513. * @}
  514. */
  515. /** @defgroup RCC_LL_EC_LPUARTx_CLKSOURCE Peripheral LPUART clock source selection
  516. * @{
  517. */
  518. #if defined(RCC_D3CCIPR_LPUART1SEL)
  519. #define LL_RCC_LPUART1_CLKSOURCE_PCLK4 (0x00000000U)
  520. #define LL_RCC_LPUART1_CLKSOURCE_PLL2Q (RCC_D3CCIPR_LPUART1SEL_0)
  521. #define LL_RCC_LPUART1_CLKSOURCE_PLL3Q (RCC_D3CCIPR_LPUART1SEL_1)
  522. #define LL_RCC_LPUART1_CLKSOURCE_HSI (RCC_D3CCIPR_LPUART1SEL_0 | RCC_D3CCIPR_LPUART1SEL_1)
  523. #define LL_RCC_LPUART1_CLKSOURCE_CSI (RCC_D3CCIPR_LPUART1SEL_2)
  524. #define LL_RCC_LPUART1_CLKSOURCE_LSE (RCC_D3CCIPR_LPUART1SEL_0 | RCC_D3CCIPR_LPUART1SEL_2)
  525. #else
  526. #define LL_RCC_LPUART1_CLKSOURCE_PCLK4 (0x00000000U)
  527. #define LL_RCC_LPUART1_CLKSOURCE_PLL2Q (RCC_SRDCCIPR_LPUART1SEL_0)
  528. #define LL_RCC_LPUART1_CLKSOURCE_PLL3Q (RCC_SRDCCIPR_LPUART1SEL_1)
  529. #define LL_RCC_LPUART1_CLKSOURCE_HSI (RCC_SRDCCIPR_LPUART1SEL_0 | RCC_SRDCCIPR_LPUART1SEL_1)
  530. #define LL_RCC_LPUART1_CLKSOURCE_CSI (RCC_SRDCCIPR_LPUART1SEL_2)
  531. #define LL_RCC_LPUART1_CLKSOURCE_LSE (RCC_SRDCCIPR_LPUART1SEL_0 | RCC_SRDCCIPR_LPUART1SEL_2)
  532. #endif /* RCC_D3CCIPR_LPUART1SEL */
  533. /**
  534. * @}
  535. */
  536. /** @defgroup RCC_LL_EC_I2Cx_CLKSOURCE Peripheral I2C clock source selection
  537. * @{
  538. */
  539. #if defined (RCC_D2CCIP2R_I2C123SEL)
  540. #define LL_RCC_I2C123_CLKSOURCE_PCLK1 LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_I2C123SEL, RCC_D2CCIP2R_I2C123SEL_Pos, 0x00000000U)
  541. #define LL_RCC_I2C123_CLKSOURCE_PLL3R LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_I2C123SEL, RCC_D2CCIP2R_I2C123SEL_Pos, RCC_D2CCIP2R_I2C123SEL_0)
  542. #define LL_RCC_I2C123_CLKSOURCE_HSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_I2C123SEL, RCC_D2CCIP2R_I2C123SEL_Pos, RCC_D2CCIP2R_I2C123SEL_1)
  543. #define LL_RCC_I2C123_CLKSOURCE_CSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_I2C123SEL, RCC_D2CCIP2R_I2C123SEL_Pos, RCC_D2CCIP2R_I2C123SEL_0 | RCC_D2CCIP2R_I2C123SEL_1)
  544. #else
  545. #define LL_RCC_I2C123_CLKSOURCE_PCLK1 LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_I2C123SEL, RCC_CDCCIP2R_I2C123SEL_Pos, 0x00000000U)
  546. #define LL_RCC_I2C123_CLKSOURCE_PLL3R LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_I2C123SEL, RCC_CDCCIP2R_I2C123SEL_Pos, RCC_CDCCIP2R_I2C123SEL_0)
  547. #define LL_RCC_I2C123_CLKSOURCE_HSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_I2C123SEL, RCC_CDCCIP2R_I2C123SEL_Pos, RCC_CDCCIP2R_I2C123SEL_1)
  548. #define LL_RCC_I2C123_CLKSOURCE_CSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_I2C123SEL, RCC_CDCCIP2R_I2C123SEL_Pos, RCC_CDCCIP2R_I2C123SEL_0 | RCC_CDCCIP2R_I2C123SEL_1)
  549. #endif /* RCC_D2CCIP2R_I2C123SEL */
  550. #if defined (RCC_D3CCIPR_I2C4SEL)
  551. #define LL_RCC_I2C4_CLKSOURCE_PCLK4 LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_I2C4SEL, RCC_D3CCIPR_I2C4SEL_Pos, 0x00000000U)
  552. #define LL_RCC_I2C4_CLKSOURCE_PLL3R LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_I2C4SEL, RCC_D3CCIPR_I2C4SEL_Pos, RCC_D3CCIPR_I2C4SEL_0)
  553. #define LL_RCC_I2C4_CLKSOURCE_HSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_I2C4SEL, RCC_D3CCIPR_I2C4SEL_Pos, RCC_D3CCIPR_I2C4SEL_1)
  554. #define LL_RCC_I2C4_CLKSOURCE_CSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_I2C4SEL, RCC_D3CCIPR_I2C4SEL_Pos, RCC_D3CCIPR_I2C4SEL_0 | RCC_D3CCIPR_I2C4SEL_1)
  555. #else
  556. #define LL_RCC_I2C4_CLKSOURCE_PCLK4 LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_I2C4SEL, RCC_SRDCCIPR_I2C4SEL_Pos, 0x00000000U)
  557. #define LL_RCC_I2C4_CLKSOURCE_PLL3R LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_I2C4SEL, RCC_SRDCCIPR_I2C4SEL_Pos, RCC_SRDCCIPR_I2C4SEL_0)
  558. #define LL_RCC_I2C4_CLKSOURCE_HSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_I2C4SEL, RCC_SRDCCIPR_I2C4SEL_Pos, RCC_SRDCCIPR_I2C4SEL_1)
  559. #define LL_RCC_I2C4_CLKSOURCE_CSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_I2C4SEL, RCC_SRDCCIPR_I2C4SEL_Pos, RCC_SRDCCIPR_I2C4SEL_0 | RCC_SRDCCIPR_I2C4SEL_1)
  560. #endif /* RCC_D3CCIPR_I2C4SEL */
  561. /**
  562. * @}
  563. */
  564. /** @defgroup RCC_LL_EC_LPTIMx_CLKSOURCE Peripheral LPTIM clock source selection
  565. * @{
  566. */
  567. #if defined(RCC_D2CCIP2R_LPTIM1SEL)
  568. #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, 0x00000000U)
  569. #define LL_RCC_LPTIM1_CLKSOURCE_PLL2P LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, RCC_D2CCIP2R_LPTIM1SEL_0)
  570. #define LL_RCC_LPTIM1_CLKSOURCE_PLL3R LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, RCC_D2CCIP2R_LPTIM1SEL_1)
  571. #define LL_RCC_LPTIM1_CLKSOURCE_LSE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_1)
  572. #define LL_RCC_LPTIM1_CLKSOURCE_LSI LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, RCC_D2CCIP2R_LPTIM1SEL_2)
  573. #define LL_RCC_LPTIM1_CLKSOURCE_CLKP LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_2)
  574. #else
  575. #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, 0x00000000U)
  576. #define LL_RCC_LPTIM1_CLKSOURCE_PLL2P LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, RCC_CDCCIP2R_LPTIM1SEL_0)
  577. #define LL_RCC_LPTIM1_CLKSOURCE_PLL3R LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, RCC_CDCCIP2R_LPTIM1SEL_1)
  578. #define LL_RCC_LPTIM1_CLKSOURCE_LSE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_1)
  579. #define LL_RCC_LPTIM1_CLKSOURCE_LSI LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, RCC_CDCCIP2R_LPTIM1SEL_2)
  580. #define LL_RCC_LPTIM1_CLKSOURCE_CLKP LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_2)
  581. #endif /* RCC_D2CCIP2R_LPTIM1SEL */
  582. #if defined(RCC_D3CCIPR_LPTIM2SEL)
  583. #define LL_RCC_LPTIM2_CLKSOURCE_PCLK4 LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, 0x00000000U)
  584. #define LL_RCC_LPTIM2_CLKSOURCE_PLL2P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, RCC_D3CCIPR_LPTIM2SEL_0)
  585. #define LL_RCC_LPTIM2_CLKSOURCE_PLL3R LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, RCC_D3CCIPR_LPTIM2SEL_1)
  586. #define LL_RCC_LPTIM2_CLKSOURCE_LSE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_1)
  587. #define LL_RCC_LPTIM2_CLKSOURCE_LSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, RCC_D3CCIPR_LPTIM2SEL_2)
  588. #define LL_RCC_LPTIM2_CLKSOURCE_CLKP LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_2)
  589. #else
  590. #define LL_RCC_LPTIM2_CLKSOURCE_PCLK4 LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, 0x00000000U)
  591. #define LL_RCC_LPTIM2_CLKSOURCE_PLL2P LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, RCC_SRDCCIPR_LPTIM2SEL_0)
  592. #define LL_RCC_LPTIM2_CLKSOURCE_PLL3R LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, RCC_SRDCCIPR_LPTIM2SEL_1)
  593. #define LL_RCC_LPTIM2_CLKSOURCE_LSE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_1)
  594. #define LL_RCC_LPTIM2_CLKSOURCE_LSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, RCC_SRDCCIPR_LPTIM2SEL_2)
  595. #define LL_RCC_LPTIM2_CLKSOURCE_CLKP LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_2)
  596. #endif /* RCC_D3CCIPR_LPTIM2SEL */
  597. #if defined(RCC_D3CCIPR_LPTIM345SEL)
  598. #define LL_RCC_LPTIM345_CLKSOURCE_PCLK4 LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, 0x00000000U)
  599. #define LL_RCC_LPTIM345_CLKSOURCE_PLL2P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, RCC_D3CCIPR_LPTIM345SEL_0)
  600. #define LL_RCC_LPTIM345_CLKSOURCE_PLL3R LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, RCC_D3CCIPR_LPTIM345SEL_1)
  601. #define LL_RCC_LPTIM345_CLKSOURCE_LSE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_1)
  602. #define LL_RCC_LPTIM345_CLKSOURCE_LSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, RCC_D3CCIPR_LPTIM345SEL_2)
  603. #define LL_RCC_LPTIM345_CLKSOURCE_CLKP LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_2)
  604. #else
  605. #define LL_RCC_LPTIM345_CLKSOURCE_PCLK4 LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, 0x00000000U)
  606. #define LL_RCC_LPTIM345_CLKSOURCE_PLL2P LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, RCC_SRDCCIPR_LPTIM3SEL_0)
  607. #define LL_RCC_LPTIM345_CLKSOURCE_PLL3R LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, RCC_SRDCCIPR_LPTIM3SEL_1)
  608. #define LL_RCC_LPTIM345_CLKSOURCE_LSE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_1)
  609. #define LL_RCC_LPTIM345_CLKSOURCE_LSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, RCC_SRDCCIPR_LPTIM3SEL_2)
  610. #define LL_RCC_LPTIM345_CLKSOURCE_CLKP LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_2)
  611. /* aliases*/
  612. #define LL_RCC_LPTIM3_CLKSOURCE_PCLK4 LL_RCC_LPTIM345_CLKSOURCE_PCLK4
  613. #define LL_RCC_LPTIM3_CLKSOURCE_PLL2P LL_RCC_LPTIM345_CLKSOURCE_PLL2P
  614. #define LL_RCC_LPTIM3_CLKSOURCE_PLL3R LL_RCC_LPTIM345_CLKSOURCE_PLL3R
  615. #define LL_RCC_LPTIM3_CLKSOURCE_LSE LL_RCC_LPTIM345_CLKSOURCE_LSE
  616. #define LL_RCC_LPTIM3_CLKSOURCE_LSI LL_RCC_LPTIM345_CLKSOURCE_LSI
  617. #define LL_RCC_LPTIM3_CLKSOURCE_CLKP LL_RCC_LPTIM345_CLKSOURCE_CLKP
  618. #endif /* RCC_D3CCIPR_LPTIM345SEL */
  619. /**
  620. * @}
  621. */
  622. /** @defgroup RCC_LL_EC_SAIx_CLKSOURCE Peripheral SAI clock source selection
  623. * @{
  624. */
  625. #if defined(RCC_D2CCIP1R_SAI1SEL)
  626. #define LL_RCC_SAI1_CLKSOURCE_PLL1Q LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, 0x00000000U)
  627. #define LL_RCC_SAI1_CLKSOURCE_PLL2P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, RCC_D2CCIP1R_SAI1SEL_0)
  628. #define LL_RCC_SAI1_CLKSOURCE_PLL3P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, RCC_D2CCIP1R_SAI1SEL_1)
  629. #define LL_RCC_SAI1_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, RCC_D2CCIP1R_SAI1SEL_0 | RCC_D2CCIP1R_SAI1SEL_1)
  630. #define LL_RCC_SAI1_CLKSOURCE_CLKP LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, RCC_D2CCIP1R_SAI1SEL_2)
  631. #else
  632. #define LL_RCC_SAI1_CLKSOURCE_PLL1Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, 0x00000000U)
  633. #define LL_RCC_SAI1_CLKSOURCE_PLL2P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, RCC_CDCCIP1R_SAI1SEL_0)
  634. #define LL_RCC_SAI1_CLKSOURCE_PLL3P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, RCC_CDCCIP1R_SAI1SEL_1)
  635. #define LL_RCC_SAI1_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, RCC_CDCCIP1R_SAI1SEL_0 | RCC_CDCCIP1R_SAI1SEL_1)
  636. #define LL_RCC_SAI1_CLKSOURCE_CLKP LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, RCC_CDCCIP1R_SAI1SEL_2)
  637. #endif
  638. #if defined(SAI3)
  639. #define LL_RCC_SAI23_CLKSOURCE_PLL1Q LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, 0x00000000U)
  640. #define LL_RCC_SAI23_CLKSOURCE_PLL2P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, RCC_D2CCIP1R_SAI23SEL_0)
  641. #define LL_RCC_SAI23_CLKSOURCE_PLL3P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, RCC_D2CCIP1R_SAI23SEL_1)
  642. #define LL_RCC_SAI23_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, RCC_D2CCIP1R_SAI23SEL_0 | RCC_D2CCIP1R_SAI23SEL_1)
  643. #define LL_RCC_SAI23_CLKSOURCE_CLKP LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, RCC_D2CCIP1R_SAI23SEL_2)
  644. #endif /* SAI3 */
  645. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  646. #define LL_RCC_SAI2A_CLKSOURCE_PLL1Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, 0x00000000U)
  647. #define LL_RCC_SAI2A_CLKSOURCE_PLL2P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, RCC_CDCCIP1R_SAI2ASEL_0)
  648. #define LL_RCC_SAI2A_CLKSOURCE_PLL3P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, RCC_CDCCIP1R_SAI2ASEL_1)
  649. #define LL_RCC_SAI2A_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_1)
  650. #define LL_RCC_SAI2A_CLKSOURCE_CLKP LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, RCC_CDCCIP1R_SAI2ASEL_2)
  651. #define LL_RCC_SAI2A_CLKSOURCE_SPDIF LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_2)
  652. #endif /* RCC_CDCCIP1R_SAI2ASEL */
  653. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  654. #define LL_RCC_SAI2B_CLKSOURCE_PLL1Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, 0x00000000U)
  655. #define LL_RCC_SAI2B_CLKSOURCE_PLL2P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, RCC_CDCCIP1R_SAI2BSEL_0)
  656. #define LL_RCC_SAI2B_CLKSOURCE_PLL3P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, RCC_CDCCIP1R_SAI2BSEL_1)
  657. #define LL_RCC_SAI2B_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_1)
  658. #define LL_RCC_SAI2B_CLKSOURCE_CLKP LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, RCC_CDCCIP1R_SAI2BSEL_2)
  659. #define LL_RCC_SAI2B_CLKSOURCE_SPDIF LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_2)
  660. #endif /* RCC_CDCCIP1R_SAI2BSEL */
  661. #if defined(SAI4_Block_A)
  662. #define LL_RCC_SAI4A_CLKSOURCE_PLL1Q LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, 0x00000000U)
  663. #define LL_RCC_SAI4A_CLKSOURCE_PLL2P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, RCC_D3CCIPR_SAI4ASEL_0)
  664. #define LL_RCC_SAI4A_CLKSOURCE_PLL3P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, RCC_D3CCIPR_SAI4ASEL_1)
  665. #define LL_RCC_SAI4A_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, RCC_D3CCIPR_SAI4ASEL_0 | RCC_D3CCIPR_SAI4ASEL_1)
  666. #define LL_RCC_SAI4A_CLKSOURCE_CLKP LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, RCC_D3CCIPR_SAI4ASEL_2)
  667. #endif /* SAI4_Block_A */
  668. #if defined(SAI4_Block_B)
  669. #define LL_RCC_SAI4B_CLKSOURCE_PLL1Q LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, 0x00000000U)
  670. #define LL_RCC_SAI4B_CLKSOURCE_PLL2P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, RCC_D3CCIPR_SAI4BSEL_0)
  671. #define LL_RCC_SAI4B_CLKSOURCE_PLL3P LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, RCC_D3CCIPR_SAI4BSEL_1)
  672. #define LL_RCC_SAI4B_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, RCC_D3CCIPR_SAI4BSEL_0 | RCC_D3CCIPR_SAI4BSEL_1)
  673. #define LL_RCC_SAI4B_CLKSOURCE_CLKP LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, RCC_D3CCIPR_SAI4BSEL_2)
  674. #endif /* SAI4_Block_B */
  675. /**
  676. * @}
  677. */
  678. /** @defgroup RCC_LL_EC_SDMMC_CLKSOURCE Peripheral SDMMC clock source selection
  679. * @{
  680. */
  681. #if defined(RCC_D1CCIPR_SDMMCSEL)
  682. #define LL_RCC_SDMMC_CLKSOURCE_PLL1Q (0x00000000U)
  683. #define LL_RCC_SDMMC_CLKSOURCE_PLL2R (RCC_D1CCIPR_SDMMCSEL)
  684. #else
  685. #define LL_RCC_SDMMC_CLKSOURCE_PLL1Q (0x00000000U)
  686. #define LL_RCC_SDMMC_CLKSOURCE_PLL2R (RCC_CDCCIPR_SDMMCSEL)
  687. #endif /* RCC_D1CCIPR_SDMMCSEL */
  688. /**
  689. * @}
  690. */
  691. /** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection
  692. * @{
  693. */
  694. #if defined(RCC_D2CCIP2R_RNGSEL)
  695. #define LL_RCC_RNG_CLKSOURCE_HSI48 (0x00000000U)
  696. #define LL_RCC_RNG_CLKSOURCE_PLL1Q (RCC_D2CCIP2R_RNGSEL_0)
  697. #define LL_RCC_RNG_CLKSOURCE_LSE (RCC_D2CCIP2R_RNGSEL_1)
  698. #define LL_RCC_RNG_CLKSOURCE_LSI (RCC_D2CCIP2R_RNGSEL_1 | RCC_D2CCIP2R_RNGSEL_0)
  699. #else
  700. #define LL_RCC_RNG_CLKSOURCE_HSI48 (0x00000000U)
  701. #define LL_RCC_RNG_CLKSOURCE_PLL1Q (RCC_CDCCIP2R_RNGSEL_0)
  702. #define LL_RCC_RNG_CLKSOURCE_LSE (RCC_CDCCIP2R_RNGSEL_1)
  703. #define LL_RCC_RNG_CLKSOURCE_LSI (RCC_CDCCIP2R_RNGSEL_1 | RCC_CDCCIP2R_RNGSEL_0)
  704. #endif /* RCC_D2CCIP2R_RNGSEL */
  705. /**
  706. * @}
  707. */
  708. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  709. * @{
  710. */
  711. #if defined(RCC_D2CCIP2R_USBSEL)
  712. #define LL_RCC_USB_CLKSOURCE_DISABLE (0x00000000U)
  713. #define LL_RCC_USB_CLKSOURCE_PLL1Q (RCC_D2CCIP2R_USBSEL_0)
  714. #define LL_RCC_USB_CLKSOURCE_PLL3Q (RCC_D2CCIP2R_USBSEL_1)
  715. #define LL_RCC_USB_CLKSOURCE_HSI48 (RCC_D2CCIP2R_USBSEL_1 | RCC_D2CCIP2R_USBSEL_0)
  716. #else
  717. #define LL_RCC_USB_CLKSOURCE_DISABLE (0x00000000U)
  718. #define LL_RCC_USB_CLKSOURCE_PLL1Q (RCC_CDCCIP2R_USBSEL_0)
  719. #define LL_RCC_USB_CLKSOURCE_PLL3Q (RCC_CDCCIP2R_USBSEL_1)
  720. #define LL_RCC_USB_CLKSOURCE_HSI48 (RCC_CDCCIP2R_USBSEL_1 | RCC_CDCCIP2R_USBSEL_0)
  721. #endif /* RCC_D2CCIP2R_USBSEL */
  722. /**
  723. * @}
  724. */
  725. /** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection
  726. * @{
  727. */
  728. #if defined(RCC_D2CCIP2R_CECSEL)
  729. #define LL_RCC_CEC_CLKSOURCE_LSE (0x00000000U)
  730. #define LL_RCC_CEC_CLKSOURCE_LSI (RCC_D2CCIP2R_CECSEL_0)
  731. #define LL_RCC_CEC_CLKSOURCE_CSI_DIV122 (RCC_D2CCIP2R_CECSEL_1)
  732. #else
  733. #define LL_RCC_CEC_CLKSOURCE_LSE (0x00000000U)
  734. #define LL_RCC_CEC_CLKSOURCE_LSI (RCC_CDCCIP2R_CECSEL_0)
  735. #define LL_RCC_CEC_CLKSOURCE_CSI_DIV122 (RCC_CDCCIP2R_CECSEL_1)
  736. #endif
  737. /**
  738. * @}
  739. */
  740. #if defined(DSI)
  741. /** @defgroup RCC_LL_EC_DSI_CLKSOURCE Peripheral DSI clock source selection
  742. * @{
  743. */
  744. #define LL_RCC_DSI_CLKSOURCE_PHY (0x00000000U)
  745. #define LL_RCC_DSI_CLKSOURCE_PLL2Q (RCC_D1CCIPR_DSISEL)
  746. /**
  747. * @}
  748. */
  749. #endif /* DSI */
  750. /** @defgroup RCC_LL_EC_DFSDM_CLKSOURCE Peripheral DFSDM clock source selection
  751. * @{
  752. */
  753. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  754. #define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 (0x00000000U)
  755. #define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK (RCC_D2CCIP1R_DFSDM1SEL)
  756. #else
  757. #define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 (0x00000000U)
  758. #define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK (RCC_CDCCIP1R_DFSDM1SEL)
  759. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  760. /**
  761. * @}
  762. */
  763. #if defined(DFSDM2_BASE)
  764. /** @defgroup RCC_LL_EC_DFSDM2_CLKSOURCE Peripheral DFSDM2 clock source selection
  765. * @{
  766. */
  767. #define LL_RCC_DFSDM2_CLKSOURCE_PCLK4 (0x00000000U)
  768. #define LL_RCC_DFSDM2_CLKSOURCE_SYSCLK (RCC_SRDCCIPR_DFSDM2SEL)
  769. /**
  770. * @}
  771. */
  772. #endif /* DFSDM2_BASE */
  773. /** @defgroup RCC_LL_EC_FMC_CLKSOURCE Peripheral FMC clock source selection
  774. * @{
  775. */
  776. #if defined(RCC_D1CCIPR_FMCSEL)
  777. #define LL_RCC_FMC_CLKSOURCE_HCLK (0x00000000U)
  778. #define LL_RCC_FMC_CLKSOURCE_PLL1Q (RCC_D1CCIPR_FMCSEL_0)
  779. #define LL_RCC_FMC_CLKSOURCE_PLL2R (RCC_D1CCIPR_FMCSEL_1)
  780. #define LL_RCC_FMC_CLKSOURCE_CLKP (RCC_D1CCIPR_FMCSEL_0 | RCC_D1CCIPR_FMCSEL_1)
  781. #else
  782. #define LL_RCC_FMC_CLKSOURCE_HCLK (0x00000000U)
  783. #define LL_RCC_FMC_CLKSOURCE_PLL1Q (RCC_CDCCIPR_FMCSEL_0)
  784. #define LL_RCC_FMC_CLKSOURCE_PLL2R (RCC_CDCCIPR_FMCSEL_1)
  785. #define LL_RCC_FMC_CLKSOURCE_CLKP (RCC_CDCCIPR_FMCSEL_0 | RCC_CDCCIPR_FMCSEL_1)
  786. #endif /* RCC_D1CCIPR_FMCSEL */
  787. /**
  788. * @}
  789. */
  790. #if defined(QUADSPI)
  791. /** @defgroup RCC_LL_EC_QSPI_CLKSOURCE Peripheral QSPI clock source selection
  792. * @{
  793. */
  794. #define LL_RCC_QSPI_CLKSOURCE_HCLK (0x00000000U)
  795. #define LL_RCC_QSPI_CLKSOURCE_PLL1Q (RCC_D1CCIPR_QSPISEL_0)
  796. #define LL_RCC_QSPI_CLKSOURCE_PLL2R (RCC_D1CCIPR_QSPISEL_1)
  797. #define LL_RCC_QSPI_CLKSOURCE_CLKP (RCC_D1CCIPR_QSPISEL_0 | RCC_D1CCIPR_QSPISEL_1)
  798. /**
  799. * @}
  800. */
  801. #endif /* QUADSPI */
  802. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  803. /** @defgroup RCC_LL_EC_OSPI_CLKSOURCE Peripheral OSPI clock source selection
  804. * @{
  805. */
  806. #define LL_RCC_OSPI_CLKSOURCE_HCLK (0x00000000U)
  807. #define LL_RCC_OSPI_CLKSOURCE_PLL1Q (RCC_CDCCIPR_OCTOSPISEL_0)
  808. #define LL_RCC_OSPI_CLKSOURCE_PLL2R (RCC_CDCCIPR_OCTOSPISEL_1)
  809. #define LL_RCC_OSPI_CLKSOURCE_CLKP (RCC_CDCCIPR_OCTOSPISEL_0 | RCC_CDCCIPR_OCTOSPISEL_1)
  810. /**
  811. * @}
  812. */
  813. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  814. /** @defgroup RCC_LL_EC_CLKP_CLKSOURCE Peripheral CLKP clock source selection
  815. * @{
  816. */
  817. #if defined(RCC_D1CCIPR_CKPERSEL)
  818. #define LL_RCC_CLKP_CLKSOURCE_HSI (0x00000000U)
  819. #define LL_RCC_CLKP_CLKSOURCE_CSI (RCC_D1CCIPR_CKPERSEL_0)
  820. #define LL_RCC_CLKP_CLKSOURCE_HSE (RCC_D1CCIPR_CKPERSEL_1)
  821. #else
  822. #define LL_RCC_CLKP_CLKSOURCE_HSI (0x00000000U)
  823. #define LL_RCC_CLKP_CLKSOURCE_CSI (RCC_CDCCIPR_CKPERSEL_0)
  824. #define LL_RCC_CLKP_CLKSOURCE_HSE (RCC_CDCCIPR_CKPERSEL_1)
  825. #endif /* RCC_D1CCIPR_CKPERSEL */
  826. /**
  827. * @}
  828. */
  829. /** @defgroup RCC_LL_EC_SPIx_CLKSOURCE Peripheral SPI clock source selection
  830. * @{
  831. */
  832. #if defined(RCC_D2CCIP1R_SPI123SEL)
  833. #define LL_RCC_SPI123_CLKSOURCE_PLL1Q LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, 0x00000000U)
  834. #define LL_RCC_SPI123_CLKSOURCE_PLL2P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, RCC_D2CCIP1R_SPI123SEL_0)
  835. #define LL_RCC_SPI123_CLKSOURCE_PLL3P LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, RCC_D2CCIP1R_SPI123SEL_1)
  836. #define LL_RCC_SPI123_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, RCC_D2CCIP1R_SPI123SEL_0 | RCC_D2CCIP1R_SPI123SEL_1)
  837. #define LL_RCC_SPI123_CLKSOURCE_CLKP LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, RCC_D2CCIP1R_SPI123SEL_2)
  838. #else
  839. #define LL_RCC_SPI123_CLKSOURCE_PLL1Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, 0x00000000U)
  840. #define LL_RCC_SPI123_CLKSOURCE_PLL2P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, RCC_CDCCIP1R_SPI123SEL_0)
  841. #define LL_RCC_SPI123_CLKSOURCE_PLL3P LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, RCC_CDCCIP1R_SPI123SEL_1)
  842. #define LL_RCC_SPI123_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, RCC_CDCCIP1R_SPI123SEL_0 | RCC_CDCCIP1R_SPI123SEL_1)
  843. #define LL_RCC_SPI123_CLKSOURCE_CLKP LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, RCC_CDCCIP1R_SPI123SEL_2)
  844. #endif /* RCC_D2CCIP1R_SPI123SEL */
  845. #if defined(RCC_D2CCIP1R_SPI45SEL)
  846. #define LL_RCC_SPI45_CLKSOURCE_PCLK2 LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, 0x00000000U)
  847. #define LL_RCC_SPI45_CLKSOURCE_PLL2Q LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, RCC_D2CCIP1R_SPI45SEL_0)
  848. #define LL_RCC_SPI45_CLKSOURCE_PLL3Q LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, RCC_D2CCIP1R_SPI45SEL_1)
  849. #define LL_RCC_SPI45_CLKSOURCE_HSI LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_1)
  850. #define LL_RCC_SPI45_CLKSOURCE_CSI LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, RCC_D2CCIP1R_SPI45SEL_2)
  851. #define LL_RCC_SPI45_CLKSOURCE_HSE LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_2)
  852. #else
  853. #define LL_RCC_SPI45_CLKSOURCE_PCLK2 LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, 0x00000000U)
  854. #define LL_RCC_SPI45_CLKSOURCE_PLL2Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, RCC_CDCCIP1R_SPI45SEL_0)
  855. #define LL_RCC_SPI45_CLKSOURCE_PLL3Q LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, RCC_CDCCIP1R_SPI45SEL_1)
  856. #define LL_RCC_SPI45_CLKSOURCE_HSI LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_1)
  857. #define LL_RCC_SPI45_CLKSOURCE_CSI LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, RCC_CDCCIP1R_SPI45SEL_2)
  858. #define LL_RCC_SPI45_CLKSOURCE_HSE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_2)
  859. #endif /* (RCC_D2CCIP1R_SPI45SEL */
  860. #if defined(RCC_D3CCIPR_SPI6SEL)
  861. #define LL_RCC_SPI6_CLKSOURCE_PCLK4 LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, 0x00000000U)
  862. #define LL_RCC_SPI6_CLKSOURCE_PLL2Q LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, RCC_D3CCIPR_SPI6SEL_0)
  863. #define LL_RCC_SPI6_CLKSOURCE_PLL3Q LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, RCC_D3CCIPR_SPI6SEL_1)
  864. #define LL_RCC_SPI6_CLKSOURCE_HSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_1)
  865. #define LL_RCC_SPI6_CLKSOURCE_CSI LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, RCC_D3CCIPR_SPI6SEL_2)
  866. #define LL_RCC_SPI6_CLKSOURCE_HSE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_2)
  867. #else
  868. #define LL_RCC_SPI6_CLKSOURCE_PCLK4 LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, 0x00000000U)
  869. #define LL_RCC_SPI6_CLKSOURCE_PLL2Q LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_0)
  870. #define LL_RCC_SPI6_CLKSOURCE_PLL3Q LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_1)
  871. #define LL_RCC_SPI6_CLKSOURCE_HSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_1)
  872. #define LL_RCC_SPI6_CLKSOURCE_CSI LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_2)
  873. #define LL_RCC_SPI6_CLKSOURCE_HSE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_2)
  874. #define LL_RCC_SPI6_CLKSOURCE_I2S_CKIN LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, RCC_SRDCCIPR_SPI6SEL_1 | RCC_SRDCCIPR_SPI6SEL_2)
  875. #endif /* RCC_D3CCIPR_SPI6SEL */
  876. /**
  877. * @}
  878. */
  879. /** @defgroup RCC_LL_EC_SPDIF_CLKSOURCE Peripheral SPDIF clock source selection
  880. * @{
  881. */
  882. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  883. #define LL_RCC_SPDIF_CLKSOURCE_PLL1Q (0x00000000U)
  884. #define LL_RCC_SPDIF_CLKSOURCE_PLL2R (RCC_D2CCIP1R_SPDIFSEL_0)
  885. #define LL_RCC_SPDIF_CLKSOURCE_PLL3R (RCC_D2CCIP1R_SPDIFSEL_1)
  886. #define LL_RCC_SPDIF_CLKSOURCE_HSI (RCC_D2CCIP1R_SPDIFSEL_0 | RCC_D2CCIP1R_SPDIFSEL_1)
  887. #else
  888. #define LL_RCC_SPDIF_CLKSOURCE_PLL1Q (0x00000000U)
  889. #define LL_RCC_SPDIF_CLKSOURCE_PLL2R (RCC_CDCCIP1R_SPDIFSEL_0)
  890. #define LL_RCC_SPDIF_CLKSOURCE_PLL3R (RCC_CDCCIP1R_SPDIFSEL_1)
  891. #define LL_RCC_SPDIF_CLKSOURCE_HSI (RCC_CDCCIP1R_SPDIFSEL_0 | RCC_CDCCIP1R_SPDIFSEL_1)
  892. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  893. /**
  894. * @}
  895. */
  896. #if defined(FDCAN1) || defined(FDCAN2)
  897. /** @defgroup RCC_LL_EC_FDCAN_CLKSOURCE Peripheral FDCAN clock source selection
  898. * @{
  899. */
  900. #if defined(RCC_D2CCIP1R_FDCANSEL)
  901. #define LL_RCC_FDCAN_CLKSOURCE_HSE (0x00000000U)
  902. #define LL_RCC_FDCAN_CLKSOURCE_PLL1Q (RCC_D2CCIP1R_FDCANSEL_0)
  903. #define LL_RCC_FDCAN_CLKSOURCE_PLL2Q (RCC_D2CCIP1R_FDCANSEL_1)
  904. #else
  905. #define LL_RCC_FDCAN_CLKSOURCE_HSE (0x00000000U)
  906. #define LL_RCC_FDCAN_CLKSOURCE_PLL1Q (RCC_CDCCIP1R_FDCANSEL_0)
  907. #define LL_RCC_FDCAN_CLKSOURCE_PLL2Q (RCC_CDCCIP1R_FDCANSEL_1)
  908. #endif /* RCC_D2CCIP1R_FDCANSEL */
  909. /**
  910. * @}
  911. */
  912. #endif /*FDCAN1 || FDCAN2*/
  913. /** @defgroup RCC_LL_EC_SWP_CLKSOURCE Peripheral SWP clock source selection
  914. * @{
  915. */
  916. #if defined(RCC_D2CCIP1R_SWPSEL)
  917. #define LL_RCC_SWP_CLKSOURCE_PCLK1 (0x00000000U)
  918. #define LL_RCC_SWP_CLKSOURCE_HSI (RCC_D2CCIP1R_SWPSEL)
  919. #else
  920. #define LL_RCC_SWP_CLKSOURCE_PCLK1 (0x00000000U)
  921. #define LL_RCC_SWP_CLKSOURCE_HSI (RCC_CDCCIP1R_SWPSEL)
  922. #endif /* RCC_D2CCIP1R_SWPSEL */
  923. /**
  924. * @}
  925. */
  926. /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC clock source selection
  927. * @{
  928. */
  929. #if defined(RCC_D3CCIPR_ADCSEL)
  930. #define LL_RCC_ADC_CLKSOURCE_PLL2P (0x00000000U)
  931. #define LL_RCC_ADC_CLKSOURCE_PLL3R (RCC_D3CCIPR_ADCSEL_0)
  932. #define LL_RCC_ADC_CLKSOURCE_CLKP (RCC_D3CCIPR_ADCSEL_1)
  933. #else
  934. #define LL_RCC_ADC_CLKSOURCE_PLL2P (0x00000000U)
  935. #define LL_RCC_ADC_CLKSOURCE_PLL3R (RCC_SRDCCIPR_ADCSEL_0)
  936. #define LL_RCC_ADC_CLKSOURCE_CLKP (RCC_SRDCCIPR_ADCSEL_1)
  937. #endif /* RCC_D3CCIPR_ADCSEL */
  938. /**
  939. * @}
  940. */
  941. /** @defgroup RCC_LL_EC_USARTx_CLKSOURCE Peripheral USART get clock source
  942. * @{
  943. */
  944. #if defined (RCC_D2CCIP2R_USART16SEL)
  945. #define LL_RCC_USART16_CLKSOURCE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART16SEL, RCC_D2CCIP2R_USART16SEL_Pos, 0x00000000U)
  946. #else
  947. #define LL_RCC_USART16_CLKSOURCE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART16910SEL, RCC_CDCCIP2R_USART16910SEL_Pos, 0x00000000U)
  948. /* alias*/
  949. #define LL_RCC_USART16910_CLKSOURCE LL_RCC_USART16_CLKSOURCE
  950. #endif /* RCC_D2CCIP2R_USART16SEL */
  951. #if defined (RCC_D2CCIP2R_USART28SEL)
  952. #define LL_RCC_USART234578_CLKSOURCE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_USART28SEL, RCC_D2CCIP2R_USART28SEL_Pos, 0x00000000U)
  953. #else
  954. #define LL_RCC_USART234578_CLKSOURCE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_USART234578SEL, RCC_CDCCIP2R_USART234578SEL_Pos, 0x00000000U)
  955. #endif /* RCC_D2CCIP2R_USART28SEL */
  956. /**
  957. * @}
  958. */
  959. /** @defgroup RCC_LL_EC_LPUARTx_CLKSOURCE Peripheral LPUART get clock source
  960. * @{
  961. */
  962. #if defined(RCC_D3CCIPR_LPUART1SEL)
  963. #define LL_RCC_LPUART1_CLKSOURCE RCC_D3CCIPR_LPUART1SEL
  964. #else
  965. #define LL_RCC_LPUART1_CLKSOURCE RCC_SRDCCIPR_LPUART1SEL
  966. #endif /* RCC_D3CCIPR_LPUART1SEL */
  967. /**
  968. * @}
  969. */
  970. /** @defgroup RCC_LL_EC_I2Cx_CLKSOURCE Peripheral I2C get clock source
  971. * @{
  972. */
  973. #if defined(RCC_D2CCIP2R_I2C123SEL)
  974. #define LL_RCC_I2C123_CLKSOURCE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_I2C123SEL, RCC_D2CCIP2R_I2C123SEL_Pos, 0x00000000U)
  975. #else
  976. #define LL_RCC_I2C123_CLKSOURCE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_I2C123SEL, RCC_CDCCIP2R_I2C123SEL_Pos, 0x00000000U)
  977. #endif /* RCC_D2CCIP2R_I2C123SEL */
  978. #if defined(RCC_D3CCIPR_I2C4SEL)
  979. #define LL_RCC_I2C4_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_I2C4SEL, RCC_D3CCIPR_I2C4SEL_Pos, 0x00000000U)
  980. #else
  981. #define LL_RCC_I2C4_CLKSOURCE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_I2C4SEL, RCC_SRDCCIPR_I2C4SEL_Pos, 0x00000000U)
  982. #endif /* RCC_D3CCIPR_I2C4SEL */
  983. /**
  984. * @}
  985. */
  986. /** @defgroup RCC_LL_EC_LPTIMx_CLKSOURCE Peripheral LPTIM get clock source
  987. * @{
  988. */
  989. #if defined(RCC_D2CCIP2R_LPTIM1SEL)
  990. #define LL_RCC_LPTIM1_CLKSOURCE LL_CLKSOURCE(D2CCIP2, RCC_D2CCIP2R_LPTIM1SEL, RCC_D2CCIP2R_LPTIM1SEL_Pos, 0x00000000U)
  991. #else
  992. #define LL_RCC_LPTIM1_CLKSOURCE LL_CLKSOURCE(CDCCIP2, RCC_CDCCIP2R_LPTIM1SEL, RCC_CDCCIP2R_LPTIM1SEL_Pos, 0x00000000U)
  993. #endif /* RCC_D2CCIP2R_LPTIM1SEL) */
  994. #if defined(RCC_D3CCIPR_LPTIM2SEL)
  995. #define LL_RCC_LPTIM2_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM2SEL, RCC_D3CCIPR_LPTIM2SEL_Pos, 0x00000000U)
  996. #else
  997. #define LL_RCC_LPTIM2_CLKSOURCE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM2SEL, RCC_SRDCCIPR_LPTIM2SEL_Pos, 0x00000000U)
  998. #endif /* RCC_D3CCIPR_LPTIM2SEL */
  999. #if defined(RCC_D3CCIPR_LPTIM345SEL)
  1000. #define LL_RCC_LPTIM345_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_LPTIM345SEL, RCC_D3CCIPR_LPTIM345SEL_Pos, 0x00000000U)
  1001. #else
  1002. #define LL_RCC_LPTIM345_CLKSOURCE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_LPTIM3SEL, RCC_SRDCCIPR_LPTIM3SEL_Pos, 0x00000000U)
  1003. #define LL_RCC_LPTIM3_CLKSOURCE LL_RCC_LPTIM345_CLKSOURCE /* alias */
  1004. #endif /* RCC_D3CCIPR_LPTIM345SEL */
  1005. /**
  1006. * @}
  1007. */
  1008. /** @defgroup RCC_LL_EC_SAIx_CLKSOURCE Peripheral SAI get clock source
  1009. * @{
  1010. */
  1011. #if defined(RCC_D2CCIP1R_SAI1SEL)
  1012. #define LL_RCC_SAI1_CLKSOURCE LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI1SEL, RCC_D2CCIP1R_SAI1SEL_Pos, 0x00000000U)
  1013. #else
  1014. #define LL_RCC_SAI1_CLKSOURCE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI1SEL, RCC_CDCCIP1R_SAI1SEL_Pos, 0x00000000U)
  1015. #endif /* RCC_D2CCIP1R_SAI1SEL */
  1016. #if defined(RCC_D2CCIP1R_SAI23SEL)
  1017. #define LL_RCC_SAI23_CLKSOURCE LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SAI23SEL, RCC_D2CCIP1R_SAI23SEL_Pos, 0x00000000U)
  1018. #endif /* RCC_D2CCIP1R_SAI23SEL */
  1019. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  1020. #define LL_RCC_SAI2A_CLKSOURCE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2ASEL, RCC_CDCCIP1R_SAI2ASEL_Pos, 0x00000000U)
  1021. #endif /* RCC_CDCCIP1R_SAI2ASEL */
  1022. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  1023. #define LL_RCC_SAI2B_CLKSOURCE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SAI2BSEL, RCC_CDCCIP1R_SAI2BSEL_Pos, 0x00000000U)
  1024. #endif /* RCC_CDCCIP1R_SAI2BSEL */
  1025. #if defined(RCC_D3CCIPR_SAI4ASEL)
  1026. #define LL_RCC_SAI4A_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4ASEL, RCC_D3CCIPR_SAI4ASEL_Pos, 0x00000000U)
  1027. #endif /* RCC_D3CCIPR_SAI4ASEL */
  1028. #if defined(RCC_D3CCIPR_SAI4BSEL)
  1029. #define LL_RCC_SAI4B_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SAI4BSEL, RCC_D3CCIPR_SAI4BSEL_Pos, 0x00000000U)
  1030. #endif /* RCC_D3CCIPR_SAI4BSEL */
  1031. /**
  1032. * @}
  1033. */
  1034. /** @defgroup RCC_LL_EC_SDMMC_CLKSOURCE Peripheral SDMMC get clock source
  1035. * @{
  1036. */
  1037. #if defined(RCC_D1CCIPR_SDMMCSEL)
  1038. #define LL_RCC_SDMMC_CLKSOURCE RCC_D1CCIPR_SDMMCSEL
  1039. #else
  1040. #define LL_RCC_SDMMC_CLKSOURCE RCC_CDCCIPR_SDMMCSEL
  1041. #endif /* RCC_D1CCIPR_SDMMCSEL */
  1042. /**
  1043. * @}
  1044. */
  1045. /** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG get clock source
  1046. * @{
  1047. */
  1048. #if (RCC_D2CCIP2R_RNGSEL)
  1049. #define LL_RCC_RNG_CLKSOURCE RCC_D2CCIP2R_RNGSEL
  1050. #else
  1051. #define LL_RCC_RNG_CLKSOURCE RCC_CDCCIP2R_RNGSEL
  1052. #endif /* RCC_D2CCIP2R_RNGSEL */
  1053. /**
  1054. * @}
  1055. */
  1056. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB get clock source
  1057. * @{
  1058. */
  1059. #if (RCC_D2CCIP2R_USBSEL)
  1060. #define LL_RCC_USB_CLKSOURCE RCC_D2CCIP2R_USBSEL
  1061. #else
  1062. #define LL_RCC_USB_CLKSOURCE RCC_CDCCIP2R_USBSEL
  1063. #endif /* RCC_D2CCIP2R_USBSEL */
  1064. /**
  1065. * @}
  1066. */
  1067. /** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC get clock source
  1068. * @{
  1069. */
  1070. #if (RCC_D2CCIP2R_CECSEL)
  1071. #define LL_RCC_CEC_CLKSOURCE RCC_D2CCIP2R_CECSEL
  1072. #else
  1073. #define LL_RCC_CEC_CLKSOURCE RCC_CDCCIP2R_CECSEL
  1074. #endif /* RCC_D2CCIP2R_CECSEL */
  1075. /**
  1076. * @}
  1077. */
  1078. #if defined(DSI)
  1079. /** @defgroup RCC_LL_EC_DSI_CLKSOURCE Peripheral DSI get clock source
  1080. * @{
  1081. */
  1082. #define LL_RCC_DSI_CLKSOURCE RCC_D1CCIPR_DSISEL
  1083. /**
  1084. * @}
  1085. */
  1086. #endif /* DSI */
  1087. /** @defgroup RCC_LL_EC_DFSDM_CLKSOURCE Peripheral DFSDM get clock source
  1088. * @{
  1089. */
  1090. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  1091. #define LL_RCC_DFSDM1_CLKSOURCE RCC_D2CCIP1R_DFSDM1SEL
  1092. #else
  1093. #define LL_RCC_DFSDM1_CLKSOURCE RCC_CDCCIP1R_DFSDM1SEL
  1094. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  1095. /**
  1096. * @}
  1097. */
  1098. #if defined(DFSDM2_BASE)
  1099. /** @defgroup RCC_LL_EC_DFSDM2_CLKSOURCE Peripheral DFSDM2 get clock source
  1100. * @{
  1101. */
  1102. #define LL_RCC_DFSDM2_CLKSOURCE RCC_SRDCCIPR_DFSDM2SEL
  1103. /**
  1104. * @}
  1105. */
  1106. #endif /* DFSDM2 */
  1107. /** @defgroup RCC_LL_EC_FMC_CLKSOURCE Peripheral FMC get clock source
  1108. * @{
  1109. */
  1110. #if defined(RCC_D1CCIPR_FMCSEL)
  1111. #define LL_RCC_FMC_CLKSOURCE RCC_D1CCIPR_FMCSEL
  1112. #else
  1113. #define LL_RCC_FMC_CLKSOURCE RCC_CDCCIPR_FMCSEL
  1114. #endif
  1115. /**
  1116. * @}
  1117. */
  1118. #if defined(QUADSPI)
  1119. /** @defgroup RCC_LL_EC_QSPI_CLKSOURCE Peripheral QSPI get clock source
  1120. * @{
  1121. */
  1122. #define LL_RCC_QSPI_CLKSOURCE RCC_D1CCIPR_QSPISEL
  1123. /**
  1124. * @}
  1125. */
  1126. #endif /* QUADSPI */
  1127. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  1128. /** @defgroup RCC_LL_EC_OSPI_CLKSOURCE Peripheral OSPI get clock source
  1129. * @{
  1130. */
  1131. #define LL_RCC_OSPI_CLKSOURCE RCC_CDCCIPR_OCTOSPISEL
  1132. /**
  1133. * @}
  1134. */
  1135. #endif /* OCTOSPI1 || OCTOSPI2 */
  1136. /** @defgroup RCC_LL_EC_CLKP_CLKSOURCE Peripheral CLKP get clock source
  1137. * @{
  1138. */
  1139. #if defined(RCC_D1CCIPR_CKPERSEL)
  1140. #define LL_RCC_CLKP_CLKSOURCE RCC_D1CCIPR_CKPERSEL
  1141. #else
  1142. #define LL_RCC_CLKP_CLKSOURCE RCC_CDCCIPR_CKPERSEL
  1143. #endif /* RCC_D1CCIPR_CKPERSEL */
  1144. /**
  1145. * @}
  1146. */
  1147. /** @defgroup RCC_LL_EC_SPIx_CLKSOURCE Peripheral SPI get clock source
  1148. * @{
  1149. */
  1150. #if defined(RCC_D2CCIP1R_SPI123SEL)
  1151. #define LL_RCC_SPI123_CLKSOURCE LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI123SEL, RCC_D2CCIP1R_SPI123SEL_Pos, 0x00000000U)
  1152. #else
  1153. #define LL_RCC_SPI123_CLKSOURCE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI123SEL, RCC_CDCCIP1R_SPI123SEL_Pos, 0x00000000U)
  1154. #endif /* RCC_D2CCIP1R_SPI123SEL */
  1155. #if defined(RCC_D2CCIP1R_SPI45SEL)
  1156. #define LL_RCC_SPI45_CLKSOURCE LL_CLKSOURCE(D2CCIP1, RCC_D2CCIP1R_SPI45SEL, RCC_D2CCIP1R_SPI45SEL_Pos, 0x00000000U)
  1157. #else
  1158. #define LL_RCC_SPI45_CLKSOURCE LL_CLKSOURCE(CDCCIP1, RCC_CDCCIP1R_SPI45SEL, RCC_CDCCIP1R_SPI45SEL_Pos, 0x00000000U)
  1159. #endif /* RCC_D2CCIP1R_SPI45SEL */
  1160. #if defined(RCC_D3CCIPR_SPI6SEL)
  1161. #define LL_RCC_SPI6_CLKSOURCE LL_CLKSOURCE(D3CCIP, RCC_D3CCIPR_SPI6SEL, RCC_D3CCIPR_SPI6SEL_Pos, 0x00000000U)
  1162. #else
  1163. #define LL_RCC_SPI6_CLKSOURCE LL_CLKSOURCE(SRDCCIP, RCC_SRDCCIPR_SPI6SEL, RCC_SRDCCIPR_SPI6SEL_Pos, 0x00000000U)
  1164. #endif /* RCC_D3CCIPR_SPI6SEL */
  1165. /**
  1166. * @}
  1167. */
  1168. /** @defgroup RCC_LL_EC_SPDIF_CLKSOURCE Peripheral SPDIF get clock source
  1169. * @{
  1170. */
  1171. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  1172. #define LL_RCC_SPDIF_CLKSOURCE RCC_D2CCIP1R_SPDIFSEL
  1173. #else
  1174. #define LL_RCC_SPDIF_CLKSOURCE RCC_CDCCIP1R_SPDIFSEL
  1175. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  1176. /**
  1177. * @}
  1178. */
  1179. #if defined(FDCAN1) || defined(FDCAN2)
  1180. /** @defgroup RCC_LL_EC_FDCAN_CLKSOURCE Peripheral FDCAN get clock source
  1181. * @{
  1182. */
  1183. #if defined(RCC_D2CCIP1R_FDCANSEL)
  1184. #define LL_RCC_FDCAN_CLKSOURCE RCC_D2CCIP1R_FDCANSEL
  1185. #else
  1186. #define LL_RCC_FDCAN_CLKSOURCE RCC_CDCCIP1R_FDCANSEL
  1187. #endif
  1188. /**
  1189. * @}
  1190. */
  1191. #endif /*FDCAN1 || FDCAN2*/
  1192. /** @defgroup RCC_LL_EC_SWP_CLKSOURCE Peripheral SWP get clock source
  1193. * @{
  1194. */
  1195. #if defined(RCC_D2CCIP1R_SWPSEL)
  1196. #define LL_RCC_SWP_CLKSOURCE RCC_D2CCIP1R_SWPSEL
  1197. #else
  1198. #define LL_RCC_SWP_CLKSOURCE RCC_CDCCIP1R_SWPSEL
  1199. #endif /* RCC_D2CCIP1R_SWPSEL */
  1200. /**
  1201. * @}
  1202. */
  1203. /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC get clock source
  1204. * @{
  1205. */
  1206. #if defined(RCC_D3CCIPR_ADCSEL)
  1207. #define LL_RCC_ADC_CLKSOURCE RCC_D3CCIPR_ADCSEL
  1208. #else
  1209. #define LL_RCC_ADC_CLKSOURCE RCC_SRDCCIPR_ADCSEL
  1210. #endif /* RCC_D3CCIPR_ADCSEL */
  1211. /**
  1212. * @}
  1213. */
  1214. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
  1215. * @{
  1216. */
  1217. #define LL_RCC_RTC_CLKSOURCE_NONE (uint32_t)(0x00000000U)
  1218. #define LL_RCC_RTC_CLKSOURCE_LSE (uint32_t)(RCC_BDCR_RTCSEL_0)
  1219. #define LL_RCC_RTC_CLKSOURCE_LSI (uint32_t)(RCC_BDCR_RTCSEL_1)
  1220. #define LL_RCC_RTC_CLKSOURCE_HSE (uint32_t)(RCC_BDCR_RTCSEL_0 | RCC_BDCR_RTCSEL_1)
  1221. /**
  1222. * @}
  1223. */
  1224. /** @defgroup RCC_LL_EC_TIM_CLKPRESCALER Timers clocks prescalers selection
  1225. * @{
  1226. */
  1227. #define LL_RCC_TIM_PRESCALER_TWICE (uint32_t)(0x00000000U)
  1228. #define LL_RCC_TIM_PRESCALER_FOUR_TIMES (uint32_t)(RCC_CFGR_TIMPRE)
  1229. /**
  1230. * @}
  1231. */
  1232. #if defined(HRTIM1)
  1233. /** @defgroup RCC_LL_EC_HRTIM_CLKSOURCE High Resolution Timers clock selection
  1234. * @{
  1235. */
  1236. #define LL_RCC_HRTIM_CLKSOURCE_TIM (uint32_t)(0x00000000U) /* HRTIM Clock source is same as other timers */
  1237. #define LL_RCC_HRTIM_CLKSOURCE_CPU (uint32_t)(RCC_CFGR_HRTIMSEL) /* HRTIM Clock source is the CPU clock */
  1238. /**
  1239. * @}
  1240. */
  1241. #endif /* HRTIM1 */
  1242. /** @defgroup RCC_LL_EC_PLLSOURCE All PLLs entry clock source
  1243. * @{
  1244. */
  1245. #define LL_RCC_PLLSOURCE_HSI RCC_PLLCKSELR_PLLSRC_HSI
  1246. #define LL_RCC_PLLSOURCE_CSI RCC_PLLCKSELR_PLLSRC_CSI
  1247. #define LL_RCC_PLLSOURCE_HSE RCC_PLLCKSELR_PLLSRC_HSE
  1248. #define LL_RCC_PLLSOURCE_NONE RCC_PLLCKSELR_PLLSRC_NONE
  1249. /**
  1250. * @}
  1251. */
  1252. /** @defgroup RCC_LL_EC_PLLINPUTRANGE All PLLs input range
  1253. * @{
  1254. */
  1255. #define LL_RCC_PLLINPUTRANGE_1_2 (uint32_t)(0x00000000U)
  1256. #define LL_RCC_PLLINPUTRANGE_2_4 (uint32_t)(0x00000001)
  1257. #define LL_RCC_PLLINPUTRANGE_4_8 (uint32_t)(0x00000002)
  1258. #define LL_RCC_PLLINPUTRANGE_8_16 (uint32_t)(0x00000003)
  1259. /**
  1260. * @}
  1261. */
  1262. /** @defgroup RCC_LL_EC_PLLVCORANGE All PLLs VCO range
  1263. * @{
  1264. */
  1265. #define LL_RCC_PLLVCORANGE_WIDE (uint32_t)(0x00000000U) /* VCO output range: 192 to 836 MHz OR 128 to 544 MHz (*) */
  1266. #define LL_RCC_PLLVCORANGE_MEDIUM (uint32_t)(0x00000001) /* VCO output range: 150 to 420 MHz */
  1267. /**
  1268. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1269. * @}
  1270. */
  1271. /**
  1272. * @}
  1273. */
  1274. /* Exported macro ------------------------------------------------------------*/
  1275. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  1276. * @{
  1277. */
  1278. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  1279. * @{
  1280. */
  1281. /**
  1282. * @brief Write a value in RCC register
  1283. * @param __REG__ Register to be written
  1284. * @param __VALUE__ Value to be written in the register
  1285. * @retval None
  1286. */
  1287. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
  1288. /**
  1289. * @brief Read a value in RCC register
  1290. * @param __REG__ Register to be read
  1291. * @retval Register value
  1292. */
  1293. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  1294. /**
  1295. * @}
  1296. */
  1297. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  1298. * @{
  1299. */
  1300. /**
  1301. * @brief Helper macro to calculate the SYSCLK frequency
  1302. * @param __SYSINPUTCLKFREQ__ Frequency of the input of sys_ck (based on HSE/CSI/HSI/PLL1P)
  1303. * @param __SYSPRESCALER__ This parameter can be one of the following values:
  1304. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1305. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1306. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1307. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1308. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1309. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1310. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1311. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1312. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1313. * @retval SYSCLK clock frequency (in Hz)
  1314. */
  1315. #if defined(RCC_D1CFGR_D1CPRE)
  1316. #define LL_RCC_CALC_SYSCLK_FREQ(__SYSINPUTCLKFREQ__, __SYSPRESCALER__) ((__SYSINPUTCLKFREQ__) >> LL_RCC_PrescTable[((__SYSPRESCALER__) & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos])
  1317. #else
  1318. #define LL_RCC_CALC_SYSCLK_FREQ(__SYSINPUTCLKFREQ__, __SYSPRESCALER__) ((__SYSINPUTCLKFREQ__) >> LL_RCC_PrescTable[((__SYSPRESCALER__) & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos])
  1319. #endif /* RCC_D1CFGR_D1CPRE */
  1320. /**
  1321. * @brief Helper macro to calculate the HCLK frequency
  1322. * @param __SYSCLKFREQ__ SYSCLK frequency.
  1323. * @param __HPRESCALER__ This parameter can be one of the following values:
  1324. * @arg @ref LL_RCC_AHB_DIV_1
  1325. * @arg @ref LL_RCC_AHB_DIV_2
  1326. * @arg @ref LL_RCC_AHB_DIV_4
  1327. * @arg @ref LL_RCC_AHB_DIV_8
  1328. * @arg @ref LL_RCC_AHB_DIV_16
  1329. * @arg @ref LL_RCC_AHB_DIV_64
  1330. * @arg @ref LL_RCC_AHB_DIV_128
  1331. * @arg @ref LL_RCC_AHB_DIV_256
  1332. * @arg @ref LL_RCC_AHB_DIV_512
  1333. * @retval HCLK clock frequency (in Hz)
  1334. */
  1335. #if defined(RCC_D1CFGR_HPRE)
  1336. #define LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __HPRESCALER__) ((__SYSCLKFREQ__) >> LL_RCC_PrescTable[((__HPRESCALER__) & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos])
  1337. #else
  1338. #define LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __HPRESCALER__) ((__SYSCLKFREQ__) >> LL_RCC_PrescTable[((__HPRESCALER__) & RCC_CDCFGR1_HPRE) >> RCC_CDCFGR1_HPRE_Pos])
  1339. #endif /* RCC_D1CFGR_HPRE */
  1340. /**
  1341. * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
  1342. * @param __HCLKFREQ__ HCLK frequency
  1343. * @param __APB1PRESCALER__ This parameter can be one of the following values:
  1344. * @arg @ref LL_RCC_APB1_DIV_1
  1345. * @arg @ref LL_RCC_APB1_DIV_2
  1346. * @arg @ref LL_RCC_APB1_DIV_4
  1347. * @arg @ref LL_RCC_APB1_DIV_8
  1348. * @arg @ref LL_RCC_APB1_DIV_16
  1349. * @retval PCLK1 clock frequency (in Hz)
  1350. */
  1351. #if defined(RCC_D2CFGR_D2PPRE1)
  1352. #define LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB1PRESCALER__) & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos])
  1353. #else
  1354. #define LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB1PRESCALER__) & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos])
  1355. #endif /* RCC_D2CFGR_D2PPRE1 */
  1356. /**
  1357. * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
  1358. * @param __HCLKFREQ__ HCLK frequency
  1359. * @param __APB2PRESCALER__ This parameter can be one of the following values:
  1360. * @arg @ref LL_RCC_APB2_DIV_1
  1361. * @arg @ref LL_RCC_APB2_DIV_2
  1362. * @arg @ref LL_RCC_APB2_DIV_4
  1363. * @arg @ref LL_RCC_APB2_DIV_8
  1364. * @arg @ref LL_RCC_APB2_DIV_16
  1365. * @retval PCLK2 clock frequency (in Hz)
  1366. */
  1367. #if defined(RCC_D2CFGR_D2PPRE2)
  1368. #define LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB2PRESCALER__) & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos])
  1369. #else
  1370. #define LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB2PRESCALER__) & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos])
  1371. #endif /* RCC_D2CFGR_D2PPRE2 */
  1372. /**
  1373. * @brief Helper macro to calculate the PCLK3 frequency (APB3)
  1374. * @param __HCLKFREQ__ HCLK frequency
  1375. * @param __APB3PRESCALER__ This parameter can be one of the following values:
  1376. * @arg @ref LL_RCC_APB3_DIV_1
  1377. * @arg @ref LL_RCC_APB3_DIV_2
  1378. * @arg @ref LL_RCC_APB3_DIV_4
  1379. * @arg @ref LL_RCC_APB3_DIV_8
  1380. * @arg @ref LL_RCC_APB3_DIV_16
  1381. * @retval PCLK1 clock frequency (in Hz)
  1382. */
  1383. #if defined(RCC_D1CFGR_D1PPRE)
  1384. #define LL_RCC_CALC_PCLK3_FREQ(__HCLKFREQ__, __APB3PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB3PRESCALER__) & RCC_D1CFGR_D1PPRE) >> RCC_D1CFGR_D1PPRE_Pos])
  1385. #else
  1386. #define LL_RCC_CALC_PCLK3_FREQ(__HCLKFREQ__, __APB3PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB3PRESCALER__) & RCC_CDCFGR1_CDPPRE) >> RCC_CDCFGR1_CDPPRE_Pos])
  1387. #endif /* RCC_D1CFGR_D1PPRE */
  1388. /**
  1389. * @brief Helper macro to calculate the PCLK4 frequency (ABP4)
  1390. * @param __HCLKFREQ__ HCLK frequency
  1391. * @param __APB4PRESCALER__ This parameter can be one of the following values:
  1392. * @arg @ref LL_RCC_APB4_DIV_1
  1393. * @arg @ref LL_RCC_APB4_DIV_2
  1394. * @arg @ref LL_RCC_APB4_DIV_4
  1395. * @arg @ref LL_RCC_APB4_DIV_8
  1396. * @arg @ref LL_RCC_APB4_DIV_16
  1397. * @retval PCLK1 clock frequency (in Hz)
  1398. */
  1399. #if defined(RCC_D3CFGR_D3PPRE)
  1400. #define LL_RCC_CALC_PCLK4_FREQ(__HCLKFREQ__, __APB4PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB4PRESCALER__) & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos])
  1401. #else
  1402. #define LL_RCC_CALC_PCLK4_FREQ(__HCLKFREQ__, __APB4PRESCALER__) ((__HCLKFREQ__) >> LL_RCC_PrescTable[((__APB4PRESCALER__) & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos])
  1403. #endif /* RCC_D3CFGR_D3PPRE */
  1404. /**
  1405. * @}
  1406. */
  1407. #if defined(USE_FULL_LL_DRIVER)
  1408. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  1409. * @{
  1410. */
  1411. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  1412. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  1413. /**
  1414. * @}
  1415. */
  1416. #endif /* USE_FULL_LL_DRIVER */
  1417. /**
  1418. * @}
  1419. */
  1420. /* Exported functions --------------------------------------------------------*/
  1421. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  1422. * @{
  1423. */
  1424. /** @defgroup RCC_LL_EF_HSE HSE
  1425. * @{
  1426. */
  1427. /**
  1428. * @brief Enable the Clock Security System.
  1429. * @note Once HSE Clock Security System is enabled it cannot be changed anymore unless
  1430. * a reset occurs or system enter in standby mode.
  1431. * @rmtoll CR CSSHSEON LL_RCC_HSE_EnableCSS
  1432. * @retval None
  1433. */
  1434. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  1435. {
  1436. SET_BIT(RCC->CR, RCC_CR_CSSHSEON);
  1437. }
  1438. /**
  1439. * @brief Enable HSE external oscillator (HSE Bypass)
  1440. * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
  1441. * @retval None
  1442. */
  1443. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  1444. {
  1445. SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  1446. }
  1447. /**
  1448. * @brief Disable HSE external oscillator (HSE Bypass)
  1449. * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
  1450. * @retval None
  1451. */
  1452. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  1453. {
  1454. CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  1455. }
  1456. #if defined(RCC_CR_HSEEXT)
  1457. /**
  1458. * @brief Select the Analog HSE external clock type in Bypass mode
  1459. * @rmtoll CR HSEEXT LL_RCC_HSE_SelectAnalogClock
  1460. * @retval None
  1461. */
  1462. __STATIC_INLINE void LL_RCC_HSE_SelectAnalogClock(void)
  1463. {
  1464. CLEAR_BIT(RCC->CR, RCC_CR_HSEEXT);
  1465. }
  1466. /**
  1467. * @brief Select the Digital HSE external clock type in Bypass mode
  1468. * @rmtoll CR HSEEXT LL_RCC_HSE_SelectDigitalClock
  1469. * @retval None
  1470. */
  1471. __STATIC_INLINE void LL_RCC_HSE_SelectDigitalClock(void)
  1472. {
  1473. SET_BIT(RCC->CR, RCC_CR_HSEEXT);
  1474. }
  1475. #endif /* RCC_CR_HSEEXT */
  1476. /**
  1477. * @brief Enable HSE crystal oscillator (HSE ON)
  1478. * @rmtoll CR HSEON LL_RCC_HSE_Enable
  1479. * @retval None
  1480. */
  1481. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  1482. {
  1483. SET_BIT(RCC->CR, RCC_CR_HSEON);
  1484. }
  1485. /**
  1486. * @brief Disable HSE crystal oscillator (HSE ON)
  1487. * @rmtoll CR HSEON LL_RCC_HSE_Disable
  1488. * @retval None
  1489. */
  1490. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  1491. {
  1492. CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  1493. }
  1494. /**
  1495. * @brief Check if HSE oscillator Ready
  1496. * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
  1497. * @retval State of bit (1 or 0).
  1498. */
  1499. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  1500. {
  1501. return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY))?1UL:0UL);
  1502. }
  1503. /**
  1504. * @}
  1505. */
  1506. /** @defgroup RCC_LL_EF_HSI HSI
  1507. * @{
  1508. */
  1509. /**
  1510. * @brief Enable HSI oscillator
  1511. * @rmtoll CR HSION LL_RCC_HSI_Enable
  1512. * @retval None
  1513. */
  1514. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  1515. {
  1516. SET_BIT(RCC->CR, RCC_CR_HSION);
  1517. }
  1518. /**
  1519. * @brief Disable HSI oscillator
  1520. * @rmtoll CR HSION LL_RCC_HSI_Disable
  1521. * @retval None
  1522. */
  1523. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  1524. {
  1525. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  1526. }
  1527. /**
  1528. * @brief Check if HSI clock is ready
  1529. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  1530. * @retval State of bit (1 or 0).
  1531. */
  1532. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  1533. {
  1534. return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY))?1UL:0UL);
  1535. }
  1536. /**
  1537. * @brief Check if HSI new divider applied and ready
  1538. * @rmtoll CR HSIDIVF LL_RCC_HSI_IsDividerReady
  1539. * @retval State of bit (1 or 0).
  1540. */
  1541. __STATIC_INLINE uint32_t LL_RCC_HSI_IsDividerReady(void)
  1542. {
  1543. return ((READ_BIT(RCC->CR, RCC_CR_HSIDIVF) == (RCC_CR_HSIDIVF))?1UL:0UL);
  1544. }
  1545. /**
  1546. * @brief Set HSI divider
  1547. * @rmtoll CR HSIDIV LL_RCC_HSI_SetDivider
  1548. * @param Divider This parameter can be one of the following values:
  1549. * @arg @ref LL_RCC_HSI_DIV1
  1550. * @arg @ref LL_RCC_HSI_DIV2
  1551. * @arg @ref LL_RCC_HSI_DIV4
  1552. * @arg @ref LL_RCC_HSI_DIV8
  1553. * @retval None.
  1554. */
  1555. __STATIC_INLINE void LL_RCC_HSI_SetDivider(uint32_t Divider)
  1556. {
  1557. MODIFY_REG(RCC->CR, RCC_CR_HSIDIV, Divider);
  1558. }
  1559. /**
  1560. * @brief Get HSI divider
  1561. * @rmtoll CR HSIDIV LL_RCC_HSI_GetDivider
  1562. * @retval can be one of the following values:
  1563. * @arg @ref LL_RCC_HSI_DIV1
  1564. * @arg @ref LL_RCC_HSI_DIV2
  1565. * @arg @ref LL_RCC_HSI_DIV4
  1566. * @arg @ref LL_RCC_HSI_DIV8
  1567. */
  1568. __STATIC_INLINE uint32_t LL_RCC_HSI_GetDivider(void)
  1569. {
  1570. return (READ_BIT(RCC->CR, RCC_CR_HSIDIV));
  1571. }
  1572. /**
  1573. * @brief Enable HSI oscillator in Stop mode
  1574. * @rmtoll CR HSIKERON LL_RCC_HSI_EnableStopMode
  1575. * @retval None
  1576. */
  1577. __STATIC_INLINE void LL_RCC_HSI_EnableStopMode(void)
  1578. {
  1579. SET_BIT(RCC->CR, RCC_CR_HSIKERON);
  1580. }
  1581. /**
  1582. * @brief Disable HSI oscillator in Stop mode
  1583. * @rmtoll CR HSION LL_RCC_HSI_DisableStopMode
  1584. * @retval None
  1585. */
  1586. __STATIC_INLINE void LL_RCC_HSI_DisableStopMode(void)
  1587. {
  1588. CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON);
  1589. }
  1590. /**
  1591. * @brief Get HSI Calibration value
  1592. * @note When HSITRIM is written, HSICAL is updated with the sum of
  1593. * HSITRIM and the factory trim value
  1594. * @rmtoll HSICFGR HSICAL LL_RCC_HSI_GetCalibration
  1595. * @retval A value between 0 and 4095 (0xFFF)
  1596. */
  1597. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  1598. {
  1599. return (uint32_t)(READ_BIT(RCC->HSICFGR, RCC_HSICFGR_HSICAL) >> RCC_HSICFGR_HSICAL_Pos);
  1600. }
  1601. /**
  1602. * @brief Set HSI Calibration trimming
  1603. * @note user-programmable trimming value that is added to the HSICAL
  1604. * @note Default value is 64 (32 for Cut1.x), which, when added to the HSICAL value,
  1605. * should trim the HSI to 64 MHz +/- 1 %
  1606. * @rmtoll HSICFGR HSITRIM LL_RCC_HSI_SetCalibTrimming
  1607. * @param Parameter can be a value between 0 and 127 (63 for Cut1.x)
  1608. * @retval None
  1609. */
  1610. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  1611. {
  1612. #if defined(RCC_VER_X)
  1613. if ((DBGMCU->IDCODE & 0xF0000000U) == 0x10000000U)
  1614. {
  1615. /* STM32H7 Rev.Y */
  1616. MODIFY_REG(RCC->HSICFGR, 0x3F000U, Value << 12U);
  1617. }
  1618. else
  1619. {
  1620. /* STM32H7 Rev.V */
  1621. MODIFY_REG(RCC->HSICFGR, RCC_HSICFGR_HSITRIM, Value << RCC_HSICFGR_HSITRIM_Pos);
  1622. }
  1623. #else
  1624. MODIFY_REG(RCC->HSICFGR, RCC_HSICFGR_HSITRIM, Value << RCC_HSICFGR_HSITRIM_Pos);
  1625. #endif /* RCC_VER_X */
  1626. }
  1627. /**
  1628. * @brief Get HSI Calibration trimming
  1629. * @rmtoll HSICFGR HSITRIM LL_RCC_HSI_GetCalibTrimming
  1630. * @retval A value between 0 and 127 (63 for Cut1.x)
  1631. */
  1632. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  1633. {
  1634. #if defined(RCC_VER_X)
  1635. if ((DBGMCU->IDCODE & 0xF0000000U) == 0x10000000U)
  1636. {
  1637. /* STM32H7 Rev.Y */
  1638. return (uint32_t)(READ_BIT(RCC->HSICFGR, 0x3F000U) >> 12U);
  1639. }
  1640. else
  1641. {
  1642. /* STM32H7 Rev.V */
  1643. return (uint32_t)(READ_BIT(RCC->HSICFGR, RCC_HSICFGR_HSITRIM) >> RCC_HSICFGR_HSITRIM_Pos);
  1644. }
  1645. #else
  1646. return (uint32_t)(READ_BIT(RCC->HSICFGR, RCC_HSICFGR_HSITRIM) >> RCC_HSICFGR_HSITRIM_Pos);
  1647. #endif /* RCC_VER_X */
  1648. }
  1649. /**
  1650. * @}
  1651. */
  1652. /** @defgroup RCC_LL_EF_CSI CSI
  1653. * @{
  1654. */
  1655. /**
  1656. * @brief Enable CSI oscillator
  1657. * @rmtoll CR CSION LL_RCC_CSI_Enable
  1658. * @retval None
  1659. */
  1660. __STATIC_INLINE void LL_RCC_CSI_Enable(void)
  1661. {
  1662. SET_BIT(RCC->CR, RCC_CR_CSION);
  1663. }
  1664. /**
  1665. * @brief Disable CSI oscillator
  1666. * @rmtoll CR CSION LL_RCC_CSI_Disable
  1667. * @retval None
  1668. */
  1669. __STATIC_INLINE void LL_RCC_CSI_Disable(void)
  1670. {
  1671. CLEAR_BIT(RCC->CR, RCC_CR_CSION);
  1672. }
  1673. /**
  1674. * @brief Check if CSI clock is ready
  1675. * @rmtoll CR CSIRDY LL_RCC_CSI_IsReady
  1676. * @retval State of bit (1 or 0).
  1677. */
  1678. __STATIC_INLINE uint32_t LL_RCC_CSI_IsReady(void)
  1679. {
  1680. return ((READ_BIT(RCC->CR, RCC_CR_CSIRDY) == (RCC_CR_CSIRDY))?1UL:0UL);
  1681. }
  1682. /**
  1683. * @brief Enable CSI oscillator in Stop mode
  1684. * @rmtoll CR CSIKERON LL_RCC_CSI_EnableStopMode
  1685. * @retval None
  1686. */
  1687. __STATIC_INLINE void LL_RCC_CSI_EnableStopMode(void)
  1688. {
  1689. SET_BIT(RCC->CR, RCC_CR_CSIKERON);
  1690. }
  1691. /**
  1692. * @brief Disable CSI oscillator in Stop mode
  1693. * @rmtoll CR CSIKERON LL_RCC_CSI_DisableStopMode
  1694. * @retval None
  1695. */
  1696. __STATIC_INLINE void LL_RCC_CSI_DisableStopMode(void)
  1697. {
  1698. CLEAR_BIT(RCC->CR, RCC_CR_CSIKERON);
  1699. }
  1700. /**
  1701. * @brief Get CSI Calibration value
  1702. * @note When CSITRIM is written, CSICAL is updated with the sum of
  1703. * CSITRIM and the factory trim value
  1704. * @rmtoll CSICFGR CSICAL LL_RCC_CSI_GetCalibration
  1705. * @retval A value between 0 and 255 (0xFF)
  1706. */
  1707. __STATIC_INLINE uint32_t LL_RCC_CSI_GetCalibration(void)
  1708. {
  1709. #if defined(RCC_VER_X)
  1710. if ((DBGMCU->IDCODE & 0xF0000000U) == 0x10000000U)
  1711. {
  1712. /* STM32H7 Rev.Y */
  1713. return (uint32_t)(READ_BIT(RCC->HSICFGR, 0x3FC0000U) >> 18U);
  1714. }
  1715. else
  1716. {
  1717. /* STM32H7 Rev.V */
  1718. return (uint32_t)(READ_BIT(RCC->CSICFGR, RCC_CSICFGR_CSICAL) >> RCC_CSICFGR_CSICAL_Pos);
  1719. }
  1720. #else
  1721. return (uint32_t)(READ_BIT(RCC->CSICFGR, RCC_CSICFGR_CSICAL) >> RCC_CSICFGR_CSICAL_Pos);
  1722. #endif /* RCC_VER_X */
  1723. }
  1724. /**
  1725. * @brief Set CSI Calibration trimming
  1726. * @note user-programmable trimming value that is added to the CSICAL
  1727. * @note Default value is 16, which, when added to the CSICAL value,
  1728. * should trim the CSI to 4 MHz +/- 1 %
  1729. * @rmtoll CSICFGR CSITRIM LL_RCC_CSI_SetCalibTrimming
  1730. * @param Value can be a value between 0 and 31
  1731. * @retval None
  1732. */
  1733. __STATIC_INLINE void LL_RCC_CSI_SetCalibTrimming(uint32_t Value)
  1734. {
  1735. #if defined(RCC_VER_X)
  1736. if ((DBGMCU->IDCODE & 0xF0000000U) == 0x10000000U)
  1737. {
  1738. /* STM32H7 Rev.Y */
  1739. MODIFY_REG(RCC->HSICFGR, 0x7C000000U, Value << 26U);
  1740. }
  1741. else
  1742. {
  1743. /* STM32H7 Rev.V */
  1744. MODIFY_REG(RCC->CSICFGR, RCC_CSICFGR_CSITRIM, Value << RCC_CSICFGR_CSITRIM_Pos);
  1745. }
  1746. #else
  1747. MODIFY_REG(RCC->CSICFGR, RCC_CSICFGR_CSITRIM, Value << RCC_CSICFGR_CSITRIM_Pos);
  1748. #endif /* RCC_VER_X */
  1749. }
  1750. /**
  1751. * @brief Get CSI Calibration trimming
  1752. * @rmtoll CSICFGR CSITRIM LL_RCC_CSI_GetCalibTrimming
  1753. * @retval A value between 0 and 31
  1754. */
  1755. __STATIC_INLINE uint32_t LL_RCC_CSI_GetCalibTrimming(void)
  1756. {
  1757. #if defined(RCC_VER_X)
  1758. if ((DBGMCU->IDCODE & 0xF0000000U) == 0x10000000U)
  1759. {
  1760. /* STM32H7 Rev.Y */
  1761. return (uint32_t)(READ_BIT(RCC->HSICFGR, 0x7C000000U) >> 26U);
  1762. }
  1763. else
  1764. {
  1765. /* STM32H7 Rev.V */
  1766. return (uint32_t)(READ_BIT(RCC->CSICFGR, RCC_CSICFGR_CSITRIM) >> RCC_CSICFGR_CSITRIM_Pos);
  1767. }
  1768. #else
  1769. return (uint32_t)(READ_BIT(RCC->CSICFGR, RCC_CSICFGR_CSITRIM) >> RCC_CSICFGR_CSITRIM_Pos);
  1770. #endif /* RCC_VER_X */
  1771. }
  1772. /**
  1773. * @}
  1774. */
  1775. /** @defgroup RCC_LL_EF_HSI48 HSI48
  1776. * @{
  1777. */
  1778. /**
  1779. * @brief Enable HSI48 oscillator
  1780. * @rmtoll CR HSI48ON LL_RCC_HSI48_Enable
  1781. * @retval None
  1782. */
  1783. __STATIC_INLINE void LL_RCC_HSI48_Enable(void)
  1784. {
  1785. SET_BIT(RCC->CR, RCC_CR_HSI48ON);
  1786. }
  1787. /**
  1788. * @brief Disable HSI48 oscillator
  1789. * @rmtoll CR HSI48ON LL_RCC_HSI48_Disable
  1790. * @retval None
  1791. */
  1792. __STATIC_INLINE void LL_RCC_HSI48_Disable(void)
  1793. {
  1794. CLEAR_BIT(RCC->CR, RCC_CR_HSI48ON);
  1795. }
  1796. /**
  1797. * @brief Check if HSI48 clock is ready
  1798. * @rmtoll CR HSI48RDY LL_RCC_HSI48_IsReady
  1799. * @retval State of bit (1 or 0).
  1800. */
  1801. __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void)
  1802. {
  1803. return ((READ_BIT(RCC->CR, RCC_CR_HSI48RDY) == (RCC_CR_HSI48RDY))?1UL:0UL);
  1804. }
  1805. /**
  1806. * @brief Get HSI48 Calibration value
  1807. * @note When HSI48TRIM is written, HSI48CAL is updated with the sum of
  1808. * HSI48TRIM and the factory trim value
  1809. * @rmtoll CRRCR HSI48CAL LL_RCC_HSI48_GetCalibration
  1810. * @retval A value between 0 and 1023 (0x3FF)
  1811. */
  1812. __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void)
  1813. {
  1814. return (uint32_t)(READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48CAL) >> RCC_CRRCR_HSI48CAL_Pos);
  1815. }
  1816. /**
  1817. * @}
  1818. */
  1819. #if defined(RCC_CR_D1CKRDY)
  1820. /** @defgroup RCC_LL_EF_D1CLK D1CKREADY
  1821. * @{
  1822. */
  1823. /**
  1824. * @brief Check if D1 clock is ready
  1825. * @rmtoll CR D1CKRDY LL_RCC_D1CK_IsReady
  1826. * @retval State of bit (1 or 0).
  1827. */
  1828. __STATIC_INLINE uint32_t LL_RCC_D1CK_IsReady(void)
  1829. {
  1830. return ((READ_BIT(RCC->CR, RCC_CR_D1CKRDY) == (RCC_CR_D1CKRDY))?1UL:0UL);
  1831. }
  1832. /**
  1833. * @}
  1834. */
  1835. #else
  1836. /** @defgroup RCC_LL_EF_CPUCLK CPUCKREADY
  1837. * @{
  1838. */
  1839. /**
  1840. * @brief Check if CPU clock is ready
  1841. * @rmtoll CR CPUCKRDY LL_RCC_CPUCK_IsReady
  1842. * @retval State of bit (1 or 0).
  1843. */
  1844. __STATIC_INLINE uint32_t LL_RCC_CPUCK_IsReady(void)
  1845. {
  1846. return ((READ_BIT(RCC->CR, RCC_CR_CPUCKRDY) == (RCC_CR_CPUCKRDY))?1UL:0UL);
  1847. }
  1848. /* alias */
  1849. #define LL_RCC_D1CK_IsReady LL_RCC_CPUCK_IsReady
  1850. /**
  1851. * @}
  1852. */
  1853. #endif /* RCC_CR_D1CKRDY */
  1854. #if defined(RCC_CR_D2CKRDY)
  1855. /** @defgroup RCC_LL_EF_D2CLK D2CKREADY
  1856. * @{
  1857. */
  1858. /**
  1859. * @brief Check if D2 clock is ready
  1860. * @rmtoll CR D2CKRDY LL_RCC_D2CK_IsReady
  1861. * @retval State of bit (1 or 0).
  1862. */
  1863. __STATIC_INLINE uint32_t LL_RCC_D2CK_IsReady(void)
  1864. {
  1865. return ((READ_BIT(RCC->CR, RCC_CR_D2CKRDY) == (RCC_CR_D2CKRDY))?1UL:0UL);
  1866. }
  1867. /**
  1868. * @}
  1869. */
  1870. #else
  1871. /** @defgroup RCC_LL_EF_CDCLK CDCKREADY
  1872. * @{
  1873. */
  1874. /**
  1875. * @brief Check if CD clock is ready
  1876. * @rmtoll CR CDCKRDY LL_RCC_CDCK_IsReady
  1877. * @retval State of bit (1 or 0).
  1878. */
  1879. __STATIC_INLINE uint32_t LL_RCC_CDCK_IsReady(void)
  1880. {
  1881. return ((READ_BIT(RCC->CR, RCC_CR_CDCKRDY) == (RCC_CR_CDCKRDY))?1UL:0UL);
  1882. }
  1883. #define LL_RCC_D2CK_IsReady LL_RCC_CDCK_IsReady
  1884. /**
  1885. * @}
  1886. */
  1887. #endif /* RCC_CR_D2CKRDY */
  1888. /** @defgroup RCC_LL_EF_SYSTEM_WIDE_RESET RESET
  1889. * @{
  1890. */
  1891. #if defined(RCC_GCR_WW1RSC)
  1892. /**
  1893. * @brief Enable system wide reset for Window Watch Dog 1
  1894. * @rmtoll GCR WW1RSC LL_RCC_WWDG1_EnableSystemReset
  1895. * @retval None.
  1896. */
  1897. __STATIC_INLINE void LL_RCC_WWDG1_EnableSystemReset(void)
  1898. {
  1899. SET_BIT(RCC->GCR, RCC_GCR_WW1RSC);
  1900. }
  1901. /**
  1902. * @brief Check if Window Watch Dog 1 reset is system wide
  1903. * @rmtoll GCR WW1RSC LL_RCC_WWDG1_IsSystemReset
  1904. * @retval State of bit (1 or 0).
  1905. */
  1906. __STATIC_INLINE uint32_t LL_RCC_WWDG1_IsSystemReset(void)
  1907. {
  1908. return ((READ_BIT(RCC->GCR, RCC_GCR_WW1RSC) == RCC_GCR_WW1RSC)?1UL:0UL);
  1909. }
  1910. #endif /* RCC_GCR_WW1RSC */
  1911. #if defined(DUAL_CORE)
  1912. /**
  1913. * @brief Enable system wide reset for Window Watch Dog 2
  1914. * @rmtoll GCR WW1RSC LL_RCC_WWDG2_EnableSystemReset
  1915. * @retval None.
  1916. */
  1917. __STATIC_INLINE void LL_RCC_WWDG2_EnableSystemReset(void)
  1918. {
  1919. SET_BIT(RCC->GCR, RCC_GCR_WW2RSC);
  1920. }
  1921. /**
  1922. * @brief Check if Window Watch Dog 2 reset is system wide
  1923. * @rmtoll GCR WW2RSC LL_RCC_WWDG2_IsSystemReset
  1924. * @retval State of bit (1 or 0).
  1925. */
  1926. __STATIC_INLINE uint32_t LL_RCC_WWDG2_IsSystemReset(void)
  1927. {
  1928. return ((READ_BIT(RCC->GCR, RCC_GCR_WW2RSC) == RCC_GCR_WW2RSC)?1UL:0UL);
  1929. }
  1930. #endif /*DUAL_CORE*/
  1931. /**
  1932. * @}
  1933. */
  1934. #if defined(DUAL_CORE)
  1935. /** @defgroup RCC_LL_EF_BOOT_CPU CPU
  1936. * @{
  1937. */
  1938. /**
  1939. * @brief Force CM4 boot (if hold by option byte BCM4 = 0)
  1940. * @rmtoll GCR BOOT_C2 LL_RCC_ForceCM4Boot
  1941. * @retval None.
  1942. */
  1943. __STATIC_INLINE void LL_RCC_ForceCM4Boot(void)
  1944. {
  1945. SET_BIT(RCC->GCR, RCC_GCR_BOOT_C2);
  1946. }
  1947. /**
  1948. * @brief Check if CM4 boot is forced
  1949. * @rmtoll GCR BOOT_C2 LL_RCC_IsCM4BootForced
  1950. * @retval State of bit (1 or 0).
  1951. */
  1952. __STATIC_INLINE uint32_t LL_RCC_IsCM4BootForced(void)
  1953. {
  1954. return ((READ_BIT(RCC->GCR, RCC_GCR_BOOT_C2) == RCC_GCR_BOOT_C2)?1UL:0UL);
  1955. }
  1956. /**
  1957. * @brief Force CM7 boot (if hold by option byte BCM7 = 0)
  1958. * @rmtoll GCR BOOT_C1 LL_RCC_ForceCM7Boot
  1959. * @retval None.
  1960. */
  1961. __STATIC_INLINE void LL_RCC_ForceCM7Boot(void)
  1962. {
  1963. SET_BIT(RCC->GCR, RCC_GCR_BOOT_C1);
  1964. }
  1965. /**
  1966. * @brief Check if CM7 boot is forced
  1967. * @rmtoll GCR BOOT_C1 LL_RCC_IsCM7BootForced
  1968. * @retval State of bit (1 or 0).
  1969. */
  1970. __STATIC_INLINE uint32_t LL_RCC_IsCM7BootForced(void)
  1971. {
  1972. return ((READ_BIT(RCC->GCR, RCC_GCR_BOOT_C1) == RCC_GCR_BOOT_C1)?1UL:0UL);
  1973. }
  1974. /**
  1975. * @}
  1976. */
  1977. #endif /*DUAL_CORE*/
  1978. /** @defgroup RCC_LL_EF_LSE LSE
  1979. * @{
  1980. */
  1981. /**
  1982. * @brief Enable the Clock Security System on LSE.
  1983. * @note Once LSE Clock Security System is enabled it cannot be changed anymore unless
  1984. * a clock failure is detected.
  1985. * @rmtoll BDCR LSECSSON LL_RCC_LSE_EnableCSS
  1986. * @retval None
  1987. */
  1988. __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
  1989. {
  1990. SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
  1991. }
  1992. /**
  1993. * @brief Check if LSE failure is detected by Clock Security System
  1994. * @rmtoll BDCR LSECSSD LL_RCC_LSE_IsFailureDetected
  1995. * @retval State of bit (1 or 0).
  1996. */
  1997. __STATIC_INLINE uint32_t LL_RCC_LSE_IsFailureDetected(void)
  1998. {
  1999. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD))?1UL:0UL);
  2000. }
  2001. /**
  2002. * @brief Enable Low Speed External (LSE) crystal.
  2003. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  2004. * @retval None
  2005. */
  2006. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  2007. {
  2008. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  2009. }
  2010. /**
  2011. * @brief Disable Low Speed External (LSE) crystal.
  2012. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  2013. * @retval None
  2014. */
  2015. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  2016. {
  2017. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  2018. }
  2019. /**
  2020. * @brief Enable external clock source (LSE bypass).
  2021. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  2022. * @retval None
  2023. */
  2024. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  2025. {
  2026. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  2027. }
  2028. /**
  2029. * @brief Disable external clock source (LSE bypass).
  2030. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  2031. * @retval None
  2032. */
  2033. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  2034. {
  2035. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  2036. }
  2037. #if defined(RCC_BDCR_LSEEXT)
  2038. /**
  2039. * @brief Enable Low-speed external DIGITAL clock type in Bypass mode (not to be used if RTC is active).
  2040. * @note The external clock must be enabled with the LSEON bit, to be used by the device.
  2041. * The LSEEXT bit can be written only if the LSE oscillator is disabled.
  2042. * @rmtoll BDCR LSEEXT LL_RCC_LSE_SelectDigitalClock
  2043. * @retval None
  2044. */
  2045. __STATIC_INLINE void LL_RCC_LSE_SelectDigitalClock(void)
  2046. {
  2047. SET_BIT(RCC->BDCR, RCC_BDCR_LSEEXT);
  2048. }
  2049. /**
  2050. * @brief Enable Low-speed external ANALOG clock type in Bypass mode (default after Backup domain reset).
  2051. * @note The external clock must be enabled with the LSEON bit, to be used by the device.
  2052. * The LSEEXT bit can be written only if the LSE oscillator is disabled.
  2053. * @rmtoll BDCR LSEEXT LL_RCC_LSE_SelectAnalogClock
  2054. * @retval None
  2055. */
  2056. __STATIC_INLINE void LL_RCC_LSE_SelectAnalogClock(void)
  2057. {
  2058. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEEXT);
  2059. }
  2060. #endif /* RCC_BDCR_LSEEXT */
  2061. /**
  2062. * @brief Set LSE oscillator drive capability
  2063. * @note The oscillator is in Xtal mode when it is not in bypass mode.
  2064. * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability
  2065. * @param LSEDrive This parameter can be one of the following values:
  2066. * @arg @ref LL_RCC_LSEDRIVE_LOW
  2067. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  2068. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  2069. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  2070. * @retval None
  2071. */
  2072. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  2073. {
  2074. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
  2075. }
  2076. /**
  2077. * @brief Get LSE oscillator drive capability
  2078. * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability
  2079. * @retval Returned value can be one of the following values:
  2080. * @arg @ref LL_RCC_LSEDRIVE_LOW
  2081. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  2082. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  2083. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  2084. */
  2085. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  2086. {
  2087. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
  2088. }
  2089. /**
  2090. * @brief Check if LSE oscillator Ready
  2091. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  2092. * @retval State of bit (1 or 0).
  2093. */
  2094. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  2095. {
  2096. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY))?1UL:0UL);
  2097. }
  2098. /**
  2099. * @}
  2100. */
  2101. /** @defgroup RCC_LL_EF_LSI LSI
  2102. * @{
  2103. */
  2104. /**
  2105. * @brief Enable LSI Oscillator
  2106. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  2107. * @retval None
  2108. */
  2109. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  2110. {
  2111. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  2112. }
  2113. /**
  2114. * @brief Disable LSI Oscillator
  2115. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  2116. * @retval None
  2117. */
  2118. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  2119. {
  2120. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  2121. }
  2122. /**
  2123. * @brief Check if LSI is Ready
  2124. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  2125. * @retval State of bit (1 or 0).
  2126. */
  2127. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  2128. {
  2129. return ((READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY))?1UL:0UL);
  2130. }
  2131. /**
  2132. * @}
  2133. */
  2134. /** @defgroup RCC_LL_EF_System System
  2135. * @{
  2136. */
  2137. /**
  2138. * @brief Configure the system clock source
  2139. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  2140. * @param Source This parameter can be one of the following values:
  2141. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  2142. * @arg @ref LL_RCC_SYS_CLKSOURCE_CSI
  2143. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  2144. * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL1
  2145. * @retval None
  2146. */
  2147. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  2148. {
  2149. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  2150. }
  2151. /**
  2152. * @brief Get the system clock source
  2153. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  2154. * @retval Returned value can be one of the following values:
  2155. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  2156. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_CSI
  2157. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  2158. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL1
  2159. */
  2160. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  2161. {
  2162. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  2163. }
  2164. /**
  2165. * @brief Configure the system wakeup clock source
  2166. * @rmtoll CFGR STOPWUCK LL_RCC_SetSysWakeUpClkSource
  2167. * @param Source This parameter can be one of the following values:
  2168. * @arg @ref LL_RCC_SYSWAKEUP_CLKSOURCE_HSI
  2169. * @arg @ref LL_RCC_SYSWAKEUP_CLKSOURCE_CSI
  2170. * @retval None
  2171. */
  2172. __STATIC_INLINE void LL_RCC_SetSysWakeUpClkSource(uint32_t Source)
  2173. {
  2174. MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPWUCK, Source);
  2175. }
  2176. /**
  2177. * @brief Get the system wakeup clock source
  2178. * @rmtoll CFGR STOPWUCK LL_RCC_GetSysWakeUpClkSource
  2179. * @retval Returned value can be one of the following values:
  2180. * @arg @ref LL_RCC_SYSWAKEUP_CLKSOURCE_HSI
  2181. * @arg @ref LL_RCC_SYSWAKEUP_CLKSOURCE_CSI
  2182. */
  2183. __STATIC_INLINE uint32_t LL_RCC_GetSysWakeUpClkSource(void)
  2184. {
  2185. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_STOPWUCK));
  2186. }
  2187. /**
  2188. * @brief Configure the kernel wakeup clock source
  2189. * @rmtoll CFGR STOPKERWUCK LL_RCC_SetKerWakeUpClkSource
  2190. * @param Source This parameter can be one of the following values:
  2191. * @arg @ref LL_RCC_KERWAKEUP_CLKSOURCE_HSI
  2192. * @arg @ref LL_RCC_KERWAKEUP_CLKSOURCE_CSI
  2193. * @retval None
  2194. */
  2195. __STATIC_INLINE void LL_RCC_SetKerWakeUpClkSource(uint32_t Source)
  2196. {
  2197. MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPKERWUCK, Source);
  2198. }
  2199. /**
  2200. * @brief Get the kernel wakeup clock source
  2201. * @rmtoll CFGR STOPKERWUCK LL_RCC_GetKerWakeUpClkSource
  2202. * @retval Returned value can be one of the following values:
  2203. * @arg @ref LL_RCC_KERWAKEUP_CLKSOURCE_HSI
  2204. * @arg @ref LL_RCC_KERWAKEUP_CLKSOURCE_CSI
  2205. */
  2206. __STATIC_INLINE uint32_t LL_RCC_GetKerWakeUpClkSource(void)
  2207. {
  2208. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_STOPKERWUCK));
  2209. }
  2210. /**
  2211. * @brief Set System prescaler
  2212. * @rmtoll D1CFGR/CDCFGR1 D1CPRE/CDCPRE LL_RCC_SetSysPrescaler
  2213. * @param Prescaler This parameter can be one of the following values:
  2214. * @arg @ref LL_RCC_SYSCLK_DIV_1
  2215. * @arg @ref LL_RCC_SYSCLK_DIV_2
  2216. * @arg @ref LL_RCC_SYSCLK_DIV_4
  2217. * @arg @ref LL_RCC_SYSCLK_DIV_8
  2218. * @arg @ref LL_RCC_SYSCLK_DIV_16
  2219. * @arg @ref LL_RCC_SYSCLK_DIV_64
  2220. * @arg @ref LL_RCC_SYSCLK_DIV_128
  2221. * @arg @ref LL_RCC_SYSCLK_DIV_256
  2222. * @arg @ref LL_RCC_SYSCLK_DIV_512
  2223. * @retval None
  2224. */
  2225. __STATIC_INLINE void LL_RCC_SetSysPrescaler(uint32_t Prescaler)
  2226. {
  2227. #if defined(RCC_D1CFGR_D1CPRE)
  2228. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, Prescaler);
  2229. #else
  2230. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, Prescaler);
  2231. #endif /* RCC_D1CFGR_D1CPRE */
  2232. }
  2233. /**
  2234. * @brief Set AHB prescaler
  2235. * @rmtoll D1CFGR/CDCFGR1 HPRE LL_RCC_SetAHBPrescaler
  2236. * @param Prescaler This parameter can be one of the following values:
  2237. * @arg @ref LL_RCC_AHB_DIV_1
  2238. * @arg @ref LL_RCC_AHB_DIV_2
  2239. * @arg @ref LL_RCC_AHB_DIV_4
  2240. * @arg @ref LL_RCC_AHB_DIV_8
  2241. * @arg @ref LL_RCC_AHB_DIV_16
  2242. * @arg @ref LL_RCC_AHB_DIV_64
  2243. * @arg @ref LL_RCC_AHB_DIV_128
  2244. * @arg @ref LL_RCC_AHB_DIV_256
  2245. * @arg @ref LL_RCC_AHB_DIV_512
  2246. * @retval None
  2247. */
  2248. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  2249. {
  2250. #if defined(RCC_D1CFGR_HPRE)
  2251. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, Prescaler);
  2252. #else
  2253. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_HPRE, Prescaler);
  2254. #endif /* RCC_D1CFGR_HPRE */
  2255. }
  2256. /**
  2257. * @brief Set APB1 prescaler
  2258. * @rmtoll D2CFGR/CDCFGR2 D2PPRE1/CDPPRE1 LL_RCC_SetAPB1Prescaler
  2259. * @param Prescaler This parameter can be one of the following values:
  2260. * @arg @ref LL_RCC_APB1_DIV_1
  2261. * @arg @ref LL_RCC_APB1_DIV_2
  2262. * @arg @ref LL_RCC_APB1_DIV_4
  2263. * @arg @ref LL_RCC_APB1_DIV_8
  2264. * @arg @ref LL_RCC_APB1_DIV_16
  2265. * @retval None
  2266. */
  2267. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  2268. {
  2269. #if defined(RCC_D2CFGR_D2PPRE1)
  2270. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, Prescaler);
  2271. #else
  2272. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, Prescaler);
  2273. #endif /* RCC_D2CFGR_D2PPRE1 */
  2274. }
  2275. /**
  2276. * @brief Set APB2 prescaler
  2277. * @rmtoll D2CFGR/CDCFGR2 D2PPRE2/CDPPRE2 LL_RCC_SetAPB2Prescaler
  2278. * @param Prescaler This parameter can be one of the following values:
  2279. * @arg @ref LL_RCC_APB2_DIV_1
  2280. * @arg @ref LL_RCC_APB2_DIV_2
  2281. * @arg @ref LL_RCC_APB2_DIV_4
  2282. * @arg @ref LL_RCC_APB2_DIV_8
  2283. * @arg @ref LL_RCC_APB2_DIV_16
  2284. * @retval None
  2285. */
  2286. __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
  2287. {
  2288. #if defined(RCC_D2CFGR_D2PPRE2)
  2289. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, Prescaler);
  2290. #else
  2291. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE2, Prescaler);
  2292. #endif /* RCC_D2CFGR_D2PPRE2 */
  2293. }
  2294. /**
  2295. * @brief Set APB3 prescaler
  2296. * @rmtoll D1CFGR/CDCFGR1 D1PPRE/CDPPRE LL_RCC_SetAPB3Prescaler
  2297. * @param Prescaler This parameter can be one of the following values:
  2298. * @arg @ref LL_RCC_APB3_DIV_1
  2299. * @arg @ref LL_RCC_APB3_DIV_2
  2300. * @arg @ref LL_RCC_APB3_DIV_4
  2301. * @arg @ref LL_RCC_APB3_DIV_8
  2302. * @arg @ref LL_RCC_APB3_DIV_16
  2303. * @retval None
  2304. */
  2305. __STATIC_INLINE void LL_RCC_SetAPB3Prescaler(uint32_t Prescaler)
  2306. {
  2307. #if defined(RCC_D1CFGR_D1PPRE)
  2308. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, Prescaler);
  2309. #else
  2310. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDPPRE, Prescaler);
  2311. #endif /* RCC_D1CFGR_D1PPRE */
  2312. }
  2313. /**
  2314. * @brief Set APB4 prescaler
  2315. * @rmtoll D3CFGR/SRDCFGR D3PPRE/SRDPPRE LL_RCC_SetAPB4Prescaler
  2316. * @param Prescaler This parameter can be one of the following values:
  2317. * @arg @ref LL_RCC_APB4_DIV_1
  2318. * @arg @ref LL_RCC_APB4_DIV_2
  2319. * @arg @ref LL_RCC_APB4_DIV_4
  2320. * @arg @ref LL_RCC_APB4_DIV_8
  2321. * @arg @ref LL_RCC_APB4_DIV_16
  2322. * @retval None
  2323. */
  2324. __STATIC_INLINE void LL_RCC_SetAPB4Prescaler(uint32_t Prescaler)
  2325. {
  2326. #if defined(RCC_D3CFGR_D3PPRE)
  2327. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, Prescaler);
  2328. #else
  2329. MODIFY_REG(RCC->SRDCFGR, RCC_SRDCFGR_SRDPPRE, Prescaler);
  2330. #endif /* RCC_D3CFGR_D3PPRE */
  2331. }
  2332. /**
  2333. * @brief Get System prescaler
  2334. * @rmtoll D1CFGR/CDCFGR1 D1CPRE/CDCPRE LL_RCC_GetSysPrescaler
  2335. * @retval Returned value can be one of the following values:
  2336. * @arg @ref LL_RCC_SYSCLK_DIV_1
  2337. * @arg @ref LL_RCC_SYSCLK_DIV_2
  2338. * @arg @ref LL_RCC_SYSCLK_DIV_4
  2339. * @arg @ref LL_RCC_SYSCLK_DIV_8
  2340. * @arg @ref LL_RCC_SYSCLK_DIV_16
  2341. * @arg @ref LL_RCC_SYSCLK_DIV_64
  2342. * @arg @ref LL_RCC_SYSCLK_DIV_128
  2343. * @arg @ref LL_RCC_SYSCLK_DIV_256
  2344. * @arg @ref LL_RCC_SYSCLK_DIV_512
  2345. */
  2346. __STATIC_INLINE uint32_t LL_RCC_GetSysPrescaler(void)
  2347. {
  2348. #if defined(RCC_D1CFGR_D1CPRE)
  2349. return (uint32_t)(READ_BIT(RCC->D1CFGR, RCC_D1CFGR_D1CPRE));
  2350. #else
  2351. return (uint32_t)(READ_BIT(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE));
  2352. #endif /* RCC_D1CFGR_D1CPRE */
  2353. }
  2354. /**
  2355. * @brief Get AHB prescaler
  2356. * @rmtoll D1CFGR/ CDCFGR1 HPRE LL_RCC_GetAHBPrescaler
  2357. * @retval Returned value can be one of the following values:
  2358. * @arg @ref LL_RCC_AHB_DIV_1
  2359. * @arg @ref LL_RCC_AHB_DIV_2
  2360. * @arg @ref LL_RCC_AHB_DIV_4
  2361. * @arg @ref LL_RCC_AHB_DIV_8
  2362. * @arg @ref LL_RCC_AHB_DIV_16
  2363. * @arg @ref LL_RCC_AHB_DIV_64
  2364. * @arg @ref LL_RCC_AHB_DIV_128
  2365. * @arg @ref LL_RCC_AHB_DIV_256
  2366. * @arg @ref LL_RCC_AHB_DIV_512
  2367. */
  2368. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  2369. {
  2370. #if defined(RCC_D1CFGR_HPRE)
  2371. return (uint32_t)(READ_BIT(RCC->D1CFGR, RCC_D1CFGR_HPRE));
  2372. #else
  2373. return (uint32_t)(READ_BIT(RCC->CDCFGR1, RCC_CDCFGR1_HPRE));
  2374. #endif /* RCC_D1CFGR_HPRE */
  2375. }
  2376. /**
  2377. * @brief Get APB1 prescaler
  2378. * @rmtoll D2CFGR/CDCFGR2 D2PPRE1/CDPPRE1 LL_RCC_GetAPB1Prescaler
  2379. * @retval Returned value can be one of the following values:
  2380. * @arg @ref LL_RCC_APB1_DIV_1
  2381. * @arg @ref LL_RCC_APB1_DIV_2
  2382. * @arg @ref LL_RCC_APB1_DIV_4
  2383. * @arg @ref LL_RCC_APB1_DIV_8
  2384. * @arg @ref LL_RCC_APB1_DIV_16
  2385. */
  2386. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  2387. {
  2388. #if defined(RCC_D2CFGR_D2PPRE1)
  2389. return (uint32_t)(READ_BIT(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1));
  2390. #else
  2391. return (uint32_t)(READ_BIT(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1));
  2392. #endif /* RCC_D2CFGR_D2PPRE1 */
  2393. }
  2394. /**
  2395. * @brief Get APB2 prescaler
  2396. * @rmtoll D2CFGR/CDCFGR2 D2PPRE2/CDPPRE2 LL_RCC_GetAPB2Prescaler
  2397. * @retval Returned value can be one of the following values:
  2398. * @arg @ref LL_RCC_APB2_DIV_1
  2399. * @arg @ref LL_RCC_APB2_DIV_2
  2400. * @arg @ref LL_RCC_APB2_DIV_4
  2401. * @arg @ref LL_RCC_APB2_DIV_8
  2402. * @arg @ref LL_RCC_APB2_DIV_16
  2403. */
  2404. __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
  2405. {
  2406. #if defined(RCC_D2CFGR_D2PPRE2)
  2407. return (uint32_t)(READ_BIT(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2));
  2408. #else
  2409. return (uint32_t)(READ_BIT(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE2));
  2410. #endif /* RCC_D2CFGR_D2PPRE2 */
  2411. }
  2412. /**
  2413. * @brief Get APB3 prescaler
  2414. * @rmtoll D1CFGR/CDCFGR1 D1PPRE/CDPPRE LL_RCC_GetAPB3Prescaler
  2415. * @retval Returned value can be one of the following values:
  2416. * @arg @ref LL_RCC_APB3_DIV_1
  2417. * @arg @ref LL_RCC_APB3_DIV_2
  2418. * @arg @ref LL_RCC_APB3_DIV_4
  2419. * @arg @ref LL_RCC_APB3_DIV_8
  2420. * @arg @ref LL_RCC_APB3_DIV_16
  2421. */
  2422. __STATIC_INLINE uint32_t LL_RCC_GetAPB3Prescaler(void)
  2423. {
  2424. #if defined(RCC_D1CFGR_D1PPRE)
  2425. return (uint32_t)(READ_BIT(RCC->D1CFGR, RCC_D1CFGR_D1PPRE));
  2426. #else
  2427. return (uint32_t)(READ_BIT(RCC->CDCFGR1, RCC_CDCFGR1_CDPPRE));
  2428. #endif /* RCC_D1CFGR_D1PPRE */
  2429. }
  2430. /**
  2431. * @brief Get APB4 prescaler
  2432. * @rmtoll D3CFGR/SRDCFGR D3PPRE/SRDPPRE LL_RCC_GetAPB4Prescaler
  2433. * @retval Returned value can be one of the following values:
  2434. * @arg @ref LL_RCC_APB4_DIV_1
  2435. * @arg @ref LL_RCC_APB4_DIV_2
  2436. * @arg @ref LL_RCC_APB4_DIV_4
  2437. * @arg @ref LL_RCC_APB4_DIV_8
  2438. * @arg @ref LL_RCC_APB4_DIV_16
  2439. */
  2440. __STATIC_INLINE uint32_t LL_RCC_GetAPB4Prescaler(void)
  2441. {
  2442. #if defined(RCC_D3CFGR_D3PPRE)
  2443. return (uint32_t)(READ_BIT(RCC->D3CFGR, RCC_D3CFGR_D3PPRE));
  2444. #else
  2445. return (uint32_t)(READ_BIT(RCC->SRDCFGR, RCC_SRDCFGR_SRDPPRE));
  2446. #endif /* RCC_D3CFGR_D3PPRE */
  2447. }
  2448. /**
  2449. * @}
  2450. */
  2451. /** @defgroup RCC_LL_EF_MCO MCO
  2452. * @{
  2453. */
  2454. /**
  2455. * @brief Configure MCOx
  2456. * @rmtoll CFGR MCO1 LL_RCC_ConfigMCO\n
  2457. * CFGR MCO1PRE LL_RCC_ConfigMCO\n
  2458. * CFGR MCO2 LL_RCC_ConfigMCO\n
  2459. * CFGR MCO2PRE LL_RCC_ConfigMCO
  2460. * @param MCOxSource This parameter can be one of the following values:
  2461. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  2462. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  2463. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  2464. * @arg @ref LL_RCC_MCO1SOURCE_PLL1QCLK
  2465. * @arg @ref LL_RCC_MCO1SOURCE_HSI48
  2466. * @arg @ref LL_RCC_MCO2SOURCE_SYSCLK
  2467. * @arg @ref LL_RCC_MCO2SOURCE_PLL2PCLK
  2468. * @arg @ref LL_RCC_MCO2SOURCE_HSE
  2469. * @arg @ref LL_RCC_MCO2SOURCE_PLL1PCLK
  2470. * @arg @ref LL_RCC_MCO2SOURCE_CSI
  2471. * @arg @ref LL_RCC_MCO2SOURCE_LSI
  2472. * @param MCOxPrescaler This parameter can be one of the following values:
  2473. * @arg @ref LL_RCC_MCO1_DIV_1
  2474. * @arg @ref LL_RCC_MCO1_DIV_2
  2475. * @arg @ref LL_RCC_MCO1_DIV_3
  2476. * @arg @ref LL_RCC_MCO1_DIV_4
  2477. * @arg @ref LL_RCC_MCO1_DIV_5
  2478. * @arg @ref LL_RCC_MCO1_DIV_6
  2479. * @arg @ref LL_RCC_MCO1_DIV_7
  2480. * @arg @ref LL_RCC_MCO1_DIV_8
  2481. * @arg @ref LL_RCC_MCO1_DIV_9
  2482. * @arg @ref LL_RCC_MCO1_DIV_10
  2483. * @arg @ref LL_RCC_MCO1_DIV_11
  2484. * @arg @ref LL_RCC_MCO1_DIV_12
  2485. * @arg @ref LL_RCC_MCO1_DIV_13
  2486. * @arg @ref LL_RCC_MCO1_DIV_14
  2487. * @arg @ref LL_RCC_MCO1_DIV_15
  2488. * @arg @ref LL_RCC_MCO2_DIV_1
  2489. * @arg @ref LL_RCC_MCO2_DIV_2
  2490. * @arg @ref LL_RCC_MCO2_DIV_3
  2491. * @arg @ref LL_RCC_MCO2_DIV_4
  2492. * @arg @ref LL_RCC_MCO2_DIV_5
  2493. * @arg @ref LL_RCC_MCO2_DIV_6
  2494. * @arg @ref LL_RCC_MCO2_DIV_7
  2495. * @arg @ref LL_RCC_MCO2_DIV_8
  2496. * @arg @ref LL_RCC_MCO2_DIV_9
  2497. * @arg @ref LL_RCC_MCO2_DIV_10
  2498. * @arg @ref LL_RCC_MCO2_DIV_11
  2499. * @arg @ref LL_RCC_MCO2_DIV_12
  2500. * @arg @ref LL_RCC_MCO2_DIV_13
  2501. * @arg @ref LL_RCC_MCO2_DIV_14
  2502. * @arg @ref LL_RCC_MCO2_DIV_15
  2503. * @retval None
  2504. */
  2505. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  2506. {
  2507. MODIFY_REG(RCC->CFGR, (MCOxSource << 16U) | (MCOxPrescaler << 16U), (MCOxSource & 0xFFFF0000U) | (MCOxPrescaler & 0xFFFF0000U));
  2508. }
  2509. /**
  2510. * @}
  2511. */
  2512. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  2513. * @{
  2514. */
  2515. /**
  2516. * @brief Configure periph clock source
  2517. * @rmtoll D2CCIP1R/CDCCIP1R * LL_RCC_SetClockSource\n
  2518. * D2CCIP2R/CDCCIP2R * LL_RCC_SetClockSource\n
  2519. * D3CCIPR/SRDCCIPR * LL_RCC_SetClockSource
  2520. * @param ClkSource This parameter can be one of the following values:
  2521. * @arg @ref LL_RCC_USART16_CLKSOURCE_PCLK2
  2522. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL2Q
  2523. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL3Q
  2524. * @arg @ref LL_RCC_USART16_CLKSOURCE_HSI
  2525. * @arg @ref LL_RCC_USART16_CLKSOURCE_CSI
  2526. * @arg @ref LL_RCC_USART16_CLKSOURCE_LSE
  2527. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PCLK1
  2528. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL2Q
  2529. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL3Q
  2530. * @arg @ref LL_RCC_USART234578_CLKSOURCE_HSI
  2531. * @arg @ref LL_RCC_USART234578_CLKSOURCE_CSI
  2532. * @arg @ref LL_RCC_USART234578_CLKSOURCE_LSE
  2533. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PCLK1
  2534. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PLL3R
  2535. * @arg @ref LL_RCC_I2C123_CLKSOURCE_HSI
  2536. * @arg @ref LL_RCC_I2C123_CLKSOURCE_CSI
  2537. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK4
  2538. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PLL3R
  2539. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI
  2540. * @arg @ref LL_RCC_I2C4_CLKSOURCE_CSI
  2541. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  2542. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL2P
  2543. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL3R
  2544. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  2545. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  2546. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_CLKP
  2547. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK4
  2548. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL2P
  2549. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL3R
  2550. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
  2551. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
  2552. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_CLKP
  2553. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PCLK4
  2554. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL2P
  2555. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL3R
  2556. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSE
  2557. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSI
  2558. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_CLKP
  2559. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q
  2560. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL2P
  2561. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL3P
  2562. * @arg @ref LL_RCC_SAI1_CLKSOURCE_I2S_CKIN
  2563. * @arg @ref LL_RCC_SAI1_CLKSOURCE_CLKP
  2564. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL1Q
  2565. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL2P
  2566. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL3P
  2567. * @arg @ref LL_RCC_SAI23_CLKSOURCE_I2S_CKIN
  2568. * @arg @ref LL_RCC_SAI23_CLKSOURCE_CLKP
  2569. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL1Q (*)
  2570. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL2P (*)
  2571. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL3P (*)
  2572. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_I2S_CKIN (*)
  2573. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL1Q (*)
  2574. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL2P (*)
  2575. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL3P (*)
  2576. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_I2S_CKIN (*)
  2577. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_CLKP (*)
  2578. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_SPDIF (*)
  2579. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL1Q (*)
  2580. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL2P (*)
  2581. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL3P (*)
  2582. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_I2S_CKIN (*)
  2583. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_CLKP (*)
  2584. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL1Q (*)
  2585. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL2P (*)
  2586. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL3P (*)
  2587. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_I2S_CKIN (*)
  2588. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_CLKP (*)
  2589. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_SPDIF (*)
  2590. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL1Q
  2591. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL2P
  2592. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL3P
  2593. * @arg @ref LL_RCC_SPI123_CLKSOURCE_I2S_CKIN
  2594. * @arg @ref LL_RCC_SPI123_CLKSOURCE_CLKP
  2595. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PCLK2
  2596. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL2Q
  2597. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL3Q
  2598. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSI
  2599. * @arg @ref LL_RCC_SPI45_CLKSOURCE_CSI
  2600. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSE
  2601. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PCLK4
  2602. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL2Q
  2603. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL3Q
  2604. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSI
  2605. * @arg @ref LL_RCC_SPI6_CLKSOURCE_CSI
  2606. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSE
  2607. * @arg @ref LL_RCC_SPI6_CLKSOURCE_I2S_CKIN (*)
  2608. *
  2609. * (*) value not defined in all devices.
  2610. * @retval None
  2611. */
  2612. __STATIC_INLINE void LL_RCC_SetClockSource(uint32_t ClkSource)
  2613. {
  2614. #if defined(RCC_D1CCIPR_FMCSEL)
  2615. register uint32_t * pReg = (uint32_t *)((uint32_t)&RCC->D1CCIPR + LL_CLKSOURCE_REG(ClkSource));
  2616. #else
  2617. register uint32_t * pReg = (uint32_t *)((uint32_t)&RCC->CDCCIPR + LL_CLKSOURCE_REG(ClkSource));
  2618. #endif /* */
  2619. MODIFY_REG(*pReg, LL_CLKSOURCE_MASK(ClkSource), LL_CLKSOURCE_CONFIG(ClkSource));
  2620. }
  2621. /**
  2622. * @brief Configure USARTx clock source
  2623. * @rmtoll D2CCIP2R / D2CCIP2R USART16SEL LL_RCC_SetUSARTClockSource\n
  2624. * D2CCIP2R / D2CCIP2R USART28SEL LL_RCC_SetUSARTClockSource
  2625. * @param ClkSource This parameter can be one of the following values:
  2626. * @arg @ref LL_RCC_USART16_CLKSOURCE_PCLK2
  2627. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL2Q
  2628. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL3Q
  2629. * @arg @ref LL_RCC_USART16_CLKSOURCE_HSI
  2630. * @arg @ref LL_RCC_USART16_CLKSOURCE_CSI
  2631. * @arg @ref LL_RCC_USART16_CLKSOURCE_LSE
  2632. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PCLK1
  2633. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL2Q
  2634. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL3Q
  2635. * @arg @ref LL_RCC_USART234578_CLKSOURCE_HSI
  2636. * @arg @ref LL_RCC_USART234578_CLKSOURCE_CSI
  2637. * @arg @ref LL_RCC_USART234578_CLKSOURCE_LSE
  2638. * @retval None
  2639. */
  2640. __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t ClkSource)
  2641. {
  2642. LL_RCC_SetClockSource(ClkSource);
  2643. }
  2644. /**
  2645. * @brief Configure LPUARTx clock source
  2646. * @rmtoll D3CCIPR / SRDCCIPR LPUART1SEL LL_RCC_SetLPUARTClockSource
  2647. * @param ClkSource This parameter can be one of the following values:
  2648. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK4
  2649. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PLL2Q
  2650. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PLL3Q
  2651. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
  2652. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_CSI
  2653. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
  2654. * @retval None
  2655. */
  2656. __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t ClkSource)
  2657. {
  2658. #if defined(RCC_D3CCIPR_LPUART1SEL)
  2659. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL, ClkSource);
  2660. #else
  2661. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL, ClkSource);
  2662. #endif /* RCC_D3CCIPR_LPUART1SEL */
  2663. }
  2664. /**
  2665. * @brief Configure I2Cx clock source
  2666. * @rmtoll D2CCIP2R / CDCCIP2R I2C123SEL LL_RCC_SetI2CClockSource\n
  2667. * D3CCIPR / SRDCCIPR I2C4SEL LL_RCC_SetI2CClockSource
  2668. * @param ClkSource This parameter can be one of the following values:
  2669. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PCLK1
  2670. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PLL3R
  2671. * @arg @ref LL_RCC_I2C123_CLKSOURCE_HSI
  2672. * @arg @ref LL_RCC_I2C123_CLKSOURCE_CSI
  2673. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK4
  2674. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PLL3R
  2675. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI
  2676. * @arg @ref LL_RCC_I2C4_CLKSOURCE_CSI
  2677. * @retval None
  2678. */
  2679. __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t ClkSource)
  2680. {
  2681. LL_RCC_SetClockSource(ClkSource);
  2682. }
  2683. /**
  2684. * @brief Configure LPTIMx clock source
  2685. * @rmtoll D2CCIP2R / CDCCIP2R LPTIM1SEL LL_RCC_SetLPTIMClockSource
  2686. * D3CCIPR / SRDCCIPR LPTIM2SEL LL_RCC_SetLPTIMClockSource\n
  2687. * D3CCIPR / SRDCCIPR LPTIM345SEL LL_RCC_SetLPTIMClockSource
  2688. * @param ClkSource This parameter can be one of the following values:
  2689. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  2690. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL2P
  2691. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL3R
  2692. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  2693. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  2694. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_CLKP
  2695. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK4
  2696. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL2P
  2697. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL3R
  2698. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
  2699. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
  2700. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_CLKP
  2701. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PCLK4
  2702. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL2P
  2703. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL3R
  2704. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSE
  2705. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSI
  2706. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_CLKP
  2707. * @retval None
  2708. */
  2709. __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t ClkSource)
  2710. {
  2711. LL_RCC_SetClockSource(ClkSource);
  2712. }
  2713. /**
  2714. * @brief Configure SAIx clock source
  2715. * @rmtoll D2CCIP1R / CDCCIP1R SAI1SEL LL_RCC_SetSAIClockSource\n
  2716. * D2CCIP1R / CDCCIP1R SAI23SEL LL_RCC_SetSAIClockSource
  2717. * D3CCIPR / SRDCCIPR SAI4ASEL LL_RCC_SetSAI4xClockSource\n
  2718. * D3CCIPR / SRDCCIPR SAI4BSEL LL_RCC_SetSAI4xClockSource
  2719. * @param ClkSource This parameter can be one of the following values:
  2720. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q
  2721. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL2P
  2722. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL3P
  2723. * @arg @ref LL_RCC_SAI1_CLKSOURCE_I2S_CKIN
  2724. * @arg @ref LL_RCC_SAI1_CLKSOURCE_CLKP
  2725. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL1Q
  2726. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL2P
  2727. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL3P
  2728. * @arg @ref LL_RCC_SAI23_CLKSOURCE_I2S_CKIN
  2729. * @arg @ref LL_RCC_SAI23_CLKSOURCE_CLKP
  2730. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL1Q (*)
  2731. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL2P (*)
  2732. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL3P (*)
  2733. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_I2S_CKIN (*)
  2734. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL1Q (*)
  2735. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL2P (*)
  2736. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL3P (*)
  2737. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_I2S_CKIN (*)
  2738. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_CLKP (*)
  2739. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_SPDIF (*)
  2740. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL1Q (*)
  2741. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL2P (*)
  2742. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL3P (*)
  2743. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_I2S_CKIN (*)
  2744. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_CLKP (*)
  2745. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL1Q (*)
  2746. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL2P (*)
  2747. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL3P (*)
  2748. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_I2S_CKIN (*)
  2749. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_CLKP (*)
  2750. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_SPDIF (*)
  2751. *
  2752. * (*) value not defined in all devices.
  2753. * @retval None
  2754. */
  2755. __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t ClkSource)
  2756. {
  2757. LL_RCC_SetClockSource(ClkSource);
  2758. }
  2759. /**
  2760. * @brief Configure SDMMCx clock source
  2761. * @rmtoll D1CCIPR / CDCCIPR SDMMCSEL LL_RCC_SetSDMMCClockSource
  2762. * @param ClkSource This parameter can be one of the following values:
  2763. * @arg @ref LL_RCC_SDMMC_CLKSOURCE_PLL1Q
  2764. * @arg @ref LL_RCC_SDMMC_CLKSOURCE_PLL2R
  2765. * @retval None
  2766. */
  2767. __STATIC_INLINE void LL_RCC_SetSDMMCClockSource(uint32_t ClkSource)
  2768. {
  2769. #if defined(RCC_D1CCIPR_SDMMCSEL)
  2770. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL, ClkSource);
  2771. #else
  2772. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL, ClkSource);
  2773. #endif /* RCC_D1CCIPR_SDMMCSEL */
  2774. }
  2775. /**
  2776. * @brief Configure RNGx clock source
  2777. * @rmtoll D2CCIP2R / CDCCIP2R RNGSEL LL_RCC_SetRNGClockSource
  2778. * @param ClkSource This parameter can be one of the following values:
  2779. * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48
  2780. * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL1Q
  2781. * @arg @ref LL_RCC_RNG_CLKSOURCE_LSE
  2782. * @arg @ref LL_RCC_RNG_CLKSOURCE_LSI
  2783. * @retval None
  2784. */
  2785. __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t ClkSource)
  2786. {
  2787. #if defined(RCC_D2CCIP2R_RNGSEL)
  2788. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL, ClkSource);
  2789. #else
  2790. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL, ClkSource);
  2791. #endif /* RCC_D2CCIP2R_RNGSEL */
  2792. }
  2793. /**
  2794. * @brief Configure USBx clock source
  2795. * @rmtoll D2CCIP2R / CDCCIP2R USBSEL LL_RCC_SetUSBClockSource
  2796. * @param ClkSource This parameter can be one of the following values:
  2797. * @arg @ref LL_RCC_USB_CLKSOURCE_DISABLE
  2798. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL1Q
  2799. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL3Q
  2800. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
  2801. * @retval None
  2802. */
  2803. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t ClkSource)
  2804. {
  2805. #if defined(RCC_D2CCIP2R_USBSEL)
  2806. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL, ClkSource);
  2807. #else
  2808. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL, ClkSource);
  2809. #endif /* RCC_D2CCIP2R_USBSEL */
  2810. }
  2811. /**
  2812. * @brief Configure CECx clock source
  2813. * @rmtoll D2CCIP2R / CDCCIP2R CECSEL LL_RCC_SetCECClockSource
  2814. * @param ClkSource This parameter can be one of the following values:
  2815. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  2816. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSI
  2817. * @arg @ref LL_RCC_CEC_CLKSOURCE_CSI_DIV122
  2818. * @retval None
  2819. */
  2820. __STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t ClkSource)
  2821. {
  2822. #if defined(RCC_D2CCIP2R_CECSEL)
  2823. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL, ClkSource);
  2824. #else
  2825. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL, ClkSource);
  2826. #endif /* RCC_D2CCIP2R_CECSEL */
  2827. }
  2828. #if defined(DSI)
  2829. /**
  2830. * @brief Configure DSIx clock source
  2831. * @rmtoll D1CCIPR DSISEL LL_RCC_SetDSIClockSource
  2832. * @param ClkSource This parameter can be one of the following values:
  2833. * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY
  2834. * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL2Q
  2835. * @retval None
  2836. */
  2837. __STATIC_INLINE void LL_RCC_SetDSIClockSource(uint32_t ClkSource)
  2838. {
  2839. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL, ClkSource);
  2840. }
  2841. #endif /* DSI */
  2842. /**
  2843. * @brief Configure DFSDMx Kernel clock source
  2844. * @rmtoll D2CCIP1R / CDCCIP1R DFSDM1SEL LL_RCC_SetDFSDMClockSource
  2845. * @param ClkSource This parameter can be one of the following values:
  2846. * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2
  2847. * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK
  2848. * @retval None
  2849. */
  2850. __STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t ClkSource)
  2851. {
  2852. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  2853. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL, ClkSource);
  2854. #else
  2855. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL, ClkSource);
  2856. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  2857. }
  2858. #if defined(DFSDM2_BASE)
  2859. /**
  2860. * @brief Configure DFSDMx Kernel clock source
  2861. * @rmtoll SRDCCIPR DFSDM2SEL LL_RCC_SetDFSDM2ClockSource
  2862. * @param ClkSource This parameter can be one of the following values:
  2863. * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK2
  2864. * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK
  2865. * @retval None
  2866. */
  2867. __STATIC_INLINE void LL_RCC_SetDFSDM2ClockSource(uint32_t ClkSource)
  2868. {
  2869. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL, ClkSource);
  2870. }
  2871. #endif /* DFSDM2 */
  2872. /**
  2873. * @brief Configure FMCx Kernel clock source
  2874. * @rmtoll D1CCIPR / CDCCIPR FMCSEL LL_RCC_SetFMCClockSource
  2875. * @param ClkSource This parameter can be one of the following values:
  2876. * @arg @ref LL_RCC_FMC_CLKSOURCE_HCLK
  2877. * @arg @ref LL_RCC_FMC_CLKSOURCE_PLL1Q
  2878. * @arg @ref LL_RCC_FMC_CLKSOURCE_PLL2R
  2879. * @arg @ref LL_RCC_FMC_CLKSOURCE_CLKP
  2880. * @retval None
  2881. */
  2882. __STATIC_INLINE void LL_RCC_SetFMCClockSource(uint32_t ClkSource)
  2883. {
  2884. #if defined(RCC_D1CCIPR_FMCSEL)
  2885. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL, ClkSource);
  2886. #else
  2887. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL, ClkSource);
  2888. #endif /* RCC_D1CCIPR_FMCSEL */
  2889. }
  2890. #if defined(QUADSPI)
  2891. /**
  2892. * @brief Configure QSPIx Kernel clock source
  2893. * @rmtoll D1CCIPR QSPISEL LL_RCC_SetQSPIClockSource
  2894. * @param ClkSource This parameter can be one of the following values:
  2895. * @arg @ref LL_RCC_QSPI_CLKSOURCE_HCLK
  2896. * @arg @ref LL_RCC_QSPI_CLKSOURCE_PLL1Q
  2897. * @arg @ref LL_RCC_QSPI_CLKSOURCE_PLL2R
  2898. * @arg @ref LL_RCC_QSPI_CLKSOURCE_CLKP
  2899. * @retval None
  2900. */
  2901. __STATIC_INLINE void LL_RCC_SetQSPIClockSource(uint32_t ClkSource)
  2902. {
  2903. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL, ClkSource);
  2904. }
  2905. #endif /* QUADSPI */
  2906. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  2907. /**
  2908. * @brief Configure OSPIx Kernel clock source
  2909. * @rmtoll D1CCIPR OPISEL LL_RCC_SetOSPIClockSource
  2910. * @param ClkSource This parameter can be one of the following values:
  2911. * @arg @ref LL_RCC_OSPI_CLKSOURCE_HCLK
  2912. * @arg @ref LL_RCC_OSPI_CLKSOURCE_PLL1Q
  2913. * @arg @ref LL_RCC_OSPI_CLKSOURCE_PLL2R
  2914. * @arg @ref LL_RCC_OSPI_CLKSOURCE_CLKP
  2915. * @retval None
  2916. */
  2917. __STATIC_INLINE void LL_RCC_SetOSPIClockSource(uint32_t ClkSource)
  2918. {
  2919. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL, ClkSource);
  2920. }
  2921. #endif /* OCTOSPI1 || OCTOSPI2 */
  2922. /**
  2923. * @brief Configure CLKP Kernel clock source
  2924. * @rmtoll D1CCIPR / CDCCIPR CKPERSEL LL_RCC_SetCLKPClockSource
  2925. * @param ClkSource This parameter can be one of the following values:
  2926. * @arg @ref LL_RCC_CLKP_CLKSOURCE_HSI
  2927. * @arg @ref LL_RCC_CLKP_CLKSOURCE_CSI
  2928. * @arg @ref LL_RCC_CLKP_CLKSOURCE_HSE
  2929. * @retval None
  2930. */
  2931. __STATIC_INLINE void LL_RCC_SetCLKPClockSource(uint32_t ClkSource)
  2932. {
  2933. #if defined(RCC_D1CCIPR_CKPERSEL)
  2934. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL, ClkSource);
  2935. #else
  2936. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL, ClkSource);
  2937. #endif /* RCC_D1CCIPR_CKPERSEL */
  2938. }
  2939. /**
  2940. * @brief Configure SPIx Kernel clock source
  2941. * @rmtoll D2CCIP1R / CDCCIP1R SPI123SEL LL_RCC_SetSPIClockSource\n
  2942. * D2CCIP1R / CDCCIP1R SPI45SEL LL_RCC_SetSPIClockSource\n
  2943. * D3CCIPR / SRDCCIPR SPI6SEL LL_RCC_SetSPIClockSource
  2944. * @param ClkSource This parameter can be one of the following values:
  2945. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL1Q
  2946. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL2P
  2947. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL3P
  2948. * @arg @ref LL_RCC_SPI123_CLKSOURCE_I2S_CKIN
  2949. * @arg @ref LL_RCC_SPI123_CLKSOURCE_CLKP
  2950. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PCLK2
  2951. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL2Q
  2952. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL3Q
  2953. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSI
  2954. * @arg @ref LL_RCC_SPI45_CLKSOURCE_CSI
  2955. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSE
  2956. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PCLK4
  2957. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL2Q
  2958. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL3Q
  2959. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSI
  2960. * @arg @ref LL_RCC_SPI6_CLKSOURCE_CSI
  2961. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSE
  2962. * @arg @ref LL_RCC_SPI6_CLKSOURCE_I2S_CKIN (*)
  2963. *
  2964. * (*) value not defined in all devices.
  2965. * @retval None
  2966. */
  2967. __STATIC_INLINE void LL_RCC_SetSPIClockSource(uint32_t ClkSource)
  2968. {
  2969. LL_RCC_SetClockSource(ClkSource);
  2970. }
  2971. /**
  2972. * @brief Configure SPDIFx Kernel clock source
  2973. * @rmtoll D2CCIP1R / CDCCIP1R SPDIFSEL LL_RCC_SetSPDIFClockSource
  2974. * @param ClkSource This parameter can be one of the following values:
  2975. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL1Q
  2976. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL2R
  2977. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL3R
  2978. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_HSI
  2979. * @retval None
  2980. */
  2981. __STATIC_INLINE void LL_RCC_SetSPDIFClockSource(uint32_t ClkSource)
  2982. {
  2983. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  2984. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL, ClkSource);
  2985. #else
  2986. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL, ClkSource);
  2987. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  2988. }
  2989. /**
  2990. * @brief Configure FDCANx Kernel clock source
  2991. * @rmtoll D2CCIP1R / CDCCIP1R FDCANSEL LL_RCC_SetFDCANClockSource
  2992. * @param ClkSource This parameter can be one of the following values:
  2993. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_HSE
  2994. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL1Q
  2995. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL2Q
  2996. * @retval None
  2997. */
  2998. __STATIC_INLINE void LL_RCC_SetFDCANClockSource(uint32_t ClkSource)
  2999. {
  3000. #if defined(RCC_D2CCIP1R_FDCANSEL)
  3001. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL, ClkSource);
  3002. #else
  3003. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL, ClkSource);
  3004. #endif /* RCC_D2CCIP1R_FDCANSEL */
  3005. }
  3006. /**
  3007. * @brief Configure SWPx Kernel clock source
  3008. * @rmtoll D2CCIP1R / CDCCIP1R SWPSEL LL_RCC_SetSWPClockSource
  3009. * @param ClkSource This parameter can be one of the following values:
  3010. * @arg @ref LL_RCC_SWP_CLKSOURCE_PCLK1
  3011. * @arg @ref LL_RCC_SWP_CLKSOURCE_HSI
  3012. * @retval None
  3013. */
  3014. __STATIC_INLINE void LL_RCC_SetSWPClockSource(uint32_t ClkSource)
  3015. {
  3016. #if defined(RCC_D2CCIP1R_SWPSEL)
  3017. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL, ClkSource);
  3018. #else
  3019. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL, ClkSource);
  3020. #endif /* RCC_D2CCIP1R_SWPSEL */
  3021. }
  3022. /**
  3023. * @brief Configure ADCx Kernel clock source
  3024. * @rmtoll D3CCIPR / SRDCCIPR ADCSEL LL_RCC_SetADCClockSource
  3025. * @param ClkSource This parameter can be one of the following values:
  3026. * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL2P
  3027. * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL3R
  3028. * @arg @ref LL_RCC_ADC_CLKSOURCE_CLKP
  3029. * @retval None
  3030. */
  3031. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ClkSource)
  3032. {
  3033. #if defined(RCC_D3CCIPR_ADCSEL)
  3034. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL, ClkSource);
  3035. #else
  3036. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL, ClkSource);
  3037. #endif /* RCC_D3CCIPR_ADCSEL */
  3038. }
  3039. /**
  3040. * @brief Get periph clock source
  3041. * @rmtoll D1CCIPR / CDCCIPR * LL_RCC_GetClockSource\n
  3042. * D2CCIP1R / CDCCIP1R * LL_RCC_GetClockSource\n
  3043. * D2CCIP2R / CDCCIP2R * LL_RCC_GetClockSource\n
  3044. * D3CCIPR / SRDCCIPR * LL_RCC_GetClockSource
  3045. * @param Periph This parameter can be one of the following values:
  3046. * @arg @ref LL_RCC_USART16_CLKSOURCE
  3047. * @arg @ref LL_RCC_USART234578_CLKSOURCE
  3048. * @arg @ref LL_RCC_I2C123_CLKSOURCE
  3049. * @arg @ref LL_RCC_I2C4_CLKSOURCE
  3050. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE
  3051. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE
  3052. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE
  3053. * @arg @ref LL_RCC_SAI1_CLKSOURCE
  3054. * @arg @ref LL_RCC_SAI23_CLKSOURCE
  3055. * @arg @ref LL_RCC_SAI4A_CLKSOURCE (*)
  3056. * @arg @ref LL_RCC_SAI4B_CLKSOURCE (*)
  3057. * @arg @ref LL_RCC_SAI2A_CLKSOURCE (*)
  3058. * @arg @ref LL_RCC_SAI2B_CLKSOURCE (*)
  3059. * @arg @ref LL_RCC_SPI123_CLKSOURCE (*)
  3060. * @arg @ref LL_RCC_SPI45_CLKSOURCE (*)
  3061. * @arg @ref LL_RCC_SPI6_CLKSOURCE (*)
  3062. * @retval Returned value can be one of the following values:
  3063. * @arg @ref LL_RCC_USART16_CLKSOURCE_PCLK2
  3064. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL2Q
  3065. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL3Q
  3066. * @arg @ref LL_RCC_USART16_CLKSOURCE_HSI
  3067. * @arg @ref LL_RCC_USART16_CLKSOURCE_CSI
  3068. * @arg @ref LL_RCC_USART16_CLKSOURCE_LSE
  3069. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PCLK1
  3070. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL2Q
  3071. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL3Q
  3072. * @arg @ref LL_RCC_USART234578_CLKSOURCE_HSI
  3073. * @arg @ref LL_RCC_USART234578_CLKSOURCE_CSI
  3074. * @arg @ref LL_RCC_USART234578_CLKSOURCE_LSE
  3075. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PCLK1
  3076. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PLL3R
  3077. * @arg @ref LL_RCC_I2C123_CLKSOURCE_HSI
  3078. * @arg @ref LL_RCC_I2C123_CLKSOURCE_CSI
  3079. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK4
  3080. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PLL3R
  3081. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI
  3082. * @arg @ref LL_RCC_I2C4_CLKSOURCE_CSI
  3083. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  3084. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL2P
  3085. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL3R
  3086. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  3087. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  3088. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_CLKP
  3089. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK4
  3090. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL2P
  3091. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL3R
  3092. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
  3093. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
  3094. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_CLKP
  3095. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PCLK4
  3096. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL2P
  3097. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL3R
  3098. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSE
  3099. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSI
  3100. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_CLKP
  3101. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q
  3102. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL2P
  3103. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL3P
  3104. * @arg @ref LL_RCC_SAI1_CLKSOURCE_I2S_CKIN
  3105. * @arg @ref LL_RCC_SAI1_CLKSOURCE_CLKP
  3106. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL1Q (*)
  3107. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL2P (*)
  3108. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL3P (*)
  3109. * @arg @ref LL_RCC_SAI23_CLKSOURCE_I2S_CKIN (*)
  3110. * @arg @ref LL_RCC_SAI23_CLKSOURCE_CLKP (*)
  3111. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL1Q (*)
  3112. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL2P (*)
  3113. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL3P (*)
  3114. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_I2S_CKIN (*)
  3115. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_CLKP (*)
  3116. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL1Q (*)
  3117. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL2P (*)
  3118. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL3P (*)
  3119. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_I2S_CKIN (*)
  3120. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_CLKP (*)
  3121. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL1Q (*)
  3122. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL2P (*)
  3123. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL3P (*)
  3124. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_I2S_CKIN (*)
  3125. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_CLKP (*)
  3126. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_SPDIF (*)
  3127. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL1Q (*)
  3128. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL2P (*)
  3129. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL3P (*)
  3130. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_I2S_CKIN (*)
  3131. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_CLKP (*)
  3132. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_SPDIF (*)
  3133. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL1Q
  3134. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL2P
  3135. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL3P
  3136. * @arg @ref LL_RCC_SPI123_CLKSOURCE_I2S_CKIN
  3137. * @arg @ref LL_RCC_SPI123_CLKSOURCE_CLKP
  3138. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PCLK2
  3139. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL2Q
  3140. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL3Q
  3141. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSI
  3142. * @arg @ref LL_RCC_SPI45_CLKSOURCE_CSI
  3143. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSE
  3144. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PCLK4
  3145. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL2Q
  3146. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL3Q
  3147. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSI
  3148. * @arg @ref LL_RCC_SPI6_CLKSOURCE_CSI
  3149. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSE
  3150. * @arg @ref LL_RCC_SPI6_CLKSOURCE_I2S_CKIN (*)
  3151. *
  3152. * (*) value not defined in all devices.
  3153. * @retval None
  3154. */
  3155. __STATIC_INLINE uint32_t LL_RCC_GetClockSource(uint32_t Periph)
  3156. {
  3157. #if defined(RCC_D1CCIPR_FMCSEL)
  3158. register const uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&RCC->D1CCIPR) + LL_CLKSOURCE_REG(Periph)));
  3159. #else
  3160. register const uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&RCC->CDCCIPR) + LL_CLKSOURCE_REG(Periph)));
  3161. #endif /* RCC_D1CCIPR_FMCSEL */
  3162. return (uint32_t) (Periph | (((READ_BIT(*pReg, LL_CLKSOURCE_MASK(Periph))) >> LL_CLKSOURCE_SHIFT(Periph)) << LL_RCC_CONFIG_SHIFT) );
  3163. }
  3164. /**
  3165. * @brief Get USARTx clock source
  3166. * @rmtoll D2CCIP2R / CDCCIP2R USART16SEL LL_RCC_GetUSARTClockSource\n
  3167. * D2CCIP2R / CDCCIP2R USART28SEL LL_RCC_GetUSARTClockSource
  3168. * @param Periph This parameter can be one of the following values:
  3169. * @arg @ref LL_RCC_USART16_CLKSOURCE
  3170. * @arg @ref LL_RCC_USART234578_CLKSOURCE
  3171. * @retval Returned value can be one of the following values:
  3172. * @arg @ref LL_RCC_USART16_CLKSOURCE_PCLK2
  3173. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL2Q
  3174. * @arg @ref LL_RCC_USART16_CLKSOURCE_PLL3Q
  3175. * @arg @ref LL_RCC_USART16_CLKSOURCE_HSI
  3176. * @arg @ref LL_RCC_USART16_CLKSOURCE_CSI
  3177. * @arg @ref LL_RCC_USART16_CLKSOURCE_LSE
  3178. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PCLK1
  3179. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL2Q
  3180. * @arg @ref LL_RCC_USART234578_CLKSOURCE_PLL3Q
  3181. * @arg @ref LL_RCC_USART234578_CLKSOURCE_HSI
  3182. * @arg @ref LL_RCC_USART234578_CLKSOURCE_CSI
  3183. * @arg @ref LL_RCC_USART234578_CLKSOURCE_LSE
  3184. */
  3185. __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t Periph)
  3186. {
  3187. return LL_RCC_GetClockSource(Periph);
  3188. }
  3189. /**
  3190. * @brief Get LPUART clock source
  3191. * @rmtoll D3CCIPR / SRDCCIPR LPUART1SEL LL_RCC_GetLPUARTClockSource
  3192. * @param Periph This parameter can be one of the following values:
  3193. * @arg @ref LL_RCC_LPUART1_CLKSOURCE
  3194. * @retval Returned value can be one of the following values:
  3195. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK4
  3196. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PLL2Q
  3197. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PLL3Q
  3198. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
  3199. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_CSI
  3200. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
  3201. */
  3202. __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t Periph)
  3203. {
  3204. UNUSED(Periph);
  3205. #if defined(RCC_D3CCIPR_LPUART1SEL)
  3206. return (uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL));
  3207. #else
  3208. return (uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL));
  3209. #endif /* RCC_D3CCIPR_LPUART1SEL */
  3210. }
  3211. /**
  3212. * @brief Get I2Cx clock source
  3213. * @rmtoll D2CCIP2R / CDCCIP2R I2C123SEL LL_RCC_GetI2CClockSource\n
  3214. * D3CCIPR / SRDCCIPR I2C4SEL LL_RCC_GetI2CClockSource
  3215. * @param Periph This parameter can be one of the following values:
  3216. * @arg @ref LL_RCC_I2C123_CLKSOURCE
  3217. * @arg @ref LL_RCC_I2C4_CLKSOURCE
  3218. * @retval Returned value can be one of the following values:
  3219. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PCLK1
  3220. * @arg @ref LL_RCC_I2C123_CLKSOURCE_PLL3R
  3221. * @arg @ref LL_RCC_I2C123_CLKSOURCE_HSI
  3222. * @arg @ref LL_RCC_I2C123_CLKSOURCE_CSI
  3223. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK4
  3224. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PLL3R
  3225. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI
  3226. * @arg @ref LL_RCC_I2C4_CLKSOURCE_CSI
  3227. */
  3228. __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t Periph)
  3229. {
  3230. return LL_RCC_GetClockSource(Periph);
  3231. }
  3232. /**
  3233. * @brief Get LPTIM clock source
  3234. * @rmtoll D2CCIP2R / CDCCIP2R LPTIM1SEL LL_RCC_GetLPTIMClockSource\n
  3235. * D3CCIPR / SRDCCIPR LPTIM2SEL LL_RCC_GetLPTIMClockSource\n
  3236. * D3CCIPR / SRDCCIPR LPTIM345SEL LL_RCC_GetLPTIMClockSource
  3237. * @param Perihp This parameter can be one of the following values:
  3238. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE
  3239. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE
  3240. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE
  3241. * @retval Returned value can be one of the following values:
  3242. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  3243. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL2P
  3244. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PLL3R
  3245. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  3246. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  3247. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_CLKP
  3248. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK4
  3249. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL2P
  3250. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PLL3R
  3251. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
  3252. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
  3253. * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_CLKP
  3254. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PCLK4
  3255. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL2P
  3256. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_PLL3R
  3257. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSE
  3258. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_LSI
  3259. * @arg @ref LL_RCC_LPTIM345_CLKSOURCE_CLKP
  3260. * @retval None
  3261. */
  3262. __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t Periph)
  3263. {
  3264. return LL_RCC_GetClockSource(Periph);
  3265. }
  3266. /**
  3267. * @brief Get SAIx clock source
  3268. * @rmtoll D2CCIP1R / CDCCIP1R SAI1SEL LL_RCC_GetSAIClockSource\n
  3269. * D2CCIP1R / CDCCIP1R SAI23SEL LL_RCC_GetSAIClockSource
  3270. * D3CCIPR / SRDCCIPR SAI4ASEL LL_RCC_GetSAIClockSource\n
  3271. * D3CCIPR / SRDCCIPR SAI4BSEL LL_RCC_GetSAIClockSource
  3272. * @param Periph This parameter can be one of the following values:
  3273. * @arg @ref LL_RCC_SAI1_CLKSOURCE
  3274. * @arg @ref LL_RCC_SAI23_CLKSOURCE
  3275. * @arg @ref LL_RCC_SAI4A_CLKSOURCE
  3276. * @arg @ref LL_RCC_SAI4B_CLKSOURCE
  3277. * @retval Returned value can be one of the following values:
  3278. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q
  3279. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL2P
  3280. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL3P
  3281. * @arg @ref LL_RCC_SAI1_CLKSOURCE_I2S_CKIN
  3282. * @arg @ref LL_RCC_SAI1_CLKSOURCE_CLKP
  3283. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL1Q (*)
  3284. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL2P (*)
  3285. * @arg @ref LL_RCC_SAI23_CLKSOURCE_PLL3P (*)
  3286. * @arg @ref LL_RCC_SAI23_CLKSOURCE_I2S_CKIN (*)
  3287. * @arg @ref LL_RCC_SAI23_CLKSOURCE_CLKP (*)
  3288. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL1Q (*)
  3289. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL2P (*)
  3290. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_PLL3P (*)
  3291. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_I2S_CKIN (*)
  3292. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_CLKP (*)
  3293. * @arg @ref LL_RCC_SAI2A_CLKSOURCE_SPDIF (*)
  3294. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL1Q (*)
  3295. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL2P (*)
  3296. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_PLL3P (*)
  3297. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_I2S_CKIN (*)
  3298. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_CLKP (*)
  3299. * @arg @ref LL_RCC_SAI2B_CLKSOURCE_SPDIF (*)
  3300. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL1Q (*)
  3301. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL2P (*)
  3302. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_PLL3P (*)
  3303. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_I2S_CKIN (*)
  3304. * @arg @ref LL_RCC_SAI4A_CLKSOURCE_CLKP (*)
  3305. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL1Q (*)
  3306. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL2P (*)
  3307. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_PLL3P (*)
  3308. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_I2S_CKIN (*)
  3309. * @arg @ref LL_RCC_SAI4B_CLKSOURCE_CLKP (*)
  3310. *
  3311. * (*) value not defined in all devices.
  3312. */
  3313. __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t Periph)
  3314. {
  3315. return LL_RCC_GetClockSource(Periph);
  3316. }
  3317. /**
  3318. * @brief Get SDMMC clock source
  3319. * @rmtoll D1CCIPR / CDCCIPR SDMMCSEL LL_RCC_GetSDMMCClockSource
  3320. * @param Periph This parameter can be one of the following values:
  3321. * @arg @ref LL_RCC_SDMMC_CLKSOURCE
  3322. * @retval Returned value can be one of the following values:
  3323. * @arg @ref LL_RCC_SDMMC_CLKSOURCE_PLL1Q
  3324. * @arg @ref LL_RCC_SDMMC_CLKSOURCE_PLL2R
  3325. */
  3326. __STATIC_INLINE uint32_t LL_RCC_GetSDMMCClockSource(uint32_t Periph)
  3327. {
  3328. UNUSED(Periph);
  3329. #if defined(RCC_D1CCIPR_SDMMCSEL)
  3330. return (uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL));
  3331. #else
  3332. return (uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL));
  3333. #endif /* RCC_D1CCIPR_SDMMCSEL */
  3334. }
  3335. /**
  3336. * @brief Get RNG clock source
  3337. * @rmtoll D2CCIP2R RNGSEL LL_RCC_GetRNGClockSource
  3338. * @param Periph This parameter can be one of the following values:
  3339. * @arg @ref LL_RCC_RNG_CLKSOURCE
  3340. * @retval Returned value can be one of the following values:
  3341. * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48
  3342. * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL1Q
  3343. * @arg @ref LL_RCC_RNG_CLKSOURCE_LSE
  3344. * @arg @ref LL_RCC_RNG_CLKSOURCE_LSI
  3345. */
  3346. __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t Periph)
  3347. {
  3348. UNUSED(Periph);
  3349. #if defined(RCC_D2CCIP2R_RNGSEL)
  3350. return (uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL));
  3351. #else
  3352. return (uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL));
  3353. #endif /* RCC_D2CCIP2R_RNGSEL */
  3354. }
  3355. /**
  3356. * @brief Get USB clock source
  3357. * @rmtoll D2CCIP2R / CDCCIP2R USBSEL LL_RCC_GetUSBClockSource
  3358. * @param Periph This parameter can be one of the following values:
  3359. * @arg @ref LL_RCC_USB_CLKSOURCE
  3360. * @retval Returned value can be one of the following values:
  3361. * @arg @ref LL_RCC_USB_CLKSOURCE_DISABLE
  3362. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL1Q
  3363. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL3Q
  3364. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
  3365. */
  3366. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t Periph)
  3367. {
  3368. UNUSED(Periph);
  3369. #if defined(RCC_D2CCIP2R_USBSEL)
  3370. return (uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL));
  3371. #else
  3372. return (uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL));
  3373. #endif /* RCC_D2CCIP2R_USBSEL */
  3374. }
  3375. /**
  3376. * @brief Get CEC clock source
  3377. * @rmtoll D2CCIP2R / CDCCIP2R CECSEL LL_RCC_GetCECClockSource
  3378. * @param Periph This parameter can be one of the following values:
  3379. * @arg @ref LL_RCC_CEC_CLKSOURCE
  3380. * @retval Returned value can be one of the following values:
  3381. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  3382. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSI
  3383. * @arg @ref LL_RCC_CEC_CLKSOURCE_CSI_DIV122
  3384. */
  3385. __STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t Periph)
  3386. {
  3387. UNUSED(Periph);
  3388. #if defined(RCC_D2CCIP2R_CECSEL)
  3389. return (uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL));
  3390. #else
  3391. return (uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL));
  3392. #endif /* RCC_D2CCIP2R_CECSEL */
  3393. }
  3394. #if defined(DSI)
  3395. /**
  3396. * @brief Get DSI clock source
  3397. * @rmtoll D1CCIPR DSISEL LL_RCC_GetDSIClockSource
  3398. * @param Periph This parameter can be one of the following values:
  3399. * @arg @ref LL_RCC_DSI_CLKSOURCE
  3400. * @retval Returned value can be one of the following values:
  3401. * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY
  3402. * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL2Q
  3403. */
  3404. __STATIC_INLINE uint32_t LL_RCC_GetDSIClockSource(uint32_t Periph)
  3405. {
  3406. UNUSED(Periph);
  3407. return (uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL));
  3408. }
  3409. #endif /* DSI */
  3410. /**
  3411. * @brief Get DFSDM Kernel clock source
  3412. * @rmtoll D2CCIP1R / CDCCIP1R DFSDM1SEL LL_RCC_GetDFSDMClockSource
  3413. * @param Periph This parameter can be one of the following values:
  3414. * @arg @ref LL_RCC_DFSDM1_CLKSOURCE
  3415. * @retval Returned value can be one of the following values:
  3416. * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2
  3417. * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK
  3418. */
  3419. __STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t Periph)
  3420. {
  3421. UNUSED(Periph);
  3422. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  3423. return (uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL));
  3424. #else
  3425. return (uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL));
  3426. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  3427. }
  3428. #if defined(DFSDM2_BASE)
  3429. /**
  3430. * @brief Get DFSDM2 Kernel clock source
  3431. * @rmtoll SRDCCIPR DFSDM2SEL LL_RCC_GetDFSDM2ClockSource
  3432. * @param Periph This parameter can be one of the following values:
  3433. * @arg @ref LL_RCC_DFSDM2_CLKSOURCE
  3434. * @retval Returned value can be one of the following values:
  3435. * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK4
  3436. * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK
  3437. */
  3438. __STATIC_INLINE uint32_t LL_RCC_GetDFSDM2ClockSource(uint32_t Periph)
  3439. {
  3440. UNUSED(Periph);
  3441. return (uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL));
  3442. }
  3443. #endif /* DFSDM2_BASE */
  3444. /**
  3445. * @brief Get FMC Kernel clock source
  3446. * @rmtoll D1CCIPR / D1CCIPR FMCSEL LL_RCC_GetFMCClockSource
  3447. * @param Periph This parameter can be one of the following values:
  3448. * @arg @ref LL_RCC_FMC_CLKSOURCE
  3449. * @retval Returned value can be one of the following values:
  3450. * @arg @ref LL_RCC_FMC_CLKSOURCE_HCLK
  3451. * @arg @ref LL_RCC_FMC_CLKSOURCE_PLL1Q
  3452. * @arg @ref LL_RCC_FMC_CLKSOURCE_PLL2R
  3453. * @arg @ref LL_RCC_FMC_CLKSOURCE_CLKP
  3454. */
  3455. __STATIC_INLINE uint32_t LL_RCC_GetFMCClockSource(uint32_t Periph)
  3456. {
  3457. UNUSED(Periph);
  3458. #if defined(RCC_D1CCIPR_FMCSEL)
  3459. return (uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL));
  3460. #else
  3461. return (uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL));
  3462. #endif /* RCC_D1CCIPR_FMCSEL */
  3463. }
  3464. #if defined(QUADSPI)
  3465. /**
  3466. * @brief Get QSPI Kernel clock source
  3467. * @rmtoll D1CCIPR / CDCCIPR QSPISEL LL_RCC_GetQSPIClockSource
  3468. * @param Periph This parameter can be one of the following values:
  3469. * @arg @ref LL_RCC_QSPI_CLKSOURCE
  3470. * @retval Returned value can be one of the following values:
  3471. * @arg @ref LL_RCC_QSPI_CLKSOURCE_HCLK
  3472. * @arg @ref LL_RCC_QSPI_CLKSOURCE_PLL1Q
  3473. * @arg @ref LL_RCC_QSPI_CLKSOURCE_PLL2R
  3474. * @arg @ref LL_RCC_QSPI_CLKSOURCE_CLKP
  3475. */
  3476. __STATIC_INLINE uint32_t LL_RCC_GetQSPIClockSource(uint32_t Periph)
  3477. {
  3478. UNUSED(Periph);
  3479. return (uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL));
  3480. }
  3481. #endif /* QUADSPI */
  3482. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  3483. /**
  3484. * @brief Get OSPI Kernel clock source
  3485. * @rmtoll CDCCIPR OSPISEL LL_RCC_GetOSPIClockSource
  3486. * @param Periph This parameter can be one of the following values:
  3487. * @arg @ref LL_RCC_OSPI_CLKSOURCE
  3488. * @retval Returned value can be one of the following values:
  3489. * @arg @ref LL_RCC_OSPI_CLKSOURCE_HCLK
  3490. * @arg @ref LL_RCC_OSPI_CLKSOURCE_PLL1Q
  3491. * @arg @ref LL_RCC_OSPI_CLKSOURCE_PLL2R
  3492. * @arg @ref LL_RCC_OSPI_CLKSOURCE_CLKP
  3493. */
  3494. __STATIC_INLINE uint32_t LL_RCC_GetOSPIClockSource(uint32_t Periph)
  3495. {
  3496. UNUSED(Periph);
  3497. return (uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL));
  3498. }
  3499. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  3500. /**
  3501. * @brief Get CLKP Kernel clock source
  3502. * @rmtoll D1CCIPR / CDCCIPR CKPERSEL LL_RCC_GetCLKPClockSource
  3503. * @param Periph This parameter can be one of the following values:
  3504. * @arg @ref LL_RCC_CLKP_CLKSOURCE
  3505. * @retval Returned value can be one of the following values:
  3506. * @arg @ref LL_RCC_CLKP_CLKSOURCE_HSI
  3507. * @arg @ref LL_RCC_CLKP_CLKSOURCE_CSI
  3508. * @arg @ref LL_RCC_CLKP_CLKSOURCE_HSE
  3509. */
  3510. __STATIC_INLINE uint32_t LL_RCC_GetCLKPClockSource(uint32_t Periph)
  3511. {
  3512. UNUSED(Periph);
  3513. #if defined(RCC_D1CCIPR_CKPERSEL)
  3514. return (uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL));
  3515. #else
  3516. return (uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL));
  3517. #endif /* RCC_D1CCIPR_CKPERSEL */
  3518. }
  3519. /**
  3520. * @brief Get SPIx Kernel clock source
  3521. * @rmtoll D2CCIP1R / CDCCIP1R SPI123SEL LL_RCC_GetSPIClockSource\n
  3522. * D2CCIP1R / CDCCIP1R SPI45SEL LL_RCC_GetSPIClockSource\n
  3523. * D3CCIPR / SRDCCIPR SPI6SEL LL_RCC_GetSPIClockSource
  3524. * @param Periph This parameter can be one of the following values:
  3525. * @arg @ref LL_RCC_SPI123_CLKSOURCE
  3526. * @arg @ref LL_RCC_SPI45_CLKSOURCE
  3527. * @arg @ref LL_RCC_SPI6_CLKSOURCE
  3528. * @retval Returned value can be one of the following values:
  3529. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL1Q
  3530. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL2P
  3531. * @arg @ref LL_RCC_SPI123_CLKSOURCE_PLL3P
  3532. * @arg @ref LL_RCC_SPI123_CLKSOURCE_I2S_CKIN
  3533. * @arg @ref LL_RCC_SPI123_CLKSOURCE_CLKP
  3534. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PCLK2
  3535. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL2Q
  3536. * @arg @ref LL_RCC_SPI45_CLKSOURCE_PLL3Q
  3537. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSI
  3538. * @arg @ref LL_RCC_SPI45_CLKSOURCE_CSI
  3539. * @arg @ref LL_RCC_SPI45_CLKSOURCE_HSE
  3540. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PCLK4
  3541. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL2Q
  3542. * @arg @ref LL_RCC_SPI6_CLKSOURCE_PLL3Q
  3543. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSI
  3544. * @arg @ref LL_RCC_SPI6_CLKSOURCE_CSI
  3545. * @arg @ref LL_RCC_SPI6_CLKSOURCE_HSE
  3546. * @arg @ref LL_RCC_SPI6_CLKSOURCE_I2S_CKIN (*)
  3547. *
  3548. * (*) value not defined in all stm32h7xx lines.
  3549. */
  3550. __STATIC_INLINE uint32_t LL_RCC_GetSPIClockSource(uint32_t Periph)
  3551. {
  3552. return LL_RCC_GetClockSource(Periph);
  3553. }
  3554. /**
  3555. * @brief Get SPDIF Kernel clock source
  3556. * @rmtoll D2CCIP1R / CDCCIP1R SPDIFSEL LL_RCC_GetSPDIFClockSource
  3557. * @param Periph This parameter can be one of the following values:
  3558. * @arg @ref LL_RCC_SPDIF_CLKSOURCE
  3559. * @retval Returned value can be one of the following values:
  3560. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL1Q
  3561. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL2R
  3562. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_PLL3R
  3563. * @arg @ref LL_RCC_SPDIF_CLKSOURCE_HSI
  3564. */
  3565. __STATIC_INLINE uint32_t LL_RCC_GetSPDIFClockSource(uint32_t Periph)
  3566. {
  3567. UNUSED(Periph);
  3568. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  3569. return (uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL));
  3570. #else
  3571. return (uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL));
  3572. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  3573. }
  3574. /**
  3575. * @brief Get FDCAN Kernel clock source
  3576. * @rmtoll D2CCIP1R / CDCCIP1R FDCANSEL LL_RCC_GetFDCANClockSource
  3577. * @param Periph This parameter can be one of the following values:
  3578. * @arg @ref LL_RCC_FDCAN_CLKSOURCE
  3579. * @retval Returned value can be one of the following values:
  3580. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_HSE
  3581. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL1Q
  3582. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL2Q
  3583. */
  3584. __STATIC_INLINE uint32_t LL_RCC_GetFDCANClockSource(uint32_t Periph)
  3585. {
  3586. UNUSED(Periph);
  3587. #if defined(RCC_D2CCIP1R_FDCANSEL)
  3588. return (uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL));
  3589. #else
  3590. return (uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL));
  3591. #endif /* RCC_D2CCIP1R_FDCANSEL */
  3592. }
  3593. /**
  3594. * @brief Get SWP Kernel clock source
  3595. * @rmtoll D2CCIP1R / CDCCIP1R SWPSEL LL_RCC_GetSWPClockSource
  3596. * @param Periph This parameter can be one of the following values:
  3597. * @arg @ref LL_RCC_SWP_CLKSOURCE
  3598. * @retval Returned value can be one of the following values:
  3599. * @arg @ref LL_RCC_SWP_CLKSOURCE_PCLK1
  3600. * @arg @ref LL_RCC_SWP_CLKSOURCE_HSI
  3601. */
  3602. __STATIC_INLINE uint32_t LL_RCC_GetSWPClockSource(uint32_t Periph)
  3603. {
  3604. UNUSED(Periph);
  3605. #if defined(RCC_D2CCIP1R_SWPSEL)
  3606. return (uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL));
  3607. #else
  3608. return (uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL));
  3609. #endif /* RCC_D2CCIP1R_SWPSEL */
  3610. }
  3611. /**
  3612. * @brief Get ADC Kernel clock source
  3613. * @rmtoll D3CCIPR / SRDCCIPR ADCSEL LL_RCC_GetADCClockSource
  3614. * @param Periph This parameter can be one of the following values:
  3615. * @arg @ref LL_RCC_ADC_CLKSOURCE
  3616. * @retval Returned value can be one of the following values:
  3617. * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL2P
  3618. * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL3R
  3619. * @arg @ref LL_RCC_ADC_CLKSOURCE_CLKP
  3620. */
  3621. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t Periph)
  3622. {
  3623. UNUSED(Periph);
  3624. #if defined (RCC_D3CCIPR_ADCSEL)
  3625. return (uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL));
  3626. #else
  3627. return (uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL));
  3628. #endif /* RCC_D3CCIPR_ADCSEL */
  3629. }
  3630. /**
  3631. * @}
  3632. */
  3633. /** @defgroup RCC_LL_EF_RTC RTC
  3634. * @{
  3635. */
  3636. /**
  3637. * @brief Set RTC Clock Source
  3638. * @note Once the RTC clock source has been selected, it cannot be changed anymore unless
  3639. * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
  3640. * set). The BDRST bit can be used to reset them.
  3641. * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource
  3642. * @param Source This parameter can be one of the following values:
  3643. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  3644. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  3645. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  3646. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE
  3647. * @retval None
  3648. */
  3649. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  3650. {
  3651. MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  3652. }
  3653. /**
  3654. * @brief Get RTC Clock Source
  3655. * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource
  3656. * @retval Returned value can be one of the following values:
  3657. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  3658. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  3659. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  3660. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE
  3661. */
  3662. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  3663. {
  3664. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  3665. }
  3666. /**
  3667. * @brief Enable RTC
  3668. * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
  3669. * @retval None
  3670. */
  3671. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  3672. {
  3673. SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  3674. }
  3675. /**
  3676. * @brief Disable RTC
  3677. * @rmtoll BDCR RTCEN LL_RCC_DisableRTC
  3678. * @retval None
  3679. */
  3680. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  3681. {
  3682. CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  3683. }
  3684. /**
  3685. * @brief Check if RTC has been enabled or not
  3686. * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC
  3687. * @retval State of bit (1 or 0).
  3688. */
  3689. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  3690. {
  3691. return ((READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN))?1UL:0UL);
  3692. }
  3693. /**
  3694. * @brief Force the Backup domain reset
  3695. * @rmtoll BDCR BDRST / VSWRST LL_RCC_ForceBackupDomainReset
  3696. * @retval None
  3697. */
  3698. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  3699. {
  3700. SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  3701. }
  3702. /**
  3703. * @brief Release the Backup domain reset
  3704. * @rmtoll BDCR BDRST / VSWRST LL_RCC_ReleaseBackupDomainReset
  3705. * @retval None
  3706. */
  3707. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  3708. {
  3709. #if defined(RCC_BDCR_BDRST)
  3710. CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  3711. #else
  3712. CLEAR_BIT(RCC->BDCR, RCC_BDCR_VSWRST);
  3713. #endif /* RCC_BDCR_BDRST */
  3714. }
  3715. /**
  3716. * @brief Set HSE Prescalers for RTC Clock
  3717. * @rmtoll CFGR RTCPRE LL_RCC_SetRTC_HSEPrescaler
  3718. * @param Prescaler This parameter can be one of the following values:
  3719. * @arg @ref LL_RCC_RTC_NOCLOCK
  3720. * @arg @ref LL_RCC_RTC_HSE_DIV_2
  3721. * @arg @ref LL_RCC_RTC_HSE_DIV_3
  3722. * @arg @ref LL_RCC_RTC_HSE_DIV_4
  3723. * @arg @ref LL_RCC_RTC_HSE_DIV_5
  3724. * @arg @ref LL_RCC_RTC_HSE_DIV_6
  3725. * @arg @ref LL_RCC_RTC_HSE_DIV_7
  3726. * @arg @ref LL_RCC_RTC_HSE_DIV_8
  3727. * @arg @ref LL_RCC_RTC_HSE_DIV_9
  3728. * @arg @ref LL_RCC_RTC_HSE_DIV_10
  3729. * @arg @ref LL_RCC_RTC_HSE_DIV_11
  3730. * @arg @ref LL_RCC_RTC_HSE_DIV_12
  3731. * @arg @ref LL_RCC_RTC_HSE_DIV_13
  3732. * @arg @ref LL_RCC_RTC_HSE_DIV_14
  3733. * @arg @ref LL_RCC_RTC_HSE_DIV_15
  3734. * @arg @ref LL_RCC_RTC_HSE_DIV_16
  3735. * @arg @ref LL_RCC_RTC_HSE_DIV_17
  3736. * @arg @ref LL_RCC_RTC_HSE_DIV_18
  3737. * @arg @ref LL_RCC_RTC_HSE_DIV_19
  3738. * @arg @ref LL_RCC_RTC_HSE_DIV_20
  3739. * @arg @ref LL_RCC_RTC_HSE_DIV_21
  3740. * @arg @ref LL_RCC_RTC_HSE_DIV_22
  3741. * @arg @ref LL_RCC_RTC_HSE_DIV_23
  3742. * @arg @ref LL_RCC_RTC_HSE_DIV_24
  3743. * @arg @ref LL_RCC_RTC_HSE_DIV_25
  3744. * @arg @ref LL_RCC_RTC_HSE_DIV_26
  3745. * @arg @ref LL_RCC_RTC_HSE_DIV_27
  3746. * @arg @ref LL_RCC_RTC_HSE_DIV_28
  3747. * @arg @ref LL_RCC_RTC_HSE_DIV_29
  3748. * @arg @ref LL_RCC_RTC_HSE_DIV_30
  3749. * @arg @ref LL_RCC_RTC_HSE_DIV_31
  3750. * @arg @ref LL_RCC_RTC_HSE_DIV_32
  3751. * @arg @ref LL_RCC_RTC_HSE_DIV_33
  3752. * @arg @ref LL_RCC_RTC_HSE_DIV_34
  3753. * @arg @ref LL_RCC_RTC_HSE_DIV_35
  3754. * @arg @ref LL_RCC_RTC_HSE_DIV_36
  3755. * @arg @ref LL_RCC_RTC_HSE_DIV_37
  3756. * @arg @ref LL_RCC_RTC_HSE_DIV_38
  3757. * @arg @ref LL_RCC_RTC_HSE_DIV_39
  3758. * @arg @ref LL_RCC_RTC_HSE_DIV_40
  3759. * @arg @ref LL_RCC_RTC_HSE_DIV_41
  3760. * @arg @ref LL_RCC_RTC_HSE_DIV_42
  3761. * @arg @ref LL_RCC_RTC_HSE_DIV_43
  3762. * @arg @ref LL_RCC_RTC_HSE_DIV_44
  3763. * @arg @ref LL_RCC_RTC_HSE_DIV_45
  3764. * @arg @ref LL_RCC_RTC_HSE_DIV_46
  3765. * @arg @ref LL_RCC_RTC_HSE_DIV_47
  3766. * @arg @ref LL_RCC_RTC_HSE_DIV_48
  3767. * @arg @ref LL_RCC_RTC_HSE_DIV_49
  3768. * @arg @ref LL_RCC_RTC_HSE_DIV_50
  3769. * @arg @ref LL_RCC_RTC_HSE_DIV_51
  3770. * @arg @ref LL_RCC_RTC_HSE_DIV_52
  3771. * @arg @ref LL_RCC_RTC_HSE_DIV_53
  3772. * @arg @ref LL_RCC_RTC_HSE_DIV_54
  3773. * @arg @ref LL_RCC_RTC_HSE_DIV_55
  3774. * @arg @ref LL_RCC_RTC_HSE_DIV_56
  3775. * @arg @ref LL_RCC_RTC_HSE_DIV_57
  3776. * @arg @ref LL_RCC_RTC_HSE_DIV_58
  3777. * @arg @ref LL_RCC_RTC_HSE_DIV_59
  3778. * @arg @ref LL_RCC_RTC_HSE_DIV_60
  3779. * @arg @ref LL_RCC_RTC_HSE_DIV_61
  3780. * @arg @ref LL_RCC_RTC_HSE_DIV_62
  3781. * @arg @ref LL_RCC_RTC_HSE_DIV_63
  3782. * @retval None
  3783. */
  3784. __STATIC_INLINE void LL_RCC_SetRTC_HSEPrescaler(uint32_t Prescaler)
  3785. {
  3786. MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, Prescaler);
  3787. }
  3788. /**
  3789. * @brief Get HSE Prescalers for RTC Clock
  3790. * @rmtoll CFGR RTCPRE LL_RCC_GetRTC_HSEPrescaler
  3791. * @retval Returned value can be one of the following values:
  3792. * @arg @ref LL_RCC_RTC_NOCLOCK
  3793. * @arg @ref LL_RCC_RTC_HSE_DIV_2
  3794. * @arg @ref LL_RCC_RTC_HSE_DIV_3
  3795. * @arg @ref LL_RCC_RTC_HSE_DIV_4
  3796. * @arg @ref LL_RCC_RTC_HSE_DIV_5
  3797. * @arg @ref LL_RCC_RTC_HSE_DIV_6
  3798. * @arg @ref LL_RCC_RTC_HSE_DIV_7
  3799. * @arg @ref LL_RCC_RTC_HSE_DIV_8
  3800. * @arg @ref LL_RCC_RTC_HSE_DIV_9
  3801. * @arg @ref LL_RCC_RTC_HSE_DIV_10
  3802. * @arg @ref LL_RCC_RTC_HSE_DIV_11
  3803. * @arg @ref LL_RCC_RTC_HSE_DIV_12
  3804. * @arg @ref LL_RCC_RTC_HSE_DIV_13
  3805. * @arg @ref LL_RCC_RTC_HSE_DIV_14
  3806. * @arg @ref LL_RCC_RTC_HSE_DIV_15
  3807. * @arg @ref LL_RCC_RTC_HSE_DIV_16
  3808. * @arg @ref LL_RCC_RTC_HSE_DIV_17
  3809. * @arg @ref LL_RCC_RTC_HSE_DIV_18
  3810. * @arg @ref LL_RCC_RTC_HSE_DIV_19
  3811. * @arg @ref LL_RCC_RTC_HSE_DIV_20
  3812. * @arg @ref LL_RCC_RTC_HSE_DIV_21
  3813. * @arg @ref LL_RCC_RTC_HSE_DIV_22
  3814. * @arg @ref LL_RCC_RTC_HSE_DIV_23
  3815. * @arg @ref LL_RCC_RTC_HSE_DIV_24
  3816. * @arg @ref LL_RCC_RTC_HSE_DIV_25
  3817. * @arg @ref LL_RCC_RTC_HSE_DIV_26
  3818. * @arg @ref LL_RCC_RTC_HSE_DIV_27
  3819. * @arg @ref LL_RCC_RTC_HSE_DIV_28
  3820. * @arg @ref LL_RCC_RTC_HSE_DIV_29
  3821. * @arg @ref LL_RCC_RTC_HSE_DIV_30
  3822. * @arg @ref LL_RCC_RTC_HSE_DIV_31
  3823. * @arg @ref LL_RCC_RTC_HSE_DIV_32
  3824. * @arg @ref LL_RCC_RTC_HSE_DIV_33
  3825. * @arg @ref LL_RCC_RTC_HSE_DIV_34
  3826. * @arg @ref LL_RCC_RTC_HSE_DIV_35
  3827. * @arg @ref LL_RCC_RTC_HSE_DIV_36
  3828. * @arg @ref LL_RCC_RTC_HSE_DIV_37
  3829. * @arg @ref LL_RCC_RTC_HSE_DIV_38
  3830. * @arg @ref LL_RCC_RTC_HSE_DIV_39
  3831. * @arg @ref LL_RCC_RTC_HSE_DIV_40
  3832. * @arg @ref LL_RCC_RTC_HSE_DIV_41
  3833. * @arg @ref LL_RCC_RTC_HSE_DIV_42
  3834. * @arg @ref LL_RCC_RTC_HSE_DIV_43
  3835. * @arg @ref LL_RCC_RTC_HSE_DIV_44
  3836. * @arg @ref LL_RCC_RTC_HSE_DIV_45
  3837. * @arg @ref LL_RCC_RTC_HSE_DIV_46
  3838. * @arg @ref LL_RCC_RTC_HSE_DIV_47
  3839. * @arg @ref LL_RCC_RTC_HSE_DIV_48
  3840. * @arg @ref LL_RCC_RTC_HSE_DIV_49
  3841. * @arg @ref LL_RCC_RTC_HSE_DIV_50
  3842. * @arg @ref LL_RCC_RTC_HSE_DIV_51
  3843. * @arg @ref LL_RCC_RTC_HSE_DIV_52
  3844. * @arg @ref LL_RCC_RTC_HSE_DIV_53
  3845. * @arg @ref LL_RCC_RTC_HSE_DIV_54
  3846. * @arg @ref LL_RCC_RTC_HSE_DIV_55
  3847. * @arg @ref LL_RCC_RTC_HSE_DIV_56
  3848. * @arg @ref LL_RCC_RTC_HSE_DIV_57
  3849. * @arg @ref LL_RCC_RTC_HSE_DIV_58
  3850. * @arg @ref LL_RCC_RTC_HSE_DIV_59
  3851. * @arg @ref LL_RCC_RTC_HSE_DIV_60
  3852. * @arg @ref LL_RCC_RTC_HSE_DIV_61
  3853. * @arg @ref LL_RCC_RTC_HSE_DIV_62
  3854. * @arg @ref LL_RCC_RTC_HSE_DIV_63
  3855. */
  3856. __STATIC_INLINE uint32_t LL_RCC_GetRTC_HSEPrescaler(void)
  3857. {
  3858. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_RTCPRE));
  3859. }
  3860. /**
  3861. * @}
  3862. */
  3863. /** @defgroup RCC_LL_EF_TIM_CLOCK_PRESCALER TIM
  3864. * @{
  3865. */
  3866. /**
  3867. * @brief Set Timers Clock Prescalers
  3868. * @rmtoll CFGR TIMPRE LL_RCC_SetTIMPrescaler
  3869. * @param Prescaler This parameter can be one of the following values:
  3870. * @arg @ref LL_RCC_TIM_PRESCALER_TWICE
  3871. * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES
  3872. * @retval None
  3873. */
  3874. __STATIC_INLINE void LL_RCC_SetTIMPrescaler(uint32_t Prescaler)
  3875. {
  3876. MODIFY_REG(RCC->CFGR, RCC_CFGR_TIMPRE, Prescaler);
  3877. }
  3878. /**
  3879. * @brief Get Timers Clock Prescalers
  3880. * @rmtoll CFGR TIMPRE LL_RCC_GetTIMPrescaler
  3881. * @retval Returned value can be one of the following values:
  3882. * @arg @ref LL_RCC_TIM_PRESCALER_TWICE
  3883. * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES
  3884. */
  3885. __STATIC_INLINE uint32_t LL_RCC_GetTIMPrescaler(void)
  3886. {
  3887. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_TIMPRE));
  3888. }
  3889. /**
  3890. * @}
  3891. */
  3892. #if defined(HRTIM1)
  3893. /** @defgroup RCC_LL_EF_HRTIM_SET_CLOCK_SOURCE HRTIM
  3894. * @{
  3895. */
  3896. /**
  3897. * @brief Set High Resolution Timers Clock Source
  3898. * @rmtoll CFGR HRTIMSEL LL_RCC_SetHRTIMClockSource
  3899. * @param Prescaler This parameter can be one of the following values:
  3900. * @arg @ref LL_RCC_HRTIM_CLKSOURCE_TIM
  3901. * @arg @ref LL_RCC_HRTIM_CLKSOURCE_CPU
  3902. * @retval None
  3903. */
  3904. __STATIC_INLINE void LL_RCC_SetHRTIMClockSource(uint32_t Prescaler)
  3905. {
  3906. MODIFY_REG(RCC->CFGR, RCC_CFGR_HRTIMSEL, Prescaler);
  3907. }
  3908. #endif /* HRTIM1 */
  3909. #if defined(HRTIM1)
  3910. /**
  3911. * @brief Get High Resolution Timers Clock Source
  3912. * @rmtoll CFGR HRTIMSEL LL_RCC_GetHRTIMClockSource
  3913. * @retval Returned value can be one of the following values:
  3914. * @arg @ref LL_RCC_HRTIM_CLKSOURCE_TIM
  3915. * @arg @ref LL_RCC_HRTIM_CLKSOURCE_CPU
  3916. */
  3917. __STATIC_INLINE uint32_t LL_RCC_GetHRTIMClockSource(void)
  3918. {
  3919. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HRTIMSEL));
  3920. }
  3921. /**
  3922. * @}
  3923. */
  3924. #endif /* HRTIM1 */
  3925. /** @defgroup RCC_LL_EF_PLL PLL
  3926. * @{
  3927. */
  3928. /**
  3929. * @brief Set the oscillator used as PLL clock source.
  3930. * @note PLLSRC can be written only when All PLLs are disabled.
  3931. * @rmtoll PLLCKSELR PLLSRC LL_RCC_PLL_SetSource
  3932. * @param PLLSource parameter can be one of the following values:
  3933. * @arg @ref LL_RCC_PLLSOURCE_HSI
  3934. * @arg @ref LL_RCC_PLLSOURCE_CSI
  3935. * @arg @ref LL_RCC_PLLSOURCE_HSE
  3936. * @arg @ref LL_RCC_PLLSOURCE_NONE
  3937. * @retval None
  3938. */
  3939. __STATIC_INLINE void LL_RCC_PLL_SetSource(uint32_t PLLSource)
  3940. {
  3941. MODIFY_REG(RCC->PLLCKSELR, RCC_PLLCKSELR_PLLSRC, PLLSource);
  3942. }
  3943. /**
  3944. * @brief Get the oscillator used as PLL clock source.
  3945. * @rmtoll PLLCKSELR PLLSRC LL_RCC_PLL_GetSource
  3946. * @retval Returned value can be one of the following values:
  3947. * @arg @ref LL_RCC_PLLSOURCE_HSI
  3948. * @arg @ref LL_RCC_PLLSOURCE_CSI
  3949. * @arg @ref LL_RCC_PLLSOURCE_HSE
  3950. * @arg @ref LL_RCC_PLLSOURCE_NONE
  3951. */
  3952. __STATIC_INLINE uint32_t LL_RCC_PLL_GetSource(void)
  3953. {
  3954. return (uint32_t)(READ_BIT(RCC->PLLCKSELR, RCC_PLLCKSELR_PLLSRC));
  3955. }
  3956. /**
  3957. * @brief Enable PLL1
  3958. * @rmtoll CR PLL1ON LL_RCC_PLL1_Enable
  3959. * @retval None
  3960. */
  3961. __STATIC_INLINE void LL_RCC_PLL1_Enable(void)
  3962. {
  3963. SET_BIT(RCC->CR, RCC_CR_PLL1ON);
  3964. }
  3965. /**
  3966. * @brief Disable PLL1
  3967. * @note Cannot be disabled if the PLL1 clock is used as the system clock
  3968. * @rmtoll CR PLL1ON LL_RCC_PLL1_Disable
  3969. * @retval None
  3970. */
  3971. __STATIC_INLINE void LL_RCC_PLL1_Disable(void)
  3972. {
  3973. CLEAR_BIT(RCC->CR, RCC_CR_PLL1ON);
  3974. }
  3975. /**
  3976. * @brief Check if PLL1 Ready
  3977. * @rmtoll CR PLL1RDY LL_RCC_PLL1_IsReady
  3978. * @retval State of bit (1 or 0).
  3979. */
  3980. __STATIC_INLINE uint32_t LL_RCC_PLL1_IsReady(void)
  3981. {
  3982. return ((READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == (RCC_CR_PLL1RDY))?1UL:0UL);
  3983. }
  3984. /**
  3985. * @brief Enable PLL1P
  3986. * @note This API shall be called only when PLL1 is disabled.
  3987. * @rmtoll PLLCFGR DIVP1EN LL_RCC_PLL1P_Enable
  3988. * @retval None
  3989. */
  3990. __STATIC_INLINE void LL_RCC_PLL1P_Enable(void)
  3991. {
  3992. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP1EN);
  3993. }
  3994. /**
  3995. * @brief Enable PLL1Q
  3996. * @note This API shall be called only when PLL1 is disabled.
  3997. * @rmtoll PLLCFGR DIVQ1EN LL_RCC_PLL1Q_Enable
  3998. * @retval None
  3999. */
  4000. __STATIC_INLINE void LL_RCC_PLL1Q_Enable(void)
  4001. {
  4002. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ1EN);
  4003. }
  4004. /**
  4005. * @brief Enable PLL1R
  4006. * @note This API shall be called only when PLL1 is disabled.
  4007. * @rmtoll PLLCFGR DIVR1EN LL_RCC_PLL1R_Enable
  4008. * @retval None
  4009. */
  4010. __STATIC_INLINE void LL_RCC_PLL1R_Enable(void)
  4011. {
  4012. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR1EN);
  4013. }
  4014. /**
  4015. * @brief Enable PLL1 FRACN
  4016. * @rmtoll PLLCFGR PLL1FRACEN LL_RCC_PLL1FRACN_Enable
  4017. * @retval None
  4018. */
  4019. __STATIC_INLINE void LL_RCC_PLL1FRACN_Enable(void)
  4020. {
  4021. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL1FRACEN);
  4022. }
  4023. /**
  4024. * @brief Check if PLL1 P is enabled
  4025. * @rmtoll PLLCFGR DIVP1EN LL_RCC_PLL1P_IsEnabled
  4026. * @retval State of bit (1 or 0).
  4027. */
  4028. __STATIC_INLINE uint32_t LL_RCC_PLL1P_IsEnabled(void)
  4029. {
  4030. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP1EN) == RCC_PLLCFGR_DIVP1EN)?1UL:0UL);
  4031. }
  4032. /**
  4033. * @brief Check if PLL1 Q is enabled
  4034. * @rmtoll PLLCFGR DIVQ1EN LL_RCC_PLL1Q_IsEnabled
  4035. * @retval State of bit (1 or 0).
  4036. */
  4037. __STATIC_INLINE uint32_t LL_RCC_PLL1Q_IsEnabled(void)
  4038. {
  4039. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ1EN) == RCC_PLLCFGR_DIVQ1EN)?1UL:0UL);
  4040. }
  4041. /**
  4042. * @brief Check if PLL1 R is enabled
  4043. * @rmtoll PLLCFGR DIVR1EN LL_RCC_PLL1R_IsEnabled
  4044. * @retval State of bit (1 or 0).
  4045. */
  4046. __STATIC_INLINE uint32_t LL_RCC_PLL1R_IsEnabled(void)
  4047. {
  4048. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR1EN) == RCC_PLLCFGR_DIVR1EN)?1UL:0UL);
  4049. }
  4050. /**
  4051. * @brief Check if PLL1 FRACN is enabled
  4052. * @rmtoll PLLCFGR PLL1FRACEN LL_RCC_PLL1FRACN_IsEnabled
  4053. * @retval State of bit (1 or 0).
  4054. */
  4055. __STATIC_INLINE uint32_t LL_RCC_PLL1FRACN_IsEnabled(void)
  4056. {
  4057. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL1FRACEN) == RCC_PLLCFGR_PLL1FRACEN)?1UL:0UL);
  4058. }
  4059. /**
  4060. * @brief Disable PLL1P
  4061. * @note This API shall be called only when PLL1 is disabled.
  4062. * @rmtoll PLLCFGR DIVP1EN LL_RCC_PLL1P_Disable
  4063. * @retval None
  4064. */
  4065. __STATIC_INLINE void LL_RCC_PLL1P_Disable(void)
  4066. {
  4067. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP1EN);
  4068. }
  4069. /**
  4070. * @brief Disable PLL1Q
  4071. * @note This API shall be called only when PLL1 is disabled.
  4072. * @rmtoll PLLCFGR DIVQ1EN LL_RCC_PLL1Q_Disable
  4073. * @retval None
  4074. */
  4075. __STATIC_INLINE void LL_RCC_PLL1Q_Disable(void)
  4076. {
  4077. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ1EN);
  4078. }
  4079. /**
  4080. * @brief Disable PLL1R
  4081. * @note This API shall be called only when PLL1 is disabled.
  4082. * @rmtoll PLLCFGR DIVR1EN LL_RCC_PLL1R_Disable
  4083. * @retval None
  4084. */
  4085. __STATIC_INLINE void LL_RCC_PLL1R_Disable(void)
  4086. {
  4087. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR1EN);
  4088. }
  4089. /**
  4090. * @brief Disable PLL1 FRACN
  4091. * @rmtoll PLLCFGR PLL1FRACEN LL_RCC_PLL1FRACN_Enable
  4092. * @retval None
  4093. */
  4094. __STATIC_INLINE void LL_RCC_PLL1FRACN_Disable(void)
  4095. {
  4096. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL1FRACEN);
  4097. }
  4098. /**
  4099. * @brief Set PLL1 VCO OutputRange
  4100. * @note This API shall be called only when PLL1 is disabled.
  4101. * @rmtoll PLLCFGR PLL1VCOSEL LL_RCC_PLL1_SetVCOOuputRange
  4102. * @param VCORange This parameter can be one of the following values:
  4103. * @arg @ref LL_RCC_PLLVCORANGE_WIDE
  4104. * @arg @ref LL_RCC_PLLVCORANGE_MEDIUM
  4105. * @retval None
  4106. */
  4107. __STATIC_INLINE void LL_RCC_PLL1_SetVCOOutputRange(uint32_t VCORange)
  4108. {
  4109. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL1VCOSEL, VCORange << RCC_PLLCFGR_PLL1VCOSEL_Pos);
  4110. }
  4111. /**
  4112. * @brief Set PLL1 VCO Input Range
  4113. * @note This API shall be called only when PLL1 is disabled.
  4114. * @rmtoll PLLCFGR PLL1RGE LL_RCC_PLL1_SetVCOInputRange
  4115. * @param InputRange This parameter can be one of the following values:
  4116. * @arg @ref LL_RCC_PLLINPUTRANGE_1_2
  4117. * @arg @ref LL_RCC_PLLINPUTRANGE_2_4
  4118. * @arg @ref LL_RCC_PLLINPUTRANGE_4_8
  4119. * @arg @ref LL_RCC_PLLINPUTRANGE_8_16
  4120. * @retval None
  4121. */
  4122. __STATIC_INLINE void LL_RCC_PLL1_SetVCOInputRange(uint32_t InputRange)
  4123. {
  4124. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL1RGE, InputRange << RCC_PLLCFGR_PLL1RGE_Pos);
  4125. }
  4126. /**
  4127. * @brief Get PLL1 N Coefficient
  4128. * @rmtoll PLL1DIVR N1 LL_RCC_PLL1_GetN
  4129. * @retval A value between 4 and 512
  4130. */
  4131. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetN(void)
  4132. {
  4133. return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_N1) >> RCC_PLL1DIVR_N1_Pos) + 1UL);
  4134. }
  4135. /**
  4136. * @brief Get PLL1 M Coefficient
  4137. * @rmtoll PLLCKSELR DIVM1 LL_RCC_PLL1_GetM
  4138. * @retval A value between 0 and 63
  4139. */
  4140. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetM(void)
  4141. {
  4142. return (uint32_t)(READ_BIT(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos);
  4143. }
  4144. /**
  4145. * @brief Get PLL1 P Coefficient
  4146. * @rmtoll PLL1DIVR P1 LL_RCC_PLL1_GetP
  4147. * @retval A value between 2 and 128
  4148. */
  4149. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetP(void)
  4150. {
  4151. return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) + 1UL);
  4152. }
  4153. /**
  4154. * @brief Get PLL1 Q Coefficient
  4155. * @rmtoll PLL1DIVR Q1 LL_RCC_PLL1_GetQ
  4156. * @retval A value between 1 and 128
  4157. */
  4158. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetQ(void)
  4159. {
  4160. return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) + 1UL);
  4161. }
  4162. /**
  4163. * @brief Get PLL1 R Coefficient
  4164. * @rmtoll PLL1DIVR R1 LL_RCC_PLL1_GetR
  4165. * @retval A value between 1 and 128
  4166. */
  4167. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetR(void)
  4168. {
  4169. return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) + 1UL);
  4170. }
  4171. /**
  4172. * @brief Get PLL1 FRACN Coefficient
  4173. * @rmtoll PLL1FRACR FRACN1 LL_RCC_PLL1_GetFRACN
  4174. * @retval A value between 0 and 8191 (0x1FFF)
  4175. */
  4176. __STATIC_INLINE uint32_t LL_RCC_PLL1_GetFRACN(void)
  4177. {
  4178. return (uint32_t)(READ_BIT(RCC->PLL1FRACR, RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  4179. }
  4180. /**
  4181. * @brief Set PLL1 N Coefficient
  4182. * @note This API shall be called only when PLL1 is disabled.
  4183. * @rmtoll PLL1DIVR N1 LL_RCC_PLL1_SetN
  4184. * @param N parameter can be a value between 4 and 512
  4185. */
  4186. __STATIC_INLINE void LL_RCC_PLL1_SetN(uint32_t N)
  4187. {
  4188. MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_N1, (N-1UL) << RCC_PLL1DIVR_N1_Pos);
  4189. }
  4190. /**
  4191. * @brief Set PLL1 M Coefficient
  4192. * @note This API shall be called only when PLL1 is disabled.
  4193. * @rmtoll PLLCKSELR DIVM1 LL_RCC_PLL1_SetM
  4194. * @param M parameter can be a value between 0 and 63
  4195. */
  4196. __STATIC_INLINE void LL_RCC_PLL1_SetM(uint32_t M)
  4197. {
  4198. MODIFY_REG(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM1, M << RCC_PLLCKSELR_DIVM1_Pos);
  4199. }
  4200. /**
  4201. * @brief Set PLL1 P Coefficient
  4202. * @note This API shall be called only when PLL1 is disabled.
  4203. * @rmtoll PLL1DIVR P1 LL_RCC_PLL1_SetP
  4204. * @param P parameter can be a value between 2 and 128 (ODD division factor not supportted)
  4205. */
  4206. __STATIC_INLINE void LL_RCC_PLL1_SetP(uint32_t P)
  4207. {
  4208. MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_P1, (P-1UL) << RCC_PLL1DIVR_P1_Pos);
  4209. }
  4210. /**
  4211. * @brief Set PLL1 Q Coefficient
  4212. * @note This API shall be called only when PLL1 is disabled.
  4213. * @rmtoll PLL1DIVR Q1 LL_RCC_PLL1_SetQ
  4214. * @param Q parameter can be a value between 1 and 128
  4215. */
  4216. __STATIC_INLINE void LL_RCC_PLL1_SetQ(uint32_t Q)
  4217. {
  4218. MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_Q1, (Q-1UL) << RCC_PLL1DIVR_Q1_Pos);
  4219. }
  4220. /**
  4221. * @brief Set PLL1 R Coefficient
  4222. * @note This API shall be called only when PLL1 is disabled.
  4223. * @rmtoll PLL1DIVR R1 LL_RCC_PLL1_SetR
  4224. * @param R parameter can be a value between 1 and 128
  4225. */
  4226. __STATIC_INLINE void LL_RCC_PLL1_SetR(uint32_t R)
  4227. {
  4228. MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_R1, (R-1UL) << RCC_PLL1DIVR_R1_Pos);
  4229. }
  4230. /**
  4231. * @brief Set PLL1 FRACN Coefficient
  4232. * @rmtoll PLL1FRACR FRACN1 LL_RCC_PLL1_SetFRACN
  4233. * @param FRACN parameter can be a value between 0 and 8191 (0x1FFF)
  4234. */
  4235. __STATIC_INLINE void LL_RCC_PLL1_SetFRACN(uint32_t FRACN)
  4236. {
  4237. MODIFY_REG(RCC->PLL1FRACR, RCC_PLL1FRACR_FRACN1, FRACN << RCC_PLL1FRACR_FRACN1_Pos);
  4238. }
  4239. /**
  4240. * @brief Enable PLL2
  4241. * @rmtoll CR PLL2ON LL_RCC_PLL2_Enable
  4242. * @retval None
  4243. */
  4244. __STATIC_INLINE void LL_RCC_PLL2_Enable(void)
  4245. {
  4246. SET_BIT(RCC->CR, RCC_CR_PLL2ON);
  4247. }
  4248. /**
  4249. * @brief Disable PLL2
  4250. * @note Cannot be disabled if the PLL2 clock is used as the system clock
  4251. * @rmtoll CR PLL2ON LL_RCC_PLL2_Disable
  4252. * @retval None
  4253. */
  4254. __STATIC_INLINE void LL_RCC_PLL2_Disable(void)
  4255. {
  4256. CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);
  4257. }
  4258. /**
  4259. * @brief Check if PLL2 Ready
  4260. * @rmtoll CR PLL2RDY LL_RCC_PLL2_IsReady
  4261. * @retval State of bit (1 or 0).
  4262. */
  4263. __STATIC_INLINE uint32_t LL_RCC_PLL2_IsReady(void)
  4264. {
  4265. return ((READ_BIT(RCC->CR, RCC_CR_PLL2RDY) == (RCC_CR_PLL2RDY))?1UL:0UL);
  4266. }
  4267. /**
  4268. * @brief Enable PLL2P
  4269. * @note This API shall be called only when PLL2 is disabled.
  4270. * @rmtoll PLLCFGR DIVP2EN LL_RCC_PLL2P_Enable
  4271. * @retval None
  4272. */
  4273. __STATIC_INLINE void LL_RCC_PLL2P_Enable(void)
  4274. {
  4275. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP2EN);
  4276. }
  4277. /**
  4278. * @brief Enable PLL2Q
  4279. * @note This API shall be called only when PLL2 is disabled.
  4280. * @rmtoll PLLCFGR DIVQ2EN LL_RCC_PLL2Q_Enable
  4281. * @retval None
  4282. */
  4283. __STATIC_INLINE void LL_RCC_PLL2Q_Enable(void)
  4284. {
  4285. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ2EN);
  4286. }
  4287. /**
  4288. * @brief Enable PLL2R
  4289. * @note This API shall be called only when PLL2 is disabled.
  4290. * @rmtoll PLLCFGR DIVR2EN LL_RCC_PLL2R_Enable
  4291. * @retval None
  4292. */
  4293. __STATIC_INLINE void LL_RCC_PLL2R_Enable(void)
  4294. {
  4295. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR2EN);
  4296. }
  4297. /**
  4298. * @brief Enable PLL2 FRACN
  4299. * @rmtoll PLLCFGR PLL2FRACEN LL_RCC_PLL2FRACN_Enable
  4300. * @retval None
  4301. */
  4302. __STATIC_INLINE void LL_RCC_PLL2FRACN_Enable(void)
  4303. {
  4304. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN);
  4305. }
  4306. /**
  4307. * @brief Check if PLL2 P is enabled
  4308. * @rmtoll PLLCFGR DIVP2EN LL_RCC_PLL2P_IsEnabled
  4309. * @retval State of bit (1 or 0).
  4310. */
  4311. __STATIC_INLINE uint32_t LL_RCC_PLL2P_IsEnabled(void)
  4312. {
  4313. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP2EN) == RCC_PLLCFGR_DIVP2EN)?1UL:0UL);
  4314. }
  4315. /**
  4316. * @brief Check if PLL2 Q is enabled
  4317. * @rmtoll PLLCFGR DIVQ2EN LL_RCC_PLL2Q_IsEnabled
  4318. * @retval State of bit (1 or 0).
  4319. */
  4320. __STATIC_INLINE uint32_t LL_RCC_PLL2Q_IsEnabled(void)
  4321. {
  4322. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ2EN) == RCC_PLLCFGR_DIVQ2EN)?1UL:0UL);
  4323. }
  4324. /**
  4325. * @brief Check if PLL2 R is enabled
  4326. * @rmtoll PLLCFGR DIVR2EN LL_RCC_PLL2R_IsEnabled
  4327. * @retval State of bit (1 or 0).
  4328. */
  4329. __STATIC_INLINE uint32_t LL_RCC_PLL2R_IsEnabled(void)
  4330. {
  4331. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR2EN) == RCC_PLLCFGR_DIVR2EN)?1UL:0UL);
  4332. }
  4333. /**
  4334. * @brief Check if PLL2 FRACN is enabled
  4335. * @rmtoll PLLCFGR PLL2FRACEN LL_RCC_PLL2FRACN_IsEnabled
  4336. * @retval State of bit (1 or 0).
  4337. */
  4338. __STATIC_INLINE uint32_t LL_RCC_PLL2FRACN_IsEnabled(void)
  4339. {
  4340. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN) == RCC_PLLCFGR_PLL2FRACEN)?1UL:0UL);
  4341. }
  4342. /**
  4343. * @brief Disable PLL2P
  4344. * @note This API shall be called only when PLL2 is disabled.
  4345. * @rmtoll PLLCFGR DIVP2EN LL_RCC_PLL2P_Disable
  4346. * @retval None
  4347. */
  4348. __STATIC_INLINE void LL_RCC_PLL2P_Disable(void)
  4349. {
  4350. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP2EN);
  4351. }
  4352. /**
  4353. * @brief Disable PLL2Q
  4354. * @note This API shall be called only when PLL2 is disabled.
  4355. * @rmtoll PLLCFGR DIVQ2EN LL_RCC_PLL2Q_Disable
  4356. * @retval None
  4357. */
  4358. __STATIC_INLINE void LL_RCC_PLL2Q_Disable(void)
  4359. {
  4360. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ2EN);
  4361. }
  4362. /**
  4363. * @brief Disable PLL2R
  4364. * @note This API shall be called only when PLL2 is disabled.
  4365. * @rmtoll PLLCFGR DIVR2EN LL_RCC_PLL2R_Disable
  4366. * @retval None
  4367. */
  4368. __STATIC_INLINE void LL_RCC_PLL2R_Disable(void)
  4369. {
  4370. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR2EN);
  4371. }
  4372. /**
  4373. * @brief Disable PLL2 FRACN
  4374. * @rmtoll PLLCFGR PLL2FRACEN LL_RCC_PLL2FRACN_Enable
  4375. * @retval None
  4376. */
  4377. __STATIC_INLINE void LL_RCC_PLL2FRACN_Disable(void)
  4378. {
  4379. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN);
  4380. }
  4381. /**
  4382. * @brief Set PLL2 VCO OutputRange
  4383. * @note This API shall be called only when PLL2 is disabled.
  4384. * @rmtoll PLLCFGR PLL2VCOSEL LL_RCC_PLL2_SetVCOOuputRange
  4385. * @param VCORange This parameter can be one of the following values:
  4386. * @arg @ref LL_RCC_PLLVCORANGE_WIDE
  4387. * @arg @ref LL_RCC_PLLVCORANGE_MEDIUM
  4388. * @retval None
  4389. */
  4390. __STATIC_INLINE void LL_RCC_PLL2_SetVCOOutputRange(uint32_t VCORange)
  4391. {
  4392. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2VCOSEL, VCORange << RCC_PLLCFGR_PLL2VCOSEL_Pos);
  4393. }
  4394. /**
  4395. * @brief Set PLL2 VCO Input Range
  4396. * @note This API shall be called only when PLL2 is disabled.
  4397. * @rmtoll PLLCFGR PLL2RGE LL_RCC_PLL2_SetVCOInputRange
  4398. * @param InputRange This parameter can be one of the following values:
  4399. * @arg @ref LL_RCC_PLLINPUTRANGE_1_2
  4400. * @arg @ref LL_RCC_PLLINPUTRANGE_2_4
  4401. * @arg @ref LL_RCC_PLLINPUTRANGE_4_8
  4402. * @arg @ref LL_RCC_PLLINPUTRANGE_8_16
  4403. * @retval None
  4404. */
  4405. __STATIC_INLINE void LL_RCC_PLL2_SetVCOInputRange(uint32_t InputRange)
  4406. {
  4407. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2RGE, InputRange << RCC_PLLCFGR_PLL2RGE_Pos);
  4408. }
  4409. /**
  4410. * @brief Get PLL2 N Coefficient
  4411. * @rmtoll PLL2DIVR N2 LL_RCC_PLL2_GetN
  4412. * @retval A value between 4 and 512
  4413. */
  4414. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetN(void)
  4415. {
  4416. return (uint32_t)((READ_BIT(RCC->PLL2DIVR, RCC_PLL2DIVR_N2) >> RCC_PLL2DIVR_N2_Pos) + 1UL);
  4417. }
  4418. /**
  4419. * @brief Get PLL2 M Coefficient
  4420. * @rmtoll PLLCKSELR DIVM2 LL_RCC_PLL2_GetM
  4421. * @retval A value between 0 and 63
  4422. */
  4423. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetM(void)
  4424. {
  4425. return (uint32_t)(READ_BIT(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM2) >> RCC_PLLCKSELR_DIVM2_Pos);
  4426. }
  4427. /**
  4428. * @brief Get PLL2 P Coefficient
  4429. * @rmtoll PLL2DIVR P2 LL_RCC_PLL2_GetP
  4430. * @retval A value between 1 and 128
  4431. */
  4432. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetP(void)
  4433. {
  4434. return (uint32_t)((READ_BIT(RCC->PLL2DIVR, RCC_PLL2DIVR_P2) >> RCC_PLL2DIVR_P2_Pos) + 1UL);
  4435. }
  4436. /**
  4437. * @brief Get PLL2 Q Coefficient
  4438. * @rmtoll PLL2DIVR Q2 LL_RCC_PLL2_GetQ
  4439. * @retval A value between 1 and 128
  4440. */
  4441. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetQ(void)
  4442. {
  4443. return (uint32_t)((READ_BIT(RCC->PLL2DIVR, RCC_PLL2DIVR_Q2) >> RCC_PLL2DIVR_Q2_Pos) + 1UL);
  4444. }
  4445. /**
  4446. * @brief Get PLL2 R Coefficient
  4447. * @rmtoll PLL2DIVR R2 LL_RCC_PLL2_GetR
  4448. * @retval A value between 1 and 128
  4449. */
  4450. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetR(void)
  4451. {
  4452. return (uint32_t)((READ_BIT(RCC->PLL2DIVR, RCC_PLL2DIVR_R2) >> RCC_PLL2DIVR_R2_Pos) + 1UL);
  4453. }
  4454. /**
  4455. * @brief Get PLL2 FRACN Coefficient
  4456. * @rmtoll PLL2FRACR FRACN2 LL_RCC_PLL2_GetFRACN
  4457. * @retval A value between 0 and 8191 (0x1FFF)
  4458. */
  4459. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetFRACN(void)
  4460. {
  4461. return (uint32_t)(READ_BIT(RCC->PLL2FRACR, RCC_PLL2FRACR_FRACN2) >> RCC_PLL2FRACR_FRACN2_Pos);
  4462. }
  4463. /**
  4464. * @brief Set PLL2 N Coefficient
  4465. * @note This API shall be called only when PLL2 is disabled.
  4466. * @rmtoll PLL2DIVR N2 LL_RCC_PLL2_SetN
  4467. * @param N parameter can be a value between 4 and 512
  4468. */
  4469. __STATIC_INLINE void LL_RCC_PLL2_SetN(uint32_t N)
  4470. {
  4471. MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_N2, (N-1UL) << RCC_PLL2DIVR_N2_Pos);
  4472. }
  4473. /**
  4474. * @brief Set PLL2 M Coefficient
  4475. * @note This API shall be called only when PLL2 is disabled.
  4476. * @rmtoll PLLCKSELR DIVM2 LL_RCC_PLL2_SetM
  4477. * @param M parameter can be a value between 0 and 63
  4478. */
  4479. __STATIC_INLINE void LL_RCC_PLL2_SetM(uint32_t M)
  4480. {
  4481. MODIFY_REG(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM2, M << RCC_PLLCKSELR_DIVM2_Pos);
  4482. }
  4483. /**
  4484. * @brief Set PLL2 P Coefficient
  4485. * @note This API shall be called only when PLL2 is disabled.
  4486. * @rmtoll PLL2DIVR P2 LL_RCC_PLL2_SetP
  4487. * @param P parameter can be a value between 1 and 128
  4488. */
  4489. __STATIC_INLINE void LL_RCC_PLL2_SetP(uint32_t P)
  4490. {
  4491. MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_P2, (P-1UL) << RCC_PLL2DIVR_P2_Pos);
  4492. }
  4493. /**
  4494. * @brief Set PLL2 Q Coefficient
  4495. * @note This API shall be called only when PLL2 is disabled.
  4496. * @rmtoll PLL2DIVR Q2 LL_RCC_PLL2_SetQ
  4497. * @param Q parameter can be a value between 1 and 128
  4498. */
  4499. __STATIC_INLINE void LL_RCC_PLL2_SetQ(uint32_t Q)
  4500. {
  4501. MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_Q2, (Q-1UL) << RCC_PLL2DIVR_Q2_Pos);
  4502. }
  4503. /**
  4504. * @brief Set PLL2 R Coefficient
  4505. * @note This API shall be called only when PLL2 is disabled.
  4506. * @rmtoll PLL2DIVR R2 LL_RCC_PLL2_SetR
  4507. * @param R parameter can be a value between 1 and 128
  4508. */
  4509. __STATIC_INLINE void LL_RCC_PLL2_SetR(uint32_t R)
  4510. {
  4511. MODIFY_REG(RCC->PLL2DIVR, RCC_PLL2DIVR_R2, (R-1UL) << RCC_PLL2DIVR_R2_Pos);
  4512. }
  4513. /**
  4514. * @brief Set PLL2 FRACN Coefficient
  4515. * @rmtoll PLL2FRACR FRACN2 LL_RCC_PLL2_SetFRACN
  4516. * @param FRACN parameter can be a value between 0 and 8191 (0x1FFF)
  4517. */
  4518. __STATIC_INLINE void LL_RCC_PLL2_SetFRACN(uint32_t FRACN)
  4519. {
  4520. MODIFY_REG(RCC->PLL2FRACR, RCC_PLL2FRACR_FRACN2, FRACN << RCC_PLL2FRACR_FRACN2_Pos);
  4521. }
  4522. /**
  4523. * @brief Enable PLL3
  4524. * @rmtoll CR PLL3ON LL_RCC_PLL3_Enable
  4525. * @retval None
  4526. */
  4527. __STATIC_INLINE void LL_RCC_PLL3_Enable(void)
  4528. {
  4529. SET_BIT(RCC->CR, RCC_CR_PLL3ON);
  4530. }
  4531. /**
  4532. * @brief Disable PLL3
  4533. * @note Cannot be disabled if the PLL3 clock is used as the system clock
  4534. * @rmtoll CR PLL3ON LL_RCC_PLL3_Disable
  4535. * @retval None
  4536. */
  4537. __STATIC_INLINE void LL_RCC_PLL3_Disable(void)
  4538. {
  4539. CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);
  4540. }
  4541. /**
  4542. * @brief Check if PLL3 Ready
  4543. * @rmtoll CR PLL3RDY LL_RCC_PLL3_IsReady
  4544. * @retval State of bit (1 or 0).
  4545. */
  4546. __STATIC_INLINE uint32_t LL_RCC_PLL3_IsReady(void)
  4547. {
  4548. return ((READ_BIT(RCC->CR, RCC_CR_PLL3RDY) == (RCC_CR_PLL3RDY))?1UL:0UL);
  4549. }
  4550. /**
  4551. * @brief Enable PLL3P
  4552. * @note This API shall be called only when PLL3 is disabled.
  4553. * @rmtoll PLLCFGR DIVP3EN LL_RCC_PLL3P_Enable
  4554. * @retval None
  4555. */
  4556. __STATIC_INLINE void LL_RCC_PLL3P_Enable(void)
  4557. {
  4558. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP3EN);
  4559. }
  4560. /**
  4561. * @brief Enable PLL3Q
  4562. * @note This API shall be called only when PLL3 is disabled.
  4563. * @rmtoll PLLCFGR DIVQ3EN LL_RCC_PLL3Q_Enable
  4564. * @retval None
  4565. */
  4566. __STATIC_INLINE void LL_RCC_PLL3Q_Enable(void)
  4567. {
  4568. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ3EN);
  4569. }
  4570. /**
  4571. * @brief Enable PLL3R
  4572. * @note This API shall be called only when PLL3 is disabled.
  4573. * @rmtoll PLLCFGR DIVR3EN LL_RCC_PLL3R_Enable
  4574. * @retval None
  4575. */
  4576. __STATIC_INLINE void LL_RCC_PLL3R_Enable(void)
  4577. {
  4578. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR3EN);
  4579. }
  4580. /**
  4581. * @brief Enable PLL3 FRACN
  4582. * @rmtoll PLLCFGR PLL3FRACEN LL_RCC_PLL3FRACN_Enable
  4583. * @retval None
  4584. */
  4585. __STATIC_INLINE void LL_RCC_PLL3FRACN_Enable(void)
  4586. {
  4587. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN);
  4588. }
  4589. /**
  4590. * @brief Check if PLL3 P is enabled
  4591. * @rmtoll PLLCFGR DIVP3EN LL_RCC_PLL3P_IsEnabled
  4592. * @retval State of bit (1 or 0).
  4593. */
  4594. __STATIC_INLINE uint32_t LL_RCC_PLL3P_IsEnabled(void)
  4595. {
  4596. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP3EN) == RCC_PLLCFGR_DIVP3EN)?1UL:0UL);
  4597. }
  4598. /**
  4599. * @brief Check if PLL3 Q is enabled
  4600. * @rmtoll PLLCFGR DIVQ3EN LL_RCC_PLL3Q_IsEnabled
  4601. * @retval State of bit (1 or 0).
  4602. */
  4603. __STATIC_INLINE uint32_t LL_RCC_PLL3Q_IsEnabled(void)
  4604. {
  4605. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ3EN) == RCC_PLLCFGR_DIVQ3EN)?1UL:0UL);
  4606. }
  4607. /**
  4608. * @brief Check if PLL3 R is enabled
  4609. * @rmtoll PLLCFGR DIVR3EN LL_RCC_PLL3R_IsEnabled
  4610. * @retval State of bit (1 or 0).
  4611. */
  4612. __STATIC_INLINE uint32_t LL_RCC_PLL3R_IsEnabled(void)
  4613. {
  4614. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR3EN) == RCC_PLLCFGR_DIVR3EN)?1UL:0UL);
  4615. }
  4616. /**
  4617. * @brief Check if PLL3 FRACN is enabled
  4618. * @rmtoll PLLCFGR PLL3FRACEN LL_RCC_PLL3FRACN_IsEnabled
  4619. * @retval State of bit (1 or 0).
  4620. */
  4621. __STATIC_INLINE uint32_t LL_RCC_PLL3FRACN_IsEnabled(void)
  4622. {
  4623. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN) == RCC_PLLCFGR_PLL3FRACEN)?1UL:0UL);
  4624. }
  4625. /**
  4626. * @brief Disable PLL3P
  4627. * @note This API shall be called only when PLL3 is disabled.
  4628. * @rmtoll PLLCFGR DIVP2EN LL_RCC_PLL3P_Disable
  4629. * @retval None
  4630. */
  4631. __STATIC_INLINE void LL_RCC_PLL3P_Disable(void)
  4632. {
  4633. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVP3EN);
  4634. }
  4635. /**
  4636. * @brief Disable PLL3Q
  4637. * @note This API shall be called only when PLL3 is disabled.
  4638. * @rmtoll PLLCFGR DIVQ3EN LL_RCC_PLL3Q_Disable
  4639. * @retval None
  4640. */
  4641. __STATIC_INLINE void LL_RCC_PLL3Q_Disable(void)
  4642. {
  4643. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVQ3EN);
  4644. }
  4645. /**
  4646. * @brief Disable PLL3R
  4647. * @note This API shall be called only when PLL3 is disabled.
  4648. * @rmtoll PLLCFGR DIVR3EN LL_RCC_PLL3R_Disable
  4649. * @retval None
  4650. */
  4651. __STATIC_INLINE void LL_RCC_PLL3R_Disable(void)
  4652. {
  4653. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_DIVR3EN);
  4654. }
  4655. /**
  4656. * @brief Disable PLL3 FRACN
  4657. * @rmtoll PLLCFGR PLL3FRACEN LL_RCC_PLL3FRACN_Enable
  4658. * @retval None
  4659. */
  4660. __STATIC_INLINE void LL_RCC_PLL3FRACN_Disable(void)
  4661. {
  4662. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN);
  4663. }
  4664. /**
  4665. * @brief Set PLL3 VCO OutputRange
  4666. * @note This API shall be called only when PLL3 is disabled.
  4667. * @rmtoll PLLCFGR PLL3VCOSEL LL_RCC_PLL3_SetVCOOuputRange
  4668. * @param VCORange This parameter can be one of the following values:
  4669. * @arg @ref LL_RCC_PLLVCORANGE_WIDE
  4670. * @arg @ref LL_RCC_PLLVCORANGE_MEDIUM
  4671. * @retval None
  4672. */
  4673. __STATIC_INLINE void LL_RCC_PLL3_SetVCOOutputRange(uint32_t VCORange)
  4674. {
  4675. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3VCOSEL, VCORange << RCC_PLLCFGR_PLL3VCOSEL_Pos);
  4676. }
  4677. /**
  4678. * @brief Set PLL3 VCO Input Range
  4679. * @note This API shall be called only when PLL3 is disabled.
  4680. * @rmtoll PLLCFGR PLL3RGE LL_RCC_PLL3_SetVCOInputRange
  4681. * @param InputRange This parameter can be one of the following values:
  4682. * @arg @ref LL_RCC_PLLINPUTRANGE_1_2
  4683. * @arg @ref LL_RCC_PLLINPUTRANGE_2_4
  4684. * @arg @ref LL_RCC_PLLINPUTRANGE_4_8
  4685. * @arg @ref LL_RCC_PLLINPUTRANGE_8_16
  4686. * @retval None
  4687. */
  4688. __STATIC_INLINE void LL_RCC_PLL3_SetVCOInputRange(uint32_t InputRange)
  4689. {
  4690. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3RGE, InputRange << RCC_PLLCFGR_PLL3RGE_Pos);
  4691. }
  4692. /**
  4693. * @brief Get PLL3 N Coefficient
  4694. * @rmtoll PLL3DIVR N3 LL_RCC_PLL3_GetN
  4695. * @retval A value between 4 and 512
  4696. */
  4697. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetN(void)
  4698. {
  4699. return (uint32_t)((READ_BIT(RCC->PLL3DIVR, RCC_PLL3DIVR_N3) >> RCC_PLL3DIVR_N3_Pos) + 1UL);
  4700. }
  4701. /**
  4702. * @brief Get PLL3 M Coefficient
  4703. * @rmtoll PLLCKSELR DIVM3 LL_RCC_PLL3_GetM
  4704. * @retval A value between 0 and 63
  4705. */
  4706. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetM(void)
  4707. {
  4708. return (uint32_t)(READ_BIT(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM3) >> RCC_PLLCKSELR_DIVM3_Pos);
  4709. }
  4710. /**
  4711. * @brief Get PLL3 P Coefficient
  4712. * @rmtoll PLL3DIVR P3 LL_RCC_PLL3_GetP
  4713. * @retval A value between 1 and 128
  4714. */
  4715. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetP(void)
  4716. {
  4717. return (uint32_t)((READ_BIT(RCC->PLL3DIVR, RCC_PLL3DIVR_P3) >> RCC_PLL3DIVR_P3_Pos) + 1UL);
  4718. }
  4719. /**
  4720. * @brief Get PLL3 Q Coefficient
  4721. * @rmtoll PLL3DIVR Q3 LL_RCC_PLL3_GetQ
  4722. * @retval A value between 1 and 128
  4723. */
  4724. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetQ(void)
  4725. {
  4726. return (uint32_t)((READ_BIT(RCC->PLL3DIVR, RCC_PLL3DIVR_Q3) >> RCC_PLL3DIVR_Q3_Pos) + 1UL);
  4727. }
  4728. /**
  4729. * @brief Get PLL3 R Coefficient
  4730. * @rmtoll PLL3DIVR R3 LL_RCC_PLL3_GetR
  4731. * @retval A value between 1 and 128
  4732. */
  4733. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetR(void)
  4734. {
  4735. return (uint32_t)((READ_BIT(RCC->PLL3DIVR, RCC_PLL3DIVR_R3) >> RCC_PLL3DIVR_R3_Pos) + 1UL);
  4736. }
  4737. /**
  4738. * @brief Get PLL3 FRACN Coefficient
  4739. * @rmtoll PLL3FRACR FRACN3 LL_RCC_PLL3_GetFRACN
  4740. * @retval A value between 0 and 8191 (0x1FFF)
  4741. */
  4742. __STATIC_INLINE uint32_t LL_RCC_PLL3_GetFRACN(void)
  4743. {
  4744. return (uint32_t)(READ_BIT(RCC->PLL3FRACR, RCC_PLL3FRACR_FRACN3) >> RCC_PLL3FRACR_FRACN3_Pos);
  4745. }
  4746. /**
  4747. * @brief Set PLL3 N Coefficient
  4748. * @note This API shall be called only when PLL3 is disabled.
  4749. * @rmtoll PLL3DIVR N3 LL_RCC_PLL3_SetN
  4750. * @param N parameter can be a value between 4 and 512
  4751. */
  4752. __STATIC_INLINE void LL_RCC_PLL3_SetN(uint32_t N)
  4753. {
  4754. MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_N3, (N-1UL) << RCC_PLL3DIVR_N3_Pos);
  4755. }
  4756. /**
  4757. * @brief Set PLL3 M Coefficient
  4758. * @note This API shall be called only when PLL3 is disabled.
  4759. * @rmtoll PLLCKSELR DIVM3 LL_RCC_PLL3_SetM
  4760. * @param M parameter can be a value between 0 and 63
  4761. */
  4762. __STATIC_INLINE void LL_RCC_PLL3_SetM(uint32_t M)
  4763. {
  4764. MODIFY_REG(RCC->PLLCKSELR, RCC_PLLCKSELR_DIVM3, M << RCC_PLLCKSELR_DIVM3_Pos);
  4765. }
  4766. /**
  4767. * @brief Set PLL3 P Coefficient
  4768. * @note This API shall be called only when PLL3 is disabled.
  4769. * @rmtoll PLL3DIVR P3 LL_RCC_PLL3_SetP
  4770. * @param P parameter can be a value between 1 and 128
  4771. */
  4772. __STATIC_INLINE void LL_RCC_PLL3_SetP(uint32_t P)
  4773. {
  4774. MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_P3, (P-1UL) << RCC_PLL3DIVR_P3_Pos);
  4775. }
  4776. /**
  4777. * @brief Set PLL3 Q Coefficient
  4778. * @note This API shall be called only when PLL3 is disabled.
  4779. * @rmtoll PLL3DIVR Q3 LL_RCC_PLL3_SetQ
  4780. * @param Q parameter can be a value between 1 and 128
  4781. */
  4782. __STATIC_INLINE void LL_RCC_PLL3_SetQ(uint32_t Q)
  4783. {
  4784. MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_Q3, (Q-1UL) << RCC_PLL3DIVR_Q3_Pos);
  4785. }
  4786. /**
  4787. * @brief Set PLL3 R Coefficient
  4788. * @note This API shall be called only when PLL3 is disabled.
  4789. * @rmtoll PLL3DIVR R3 LL_RCC_PLL3_SetR
  4790. * @param R parameter can be a value between 1 and 128
  4791. */
  4792. __STATIC_INLINE void LL_RCC_PLL3_SetR(uint32_t R)
  4793. {
  4794. MODIFY_REG(RCC->PLL3DIVR, RCC_PLL3DIVR_R3, (R-1UL) << RCC_PLL3DIVR_R3_Pos);
  4795. }
  4796. /**
  4797. * @brief Set PLL3 FRACN Coefficient
  4798. * @rmtoll PLL3FRACR FRACN3 LL_RCC_PLL3_SetFRACN
  4799. * @param FRACN parameter can be a value between 0 and 8191 (0x1FFF)
  4800. */
  4801. __STATIC_INLINE void LL_RCC_PLL3_SetFRACN(uint32_t FRACN)
  4802. {
  4803. MODIFY_REG(RCC->PLL3FRACR, RCC_PLL3FRACR_FRACN3, FRACN << RCC_PLL3FRACR_FRACN3_Pos);
  4804. }
  4805. /**
  4806. * @}
  4807. */
  4808. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  4809. * @{
  4810. */
  4811. /**
  4812. * @brief Clear LSI ready interrupt flag
  4813. * @rmtoll CICR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  4814. * @retval None
  4815. */
  4816. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  4817. {
  4818. SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC);
  4819. }
  4820. /**
  4821. * @brief Clear LSE ready interrupt flag
  4822. * @rmtoll CICR LSERDYC LL_RCC_ClearFlag_LSERDY
  4823. * @retval None
  4824. */
  4825. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  4826. {
  4827. SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
  4828. }
  4829. /**
  4830. * @brief Clear HSI ready interrupt flag
  4831. * @rmtoll CICR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  4832. * @retval None
  4833. */
  4834. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  4835. {
  4836. SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
  4837. }
  4838. /**
  4839. * @brief Clear HSE ready interrupt flag
  4840. * @rmtoll CICR HSERDYC LL_RCC_ClearFlag_HSERDY
  4841. * @retval None
  4842. */
  4843. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  4844. {
  4845. SET_BIT(RCC->CICR, RCC_CICR_HSERDYC);
  4846. }
  4847. /**
  4848. * @brief Clear CSI ready interrupt flag
  4849. * @rmtoll CICR CSIRDYC LL_RCC_ClearFlag_CSIRDY
  4850. * @retval None
  4851. */
  4852. __STATIC_INLINE void LL_RCC_ClearFlag_CSIRDY(void)
  4853. {
  4854. SET_BIT(RCC->CICR, RCC_CICR_CSIRDYC);
  4855. }
  4856. /**
  4857. * @brief Clear HSI48 ready interrupt flag
  4858. * @rmtoll CICR HSI48RDYC LL_RCC_ClearFlag_HSI48RDY
  4859. * @retval None
  4860. */
  4861. __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void)
  4862. {
  4863. SET_BIT(RCC->CICR, RCC_CICR_HSI48RDYC);
  4864. }
  4865. /**
  4866. * @brief Clear PLL1 ready interrupt flag
  4867. * @rmtoll CICR PLL1RDYC LL_RCC_ClearFlag_PLL1RDY
  4868. * @retval None
  4869. */
  4870. __STATIC_INLINE void LL_RCC_ClearFlag_PLL1RDY(void)
  4871. {
  4872. SET_BIT(RCC->CICR, RCC_CICR_PLLRDYC);
  4873. }
  4874. /**
  4875. * @brief Clear PLL2 ready interrupt flag
  4876. * @rmtoll CICR PLL2RDYC LL_RCC_ClearFlag_PLL2RDY
  4877. * @retval None
  4878. */
  4879. __STATIC_INLINE void LL_RCC_ClearFlag_PLL2RDY(void)
  4880. {
  4881. SET_BIT(RCC->CICR, RCC_CICR_PLL2RDYC);
  4882. }
  4883. /**
  4884. * @brief Clear PLL3 ready interrupt flag
  4885. * @rmtoll CICR PLL3RDYC LL_RCC_ClearFlag_PLL3RDY
  4886. * @retval None
  4887. */
  4888. __STATIC_INLINE void LL_RCC_ClearFlag_PLL3RDY(void)
  4889. {
  4890. SET_BIT(RCC->CICR, RCC_CICR_PLL3RDYC);
  4891. }
  4892. /**
  4893. * @brief Clear LSE Clock security system interrupt flag
  4894. * @rmtoll CICR LSECSSC LL_RCC_ClearFlag_LSECSS
  4895. * @retval None
  4896. */
  4897. __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
  4898. {
  4899. SET_BIT(RCC->CICR, RCC_CICR_LSECSSC);
  4900. }
  4901. /**
  4902. * @brief Clear HSE Clock security system interrupt flag
  4903. * @rmtoll CICR HSECSSC LL_RCC_ClearFlag_HSECSS
  4904. * @retval None
  4905. */
  4906. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  4907. {
  4908. SET_BIT(RCC->CICR, RCC_CICR_HSECSSC);
  4909. }
  4910. /**
  4911. * @brief Check if LSI ready interrupt occurred or not
  4912. * @rmtoll CIFR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  4913. * @retval State of bit (1 or 0).
  4914. */
  4915. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  4916. {
  4917. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF))?1UL:0UL);
  4918. }
  4919. /**
  4920. * @brief Check if LSE ready interrupt occurred or not
  4921. * @rmtoll CIFR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  4922. * @retval State of bit (1 or 0).
  4923. */
  4924. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  4925. {
  4926. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF))?1UL:0UL);
  4927. }
  4928. /**
  4929. * @brief Check if HSI ready interrupt occurred or not
  4930. * @rmtoll CIFR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  4931. * @retval State of bit (1 or 0).
  4932. */
  4933. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  4934. {
  4935. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF))?1UL:0UL);
  4936. }
  4937. /**
  4938. * @brief Check if HSE ready interrupt occurred or not
  4939. * @rmtoll CIFR HSERDYF LL_RCC_IsActiveFlag_HSERDY
  4940. * @retval State of bit (1 or 0).
  4941. */
  4942. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  4943. {
  4944. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF))?1UL:0UL);
  4945. }
  4946. /**
  4947. * @brief Check if CSI ready interrupt occurred or not
  4948. * @rmtoll CIFR CSIRDYF LL_RCC_IsActiveFlag_CSIRDY
  4949. * @retval State of bit (1 or 0).
  4950. */
  4951. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_CSIRDY(void)
  4952. {
  4953. return ((READ_BIT(RCC->CIFR, RCC_CIFR_CSIRDYF) == (RCC_CIFR_CSIRDYF))?1UL:0UL);
  4954. }
  4955. /**
  4956. * @brief Check if HSI48 ready interrupt occurred or not
  4957. * @rmtoll CIFR HSI48RDYF LL_RCC_IsActiveFlag_HSI48RDY
  4958. * @retval State of bit (1 or 0).
  4959. */
  4960. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void)
  4961. {
  4962. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSI48RDYF) == (RCC_CIFR_HSI48RDYF))?1UL:0UL);
  4963. }
  4964. /**
  4965. * @brief Check if PLL1 ready interrupt occurred or not
  4966. * @rmtoll CIFR PLLRDYF LL_RCC_IsActiveFlag_PLL1RDY
  4967. * @retval State of bit (1 or 0).
  4968. */
  4969. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL1RDY(void)
  4970. {
  4971. return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLLRDYF) == (RCC_CIFR_PLLRDYF))?1UL:0UL);
  4972. }
  4973. /**
  4974. * @brief Check if PLL2 ready interrupt occurred or not
  4975. * @rmtoll CIFR PLL2RDYF LL_RCC_IsActiveFlag_PLL2RDY
  4976. * @retval State of bit (1 or 0).
  4977. */
  4978. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL2RDY(void)
  4979. {
  4980. return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLL2RDYF) == (RCC_CIFR_PLL2RDYF))?1UL:0UL);
  4981. }
  4982. /**
  4983. * @brief Check if PLL3 ready interrupt occurred or not
  4984. * @rmtoll CIFR PLL3RDYF LL_RCC_IsActiveFlag_PLL3RDY
  4985. * @retval State of bit (1 or 0).
  4986. */
  4987. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL3RDY(void)
  4988. {
  4989. return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLL3RDYF) == (RCC_CIFR_PLL3RDYF))?1UL:0UL);
  4990. }
  4991. /**
  4992. * @brief Check if LSE Clock security system interrupt occurred or not
  4993. * @rmtoll CIFR LSECSSF LL_RCC_IsActiveFlag_LSECSS
  4994. * @retval State of bit (1 or 0).
  4995. */
  4996. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
  4997. {
  4998. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF))?1UL:0UL);
  4999. }
  5000. /**
  5001. * @brief Check if HSE Clock security system interrupt occurred or not
  5002. * @rmtoll CIFR HSECSSF LL_RCC_IsActiveFlag_HSECSS
  5003. * @retval State of bit (1 or 0).
  5004. */
  5005. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  5006. {
  5007. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSECSSF) == (RCC_CIFR_HSECSSF))?1UL:0UL);
  5008. }
  5009. /**
  5010. * @brief Check if RCC flag Low Power D1 reset is set or not.
  5011. * @rmtoll RSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST (*)\n
  5012. * RSR LPWR1RSTF LL_RCC_IsActiveFlag_LPWRRST (**)
  5013. *
  5014. * (*) Only available for single core devices
  5015. * (**) Only available for Dual core devices
  5016. * @retval State of bit (1 or 0).
  5017. */
  5018. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  5019. {
  5020. #if defined(DUAL_CORE)
  5021. return ((READ_BIT(RCC->RSR, RCC_RSR_LPWR1RSTF) == (RCC_RSR_LPWR1RSTF))?1UL:0UL);
  5022. #else
  5023. return ((READ_BIT(RCC->RSR, RCC_RSR_LPWRRSTF) == (RCC_RSR_LPWRRSTF))?1UL:0UL);
  5024. #endif /*DUAL_CORE*/
  5025. }
  5026. #if defined(DUAL_CORE)
  5027. /**
  5028. * @brief Check if RCC flag Low Power D2 reset is set or not.
  5029. * @rmtoll RSR LPWR2RSTF LL_RCC_IsActiveFlag_LPWR2RST
  5030. * @retval State of bit (1 or 0).
  5031. */
  5032. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWR2RST(void)
  5033. {
  5034. return ((READ_BIT(RCC->RSR, RCC_RSR_LPWR2RSTF) == (RCC_RSR_LPWR2RSTF))?1UL:0UL);
  5035. }
  5036. #endif /*DUAL_CORE*/
  5037. /**
  5038. * @brief Check if RCC flag Window Watchdog 1 reset is set or not.
  5039. * @rmtoll RSR WWDG1RSTF LL_RCC_IsActiveFlag_WWDG1RST
  5040. * @retval State of bit (1 or 0).
  5041. */
  5042. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDG1RST(void)
  5043. {
  5044. return ((READ_BIT(RCC->RSR, RCC_RSR_WWDG1RSTF) == (RCC_RSR_WWDG1RSTF))?1UL:0UL);
  5045. }
  5046. #if defined(DUAL_CORE)
  5047. /**
  5048. * @brief Check if RCC flag Window Watchdog 2 reset is set or not.
  5049. * @rmtoll RSR WWDG2RSTF LL_RCC_IsActiveFlag_WWDG2RST
  5050. * @retval State of bit (1 or 0).
  5051. */
  5052. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDG2RST(void)
  5053. {
  5054. return ((READ_BIT(RCC->RSR, RCC_RSR_WWDG2RSTF) == (RCC_RSR_WWDG2RSTF))?1UL:0UL);
  5055. }
  5056. #endif /*DUAL_CORE*/
  5057. /**
  5058. * @brief Check if RCC flag Independent Watchdog 1 reset is set or not.
  5059. * @rmtoll RSR IWDG1RSTF LL_RCC_IsActiveFlag_IWDG1RST
  5060. * @retval State of bit (1 or 0).
  5061. */
  5062. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDG1RST(void)
  5063. {
  5064. return ((READ_BIT(RCC->RSR, RCC_RSR_IWDG1RSTF) == (RCC_RSR_IWDG1RSTF))?1UL:0UL);
  5065. }
  5066. #if defined(DUAL_CORE)
  5067. /**
  5068. * @brief Check if RCC flag Independent Watchdog 2 reset is set or not.
  5069. * @rmtoll RSR IWDG2RSTF LL_RCC_IsActiveFlag_IWDG2RST
  5070. * @retval State of bit (1 or 0).
  5071. */
  5072. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDG2RST(void)
  5073. {
  5074. return ((READ_BIT(RCC->RSR, RCC_RSR_IWDG2RSTF) == (RCC_RSR_IWDG2RSTF))?1UL:0UL);
  5075. }
  5076. #endif /*DUAL_CORE*/
  5077. /**
  5078. * @brief Check if RCC flag Software reset is set or not.
  5079. * @rmtoll RSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST (*)\n
  5080. * RSR SFT1RSTF LL_RCC_IsActiveFlag_SFTRST (**)
  5081. *
  5082. * (*) Only available for single core devices
  5083. * (**) Only available for Dual core devices
  5084. * @retval State of bit (1 or 0).
  5085. */
  5086. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  5087. {
  5088. #if defined(DUAL_CORE)
  5089. return ((READ_BIT(RCC->RSR, RCC_RSR_SFT1RSTF) == (RCC_RSR_SFT1RSTF))?1UL:0UL);
  5090. #else
  5091. return ((READ_BIT(RCC->RSR, RCC_RSR_SFTRSTF) == (RCC_RSR_SFTRSTF))?1UL:0UL);
  5092. #endif /*DUAL_CORE*/
  5093. }
  5094. #if defined(DUAL_CORE)
  5095. /**
  5096. * @brief Check if RCC flag Software reset is set or not.
  5097. * @rmtoll RSR SFT2RSTF LL_RCC_IsActiveFlag_SFT2RST
  5098. * @retval State of bit (1 or 0).
  5099. */
  5100. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFT2RST(void)
  5101. {
  5102. return ((READ_BIT(RCC->RSR, RCC_RSR_SFT2RSTF) == (RCC_RSR_SFT2RSTF))?1UL:0UL);
  5103. }
  5104. #endif /*DUAL_CORE*/
  5105. /**
  5106. * @brief Check if RCC flag POR/PDR reset is set or not.
  5107. * @rmtoll RSR PORRSTF LL_RCC_IsActiveFlag_PORRST
  5108. * @retval State of bit (1 or 0).
  5109. */
  5110. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
  5111. {
  5112. return ((READ_BIT(RCC->RSR, RCC_RSR_PORRSTF) == (RCC_RSR_PORRSTF))?1UL:0UL);
  5113. }
  5114. /**
  5115. * @brief Check if RCC flag Pin reset is set or not.
  5116. * @rmtoll RSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  5117. * @retval State of bit (1 or 0).
  5118. */
  5119. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  5120. {
  5121. return ((READ_BIT(RCC->RSR, RCC_RSR_PINRSTF) == (RCC_RSR_PINRSTF))?1UL:0UL);
  5122. }
  5123. /**
  5124. * @brief Check if RCC flag BOR reset is set or not.
  5125. * @rmtoll RSR BORRSTF LL_RCC_IsActiveFlag_BORRST
  5126. * @retval State of bit (1 or 0).
  5127. */
  5128. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void)
  5129. {
  5130. return ((READ_BIT(RCC->RSR, RCC_RSR_BORRSTF) == (RCC_RSR_BORRSTF))?1UL:0UL);
  5131. }
  5132. #if defined(RCC_RSR_D1RSTF)
  5133. /**
  5134. * @brief Check if RCC flag D1 reset is set or not.
  5135. * @rmtoll RSR D1RSTF LL_RCC_IsActiveFlag_D1RST
  5136. * @retval State of bit (1 or 0).
  5137. */
  5138. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_D1RST(void)
  5139. {
  5140. return ((READ_BIT(RCC->RSR, RCC_RSR_D1RSTF) == (RCC_RSR_D1RSTF))?1UL:0UL);
  5141. }
  5142. #endif /* RCC_RSR_D1RSTF */
  5143. #if defined(RCC_RSR_CDRSTF)
  5144. /**
  5145. * @brief Check if RCC flag CD reset is set or not.
  5146. * @rmtoll RSR CDRSTF LL_RCC_IsActiveFlag_CDRST
  5147. * @retval State of bit (1 or 0).
  5148. */
  5149. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_CDRST(void)
  5150. {
  5151. return ((READ_BIT(RCC->RSR, RCC_RSR_CDRSTF) == (RCC_RSR_CDRSTF))?1UL:0UL);
  5152. }
  5153. #endif /* RCC_RSR_CDRSTF */
  5154. #if defined(RCC_RSR_D2RSTF)
  5155. /**
  5156. * @brief Check if RCC flag D2 reset is set or not.
  5157. * @rmtoll RSR D2RSTF LL_RCC_IsActiveFlag_D2RST
  5158. * @retval State of bit (1 or 0).
  5159. */
  5160. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_D2RST(void)
  5161. {
  5162. return ((READ_BIT(RCC->RSR, RCC_RSR_D2RSTF) == (RCC_RSR_D2RSTF))?1UL:0UL);
  5163. }
  5164. #endif /* RCC_RSR_D2RSTF */
  5165. #if defined(RCC_RSR_C1RSTF) || defined(RCC_RSR_CPURSTF)
  5166. /**
  5167. * @brief Check if RCC flag CPU reset is set or not.
  5168. * @rmtoll RSR CPURSTF LL_RCC_IsActiveFlag_CPURST (*)\n
  5169. * RSR C1RSTF LL_RCC_IsActiveFlag_CPURST (**)
  5170. *
  5171. * (*) Only available for single core devices
  5172. * (**) Only available for Dual core devices
  5173. * @retval State of bit (1 or 0).
  5174. */
  5175. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_CPURST(void)
  5176. {
  5177. #if defined(DUAL_CORE)
  5178. return ((READ_BIT(RCC->RSR, RCC_RSR_C1RSTF) == (RCC_RSR_C1RSTF))?1UL:0UL);
  5179. #else
  5180. return ((READ_BIT(RCC->RSR, RCC_RSR_CPURSTF) == (RCC_RSR_CPURSTF))?1UL:0UL);
  5181. #endif/*DUAL_CORE*/
  5182. }
  5183. #endif /* defined(RCC_RSR_C1RSTF) || defined(RCC_RSR_CPURSTF) */
  5184. #if defined(DUAL_CORE)
  5185. /**
  5186. * @brief Check if RCC flag CPU2 reset is set or not.
  5187. * @rmtoll RSR C2RSTF LL_RCC_IsActiveFlag_CPU2RST
  5188. * @retval State of bit (1 or 0).
  5189. */
  5190. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_CPU2RST(void)
  5191. {
  5192. return ((READ_BIT(RCC->RSR, RCC_RSR_C2RSTF) == (RCC_RSR_C2RSTF))?1UL:0UL);
  5193. }
  5194. #endif /*DUAL_CORE*/
  5195. /**
  5196. * @brief Set RMVF bit to clear all reset flags.
  5197. * @rmtoll RSR RMVF LL_RCC_ClearResetFlags
  5198. * @retval None
  5199. */
  5200. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  5201. {
  5202. SET_BIT(RCC->RSR, RCC_RSR_RMVF);
  5203. }
  5204. #if defined(DUAL_CORE)
  5205. /**
  5206. * @brief Check if RCC_C1 flag Low Power D1 reset is set or not.
  5207. * @rmtoll RSR LPWR1RSTF LL_C1_RCC_IsActiveFlag_LPWRRST
  5208. * @retval State of bit (1 or 0).
  5209. */
  5210. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_LPWRRST(void)
  5211. {
  5212. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_LPWR1RSTF) == (RCC_RSR_LPWR1RSTF))?1UL:0UL);
  5213. }
  5214. /**
  5215. * @brief Check if RCC_C1 flag Low Power D2 reset is set or not.
  5216. * @rmtoll RSR LPWR2RSTF LL_C1_RCC_IsActiveFlag_LPWR2RST
  5217. * @retval State of bit (1 or 0).
  5218. */
  5219. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_LPWR2RST(void)
  5220. {
  5221. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_LPWR2RSTF) == (RCC_RSR_LPWR2RSTF))?1UL:0UL);
  5222. }
  5223. /**
  5224. * @brief Check if RCC_C1 flag Window Watchdog 1 reset is set or not.
  5225. * @rmtoll RSR WWDG1RSTF LL_C1_RCC_IsActiveFlag_WWDG1RST
  5226. * @retval State of bit (1 or 0).
  5227. */
  5228. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_WWDG1RST(void)
  5229. {
  5230. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_WWDG1RSTF) == (RCC_RSR_WWDG1RSTF))?1UL:0UL);
  5231. }
  5232. /**
  5233. * @brief Check if RCC_C1 flag Window Watchdog 2 reset is set or not.
  5234. * @rmtoll RSR WWDG2RSTF LL_C1_RCC_IsActiveFlag_WWDG2RST
  5235. * @retval State of bit (1 or 0).
  5236. */
  5237. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_WWDG2RST(void)
  5238. {
  5239. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_WWDG2RSTF) == (RCC_RSR_WWDG2RSTF))?1UL:0UL);
  5240. }
  5241. /**
  5242. * @brief Check if RCC_C1 flag Independent Watchdog 1 reset is set or not.
  5243. * @rmtoll RSR IWDG1RSTF LL_C1_RCC_IsActiveFlag_IWDG1RST
  5244. * @retval State of bit (1 or 0).
  5245. */
  5246. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_IWDG1RST(void)
  5247. {
  5248. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_IWDG1RSTF) == (RCC_RSR_IWDG1RSTF))?1UL:0UL);
  5249. }
  5250. /**
  5251. * @brief Check if RCC_C1 flag Independent Watchdog 2 reset is set or not.
  5252. * @rmtoll RSR IWDG2RSTF LL_C1_RCC_IsActiveFlag_IWDG2RST
  5253. * @retval State of bit (1 or 0).
  5254. */
  5255. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_IWDG2RST(void)
  5256. {
  5257. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_IWDG2RSTF) == (RCC_RSR_IWDG2RSTF))?1UL:0UL);
  5258. }
  5259. /**
  5260. * @brief Check if RCC_C1 flag Software reset is set or not.
  5261. * @rmtoll RSR SFT1RSTF LL_C1_RCC_IsActiveFlag_SFTRST
  5262. * @retval State of bit (1 or 0).
  5263. */
  5264. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_SFTRST(void)
  5265. {
  5266. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_SFT1RSTF) == (RCC_RSR_SFT1RSTF))?1UL:0UL);
  5267. }
  5268. /**
  5269. * @brief Check if RCC_C1 flag Software reset is set or not.
  5270. * @rmtoll RSR SFT2RSTF LL_C1_RCC_IsActiveFlag_SFT2RST
  5271. * @retval State of bit (1 or 0).
  5272. */
  5273. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_SFT2RST(void)
  5274. {
  5275. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_SFT2RSTF) == (RCC_RSR_SFT2RSTF))?1UL:0UL);
  5276. }
  5277. /**
  5278. * @brief Check if RCC_C1 flag POR/PDR reset is set or not.
  5279. * @rmtoll RSR PORRSTF LL_C1_RCC_IsActiveFlag_PORRST
  5280. * @retval State of bit (1 or 0).
  5281. */
  5282. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_PORRST(void)
  5283. {
  5284. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_PORRSTF) == (RCC_RSR_PORRSTF))?1UL:0UL);
  5285. }
  5286. /**
  5287. * @brief Check if RCC_C1 flag Pin reset is set or not.
  5288. * @rmtoll RSR PINRSTF LL_C1_RCC_IsActiveFlag_PINRST
  5289. * @retval State of bit (1 or 0).
  5290. */
  5291. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_PINRST(void)
  5292. {
  5293. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_PINRSTF) == (RCC_RSR_PINRSTF))?1UL:0UL);
  5294. }
  5295. /**
  5296. * @brief Check if RCC_C1 flag BOR reset is set or not.
  5297. * @rmtoll RSR BORRSTF LL_C1_RCC_IsActiveFlag_BORRST
  5298. * @retval State of bit (1 or 0).
  5299. */
  5300. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_BORRST(void)
  5301. {
  5302. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_BORRSTF) == (RCC_RSR_BORRSTF))?1UL:0UL);
  5303. }
  5304. /**
  5305. * @brief Check if RCC_C1 flag D1 reset is set or not.
  5306. * @rmtoll RSR D1RSTF LL_C1_RCC_IsActiveFlag_D1RST
  5307. * @retval State of bit (1 or 0).
  5308. */
  5309. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_D1RST(void)
  5310. {
  5311. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_D1RSTF) == (RCC_RSR_D1RSTF))?1UL:0UL);
  5312. }
  5313. /**
  5314. * @brief Check if RCC_C1 flag D2 reset is set or not.
  5315. * @rmtoll RSR D2RSTF LL_C1_RCC_IsActiveFlag_D2RST
  5316. * @retval State of bit (1 or 0).
  5317. */
  5318. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_D2RST(void)
  5319. {
  5320. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_D2RSTF) == (RCC_RSR_D2RSTF))?1UL:0UL);
  5321. }
  5322. /**
  5323. * @brief Check if RCC_C1 flag CPU reset is set or not.
  5324. * @rmtoll RSR C1RSTF LL_C1_RCC_IsActiveFlag_CPURST
  5325. * @retval State of bit (1 or 0).
  5326. */
  5327. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_CPURST(void)
  5328. {
  5329. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_C1RSTF) == (RCC_RSR_C1RSTF))?1UL:0UL);
  5330. }
  5331. /**
  5332. * @brief Check if RCC_C1 flag CPU2 reset is set or not.
  5333. * @rmtoll RSR C2RSTF LL_C1_RCC_IsActiveFlag_CPU2RST
  5334. * @retval State of bit (1 or 0).
  5335. */
  5336. __STATIC_INLINE uint32_t LL_C1_RCC_IsActiveFlag_CPU2RST(void)
  5337. {
  5338. return ((READ_BIT(RCC_C1->RSR, RCC_RSR_C2RSTF) == (RCC_RSR_C2RSTF))?1UL:0UL);
  5339. }
  5340. /**
  5341. * @brief Set RMVF bit to clear the reset flags.
  5342. * @rmtoll RSR RMVF LL_C1_RCC_ClearResetFlags
  5343. * @retval None
  5344. */
  5345. __STATIC_INLINE void LL_C1_RCC_ClearResetFlags(void)
  5346. {
  5347. SET_BIT(RCC_C1->RSR, RCC_RSR_RMVF);
  5348. }
  5349. /**
  5350. * @brief Check if RCC_C2 flag Low Power D1 reset is set or not.
  5351. * @rmtoll RSR LPWR1RSTF LL_C2_RCC_IsActiveFlag_LPWRRST
  5352. * @retval State of bit (1 or 0).
  5353. */
  5354. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_LPWRRST(void)
  5355. {
  5356. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_LPWR1RSTF) == (RCC_RSR_LPWR1RSTF))?1UL:0UL);
  5357. }
  5358. /**
  5359. * @brief Check if RCC_C2 flag Low Power D2 reset is set or not.
  5360. * @rmtoll RSR LPWR2RSTF LL_C2_RCC_IsActiveFlag_LPWR2RST
  5361. * @retval State of bit (1 or 0).
  5362. */
  5363. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_LPWR2RST(void)
  5364. {
  5365. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_LPWR2RSTF) == (RCC_RSR_LPWR2RSTF))?1UL:0UL);
  5366. }
  5367. /**
  5368. * @brief Check if RCC_C2 flag Window Watchdog 1 reset is set or not.
  5369. * @rmtoll RSR WWDG1RSTF LL_C2_RCC_IsActiveFlag_WWDG1RST
  5370. * @retval State of bit (1 or 0).
  5371. */
  5372. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_WWDG1RST(void)
  5373. {
  5374. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_WWDG1RSTF) == (RCC_RSR_WWDG1RSTF))?1UL:0UL);
  5375. }
  5376. /**
  5377. * @brief Check if RCC_C2 flag Window Watchdog 2 reset is set or not.
  5378. * @rmtoll RSR WWDG2RSTF LL_C2_RCC_IsActiveFlag_WWDG2RST
  5379. * @retval State of bit (1 or 0).
  5380. */
  5381. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_WWDG2RST(void)
  5382. {
  5383. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_WWDG2RSTF) == (RCC_RSR_WWDG2RSTF))?1UL:0UL);
  5384. }
  5385. /**
  5386. * @brief Check if RCC_C2 flag Independent Watchdog 1 reset is set or not.
  5387. * @rmtoll RSR IWDG1RSTF LL_C2_RCC_IsActiveFlag_IWDG1RST
  5388. * @retval State of bit (1 or 0).
  5389. */
  5390. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_IWDG1RST(void)
  5391. {
  5392. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_IWDG1RSTF) == (RCC_RSR_IWDG1RSTF))?1UL:0UL);
  5393. }
  5394. /**
  5395. * @brief Check if RCC_C2 flag Independent Watchdog 2 reset is set or not.
  5396. * @rmtoll RSR IWDG2RSTF LL_C2_RCC_IsActiveFlag_IWDG2RST
  5397. * @retval State of bit (1 or 0).
  5398. */
  5399. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_IWDG2RST(void)
  5400. {
  5401. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_IWDG2RSTF) == (RCC_RSR_IWDG2RSTF))?1UL:0UL);
  5402. }
  5403. /**
  5404. * @brief Check if RCC_C2 flag Software reset is set or not.
  5405. * @rmtoll RSR SFT1RSTF LL_C2_RCC_IsActiveFlag_SFTRST
  5406. * @retval State of bit (1 or 0).
  5407. */
  5408. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_SFTRST(void)
  5409. {
  5410. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_SFT1RSTF) == (RCC_RSR_SFT1RSTF))?1UL:0UL);
  5411. }
  5412. /**
  5413. * @brief Check if RCC_C2 flag Software reset is set or not.
  5414. * @rmtoll RSR SFT2RSTF LL_C2_RCC_IsActiveFlag_SFT2RST
  5415. * @retval State of bit (1 or 0).
  5416. */
  5417. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_SFT2RST(void)
  5418. {
  5419. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_SFT2RSTF) == (RCC_RSR_SFT2RSTF))?1UL:0UL);
  5420. }
  5421. /**
  5422. * @brief Check if RCC_C2 flag POR/PDR reset is set or not.
  5423. * @rmtoll RSR PORRSTF LL_C2_RCC_IsActiveFlag_PORRST
  5424. * @retval State of bit (1 or 0).
  5425. */
  5426. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_PORRST(void)
  5427. {
  5428. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_PORRSTF) == (RCC_RSR_PORRSTF))?1UL:0UL);
  5429. }
  5430. /**
  5431. * @brief Check if RCC_C2 flag Pin reset is set or not.
  5432. * @rmtoll RSR PINRSTF LL_C2_RCC_IsActiveFlag_PINRST
  5433. * @retval State of bit (1 or 0).
  5434. */
  5435. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_PINRST(void)
  5436. {
  5437. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_PINRSTF) == (RCC_RSR_PINRSTF))?1UL:0UL);
  5438. }
  5439. /**
  5440. * @brief Check if RCC_C2 flag BOR reset is set or not.
  5441. * @rmtoll RSR BORRSTF LL_C2_RCC_IsActiveFlag_BORRST
  5442. * @retval State of bit (1 or 0).
  5443. */
  5444. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_BORRST(void)
  5445. {
  5446. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_BORRSTF) == (RCC_RSR_BORRSTF))?1UL:0UL);
  5447. }
  5448. /**
  5449. * @brief Check if RCC_C2 flag D1 reset is set or not.
  5450. * @rmtoll RSR D1RSTF LL_C2_RCC_IsActiveFlag_D1RST
  5451. * @retval State of bit (1 or 0).
  5452. */
  5453. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_D1RST(void)
  5454. {
  5455. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_D1RSTF) == (RCC_RSR_D1RSTF))?1UL:0UL);
  5456. }
  5457. /**
  5458. * @brief Check if RCC_C2 flag D2 reset is set or not.
  5459. * @rmtoll RSR D2RSTF LL_C2_RCC_IsActiveFlag_D2RST
  5460. * @retval State of bit (1 or 0).
  5461. */
  5462. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_D2RST(void)
  5463. {
  5464. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_D2RSTF) == (RCC_RSR_D2RSTF))?1UL:0UL);
  5465. }
  5466. /**
  5467. * @brief Check if RCC_C2 flag CPU reset is set or not.
  5468. * @rmtoll RSR C1RSTF LL_C2_RCC_IsActiveFlag_CPURST
  5469. * @retval State of bit (1 or 0).
  5470. */
  5471. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_CPURST(void)
  5472. {
  5473. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_C1RSTF) == (RCC_RSR_C1RSTF))?1UL:0UL);
  5474. }
  5475. /**
  5476. * @brief Check if RCC_C2 flag CPU2 reset is set or not.
  5477. * @rmtoll RSR C2RSTF LL_C2_RCC_IsActiveFlag_CPU2RST
  5478. * @retval State of bit (1 or 0).
  5479. */
  5480. __STATIC_INLINE uint32_t LL_C2_RCC_IsActiveFlag_CPU2RST(void)
  5481. {
  5482. return ((READ_BIT(RCC_C2->RSR, RCC_RSR_C2RSTF) == (RCC_RSR_C2RSTF))?1UL:0UL);
  5483. }
  5484. /**
  5485. * @brief Set RMVF bit to clear the reset flags.
  5486. * @rmtoll RSR RMVF LL_C2_RCC_ClearResetFlags
  5487. * @retval None
  5488. */
  5489. __STATIC_INLINE void LL_C2_RCC_ClearResetFlags(void)
  5490. {
  5491. SET_BIT(RCC_C2->RSR, RCC_RSR_RMVF);
  5492. }
  5493. #endif /*DUAL_CORE*/
  5494. /**
  5495. * @}
  5496. */
  5497. /** @defgroup RCC_LL_EF_IT_Management IT Management
  5498. * @{
  5499. */
  5500. /**
  5501. * @brief Enable LSI ready interrupt
  5502. * @rmtoll CIER LSIRDYIE LL_RCC_EnableIT_LSIRDY
  5503. * @retval None
  5504. */
  5505. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  5506. {
  5507. SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  5508. }
  5509. /**
  5510. * @brief Enable LSE ready interrupt
  5511. * @rmtoll CIER LSERDYIE LL_RCC_EnableIT_LSERDY
  5512. * @retval None
  5513. */
  5514. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  5515. {
  5516. SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  5517. }
  5518. /**
  5519. * @brief Enable HSI ready interrupt
  5520. * @rmtoll CIER HSIRDYIE LL_RCC_EnableIT_HSIRDY
  5521. * @retval None
  5522. */
  5523. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  5524. {
  5525. SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  5526. }
  5527. /**
  5528. * @brief Enable HSE ready interrupt
  5529. * @rmtoll CIER HSERDYIE LL_RCC_EnableIT_HSERDY
  5530. * @retval None
  5531. */
  5532. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  5533. {
  5534. SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
  5535. }
  5536. /**
  5537. * @brief Enable CSI ready interrupt
  5538. * @rmtoll CIER CSIRDYIE LL_RCC_EnableIT_CSIRDY
  5539. * @retval None
  5540. */
  5541. __STATIC_INLINE void LL_RCC_EnableIT_CSIRDY(void)
  5542. {
  5543. SET_BIT(RCC->CIER, RCC_CIER_CSIRDYIE);
  5544. }
  5545. /**
  5546. * @brief Enable HSI48 ready interrupt
  5547. * @rmtoll CIER HSI48RDYIE LL_RCC_EnableIT_HSI48RDY
  5548. * @retval None
  5549. */
  5550. __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void)
  5551. {
  5552. SET_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
  5553. }
  5554. /**
  5555. * @brief Enable PLL1 ready interrupt
  5556. * @rmtoll CIER PLL1RDYIE LL_RCC_EnableIT_PLL1RDY
  5557. * @retval None
  5558. */
  5559. __STATIC_INLINE void LL_RCC_EnableIT_PLL1RDY(void)
  5560. {
  5561. SET_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE);
  5562. }
  5563. /**
  5564. * @brief Enable PLL2 ready interrupt
  5565. * @rmtoll CIER PLL2RDYIE LL_RCC_EnableIT_PLL2RDY
  5566. * @retval None
  5567. */
  5568. __STATIC_INLINE void LL_RCC_EnableIT_PLL2RDY(void)
  5569. {
  5570. SET_BIT(RCC->CIER, RCC_CIER_PLL2RDYIE);
  5571. }
  5572. /**
  5573. * @brief Enable PLL3 ready interrupt
  5574. * @rmtoll CIER PLL3RDYIE LL_RCC_EnableIT_PLL3RDY
  5575. * @retval None
  5576. */
  5577. __STATIC_INLINE void LL_RCC_EnableIT_PLL3RDY(void)
  5578. {
  5579. SET_BIT(RCC->CIER, RCC_CIER_PLL3RDYIE);
  5580. }
  5581. /**
  5582. * @brief Enable LSECSS interrupt
  5583. * @rmtoll CIER LSECSSIE LL_RCC_EnableIT_LSECSS
  5584. * @retval None
  5585. */
  5586. __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void)
  5587. {
  5588. SET_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
  5589. }
  5590. /**
  5591. * @brief Disable LSI ready interrupt
  5592. * @rmtoll CIER LSIRDYIE LL_RCC_DisableIT_LSIRDY
  5593. * @retval None
  5594. */
  5595. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  5596. {
  5597. CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  5598. }
  5599. /**
  5600. * @brief Disable LSE ready interrupt
  5601. * @rmtoll CIER LSERDYIE LL_RCC_DisableIT_LSERDY
  5602. * @retval None
  5603. */
  5604. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  5605. {
  5606. CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  5607. }
  5608. /**
  5609. * @brief Disable HSI ready interrupt
  5610. * @rmtoll CIER HSIRDYIE LL_RCC_DisableIT_HSIRDY
  5611. * @retval None
  5612. */
  5613. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  5614. {
  5615. CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  5616. }
  5617. /**
  5618. * @brief Disable HSE ready interrupt
  5619. * @rmtoll CIER HSERDYIE LL_RCC_DisableIT_HSERDY
  5620. * @retval None
  5621. */
  5622. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  5623. {
  5624. CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
  5625. }
  5626. /**
  5627. * @brief Disable CSI ready interrupt
  5628. * @rmtoll CIER CSIRDYIE LL_RCC_DisableIT_CSIRDY
  5629. * @retval None
  5630. */
  5631. __STATIC_INLINE void LL_RCC_DisableIT_CSIRDY(void)
  5632. {
  5633. CLEAR_BIT(RCC->CIER, RCC_CIER_CSIRDYIE);
  5634. }
  5635. /**
  5636. * @brief Disable HSI48 ready interrupt
  5637. * @rmtoll CIER HSI48RDYIE LL_RCC_DisableIT_HSI48RDY
  5638. * @retval None
  5639. */
  5640. __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void)
  5641. {
  5642. CLEAR_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
  5643. }
  5644. /**
  5645. * @brief Disable PLL1 ready interrupt
  5646. * @rmtoll CIER PLL1RDYIE LL_RCC_DisableIT_PLL1RDY
  5647. * @retval None
  5648. */
  5649. __STATIC_INLINE void LL_RCC_DisableIT_PLL1RDY(void)
  5650. {
  5651. CLEAR_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE);
  5652. }
  5653. /**
  5654. * @brief Disable PLL2 ready interrupt
  5655. * @rmtoll CIER PLL2RDYIE LL_RCC_DisableIT_PLL2RDY
  5656. * @retval None
  5657. */
  5658. __STATIC_INLINE void LL_RCC_DisableIT_PLL2RDY(void)
  5659. {
  5660. CLEAR_BIT(RCC->CIER, RCC_CIER_PLL2RDYIE);
  5661. }
  5662. /**
  5663. * @brief Disable PLL3 ready interrupt
  5664. * @rmtoll CIER PLL3RDYIE LL_RCC_DisableIT_PLL3RDY
  5665. * @retval None
  5666. */
  5667. __STATIC_INLINE void LL_RCC_DisableIT_PLL3RDY(void)
  5668. {
  5669. CLEAR_BIT(RCC->CIER, RCC_CIER_PLL3RDYIE);
  5670. }
  5671. /**
  5672. * @brief Disable LSECSS interrupt
  5673. * @rmtoll CIER LSECSSIE LL_RCC_DisableIT_LSECSS
  5674. * @retval None
  5675. */
  5676. __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void)
  5677. {
  5678. CLEAR_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
  5679. }
  5680. /**
  5681. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  5682. * @rmtoll CIER LSIRDYIE LL_RCC_IsEnableIT_LSIRDY
  5683. * @retval State of bit (1 or 0).
  5684. */
  5685. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_LSIRDY(void)
  5686. {
  5687. return ((READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == RCC_CIER_LSIRDYIE)?1UL:0UL);
  5688. }
  5689. /**
  5690. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  5691. * @rmtoll CIER LSERDYIE LL_RCC_IsEnableIT_LSERDY
  5692. * @retval State of bit (1 or 0).
  5693. */
  5694. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_LSERDY(void)
  5695. {
  5696. return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == RCC_CIER_LSERDYIE)?1UL:0UL);
  5697. }
  5698. /**
  5699. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  5700. * @rmtoll CIER HSIRDYIE LL_RCC_IsEnableIT_HSIRDY
  5701. * @retval State of bit (1 or 0).
  5702. */
  5703. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_HSIRDY(void)
  5704. {
  5705. return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == RCC_CIER_HSIRDYIE)?1UL:0UL);
  5706. }
  5707. /**
  5708. * @brief Checks if HSE ready interrupt source is enabled or disabled.
  5709. * @rmtoll CIER HSERDYIE LL_RCC_IsEnableIT_HSERDY
  5710. * @retval State of bit (1 or 0).
  5711. */
  5712. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_HSERDY(void)
  5713. {
  5714. return ((READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == RCC_CIER_HSERDYIE)?1UL:0UL);
  5715. }
  5716. /**
  5717. * @brief Checks if CSI ready interrupt source is enabled or disabled.
  5718. * @rmtoll CIER CSIRDYIE LL_RCC_IsEnableIT_CSIRDY
  5719. * @retval State of bit (1 or 0).
  5720. */
  5721. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_CSIRDY(void)
  5722. {
  5723. return ((READ_BIT(RCC->CIER, RCC_CIER_CSIRDYIE) == RCC_CIER_CSIRDYIE)?1UL:0UL);
  5724. }
  5725. /**
  5726. * @brief Checks if HSI48 ready interrupt source is enabled or disabled.
  5727. * @rmtoll CIER HSI48RDYIE LL_RCC_IsEnableIT_HSI48RDY
  5728. * @retval State of bit (1 or 0).
  5729. */
  5730. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_HSI48RDY(void)
  5731. {
  5732. return ((READ_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE) == RCC_CIER_HSI48RDYIE)?1UL:0UL);
  5733. }
  5734. /**
  5735. * @brief Checks if PLL1 ready interrupt source is enabled or disabled.
  5736. * @rmtoll CIER PLL1RDYIE LL_RCC_IsEnableIT_PLL1RDY
  5737. * @retval State of bit (1 or 0).
  5738. */
  5739. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_PLL1RDY(void)
  5740. {
  5741. return ((READ_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE) == RCC_CIER_PLL1RDYIE)?1UL:0UL);
  5742. }
  5743. /**
  5744. * @brief Checks if PLL2 ready interrupt source is enabled or disabled.
  5745. * @rmtoll CIER PLL2RDYIE LL_RCC_IsEnableIT_PLL2RDY
  5746. * @retval State of bit (1 or 0).
  5747. */
  5748. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_PLL2RDY(void)
  5749. {
  5750. return ((READ_BIT(RCC->CIER, RCC_CIER_PLL2RDYIE) == RCC_CIER_PLL2RDYIE)?1UL:0UL);
  5751. }
  5752. /**
  5753. * @brief Checks if PLL3 ready interrupt source is enabled or disabled.
  5754. * @rmtoll CIER PLL3RDYIE LL_RCC_IsEnableIT_PLL3RDY
  5755. * @retval State of bit (1 or 0).
  5756. */
  5757. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_PLL3RDY(void)
  5758. {
  5759. return ((READ_BIT(RCC->CIER, RCC_CIER_PLL3RDYIE) == RCC_CIER_PLL3RDYIE)?1UL:0UL);
  5760. }
  5761. /**
  5762. * @brief Checks if LSECSS interrupt source is enabled or disabled.
  5763. * @rmtoll CIER LSECSSIE LL_RCC_IsEnableIT_LSECSS
  5764. * @retval State of bit (1 or 0).
  5765. */
  5766. __STATIC_INLINE uint32_t LL_RCC_IsEnableIT_LSECSS(void)
  5767. {
  5768. return ((READ_BIT(RCC->CIER, RCC_CIER_LSECSSIE) == RCC_CIER_LSECSSIE)?1UL:0UL);
  5769. }
  5770. /**
  5771. * @}
  5772. */
  5773. #if defined(USE_FULL_LL_DRIVER)
  5774. /** @defgroup RCC_LL_EF_Init De-initialization function
  5775. * @{
  5776. */
  5777. void LL_RCC_DeInit(void);
  5778. /**
  5779. * @}
  5780. */
  5781. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  5782. * @{
  5783. */
  5784. uint32_t LL_RCC_CalcPLLClockFreq(uint32_t PLLInputFreq, uint32_t M, uint32_t N, uint32_t FRACN, uint32_t PQR);
  5785. void LL_RCC_GetPLL1ClockFreq(LL_PLL_ClocksTypeDef *PLL_Clocks);
  5786. void LL_RCC_GetPLL2ClockFreq(LL_PLL_ClocksTypeDef *PLL_Clocks);
  5787. void LL_RCC_GetPLL3ClockFreq(LL_PLL_ClocksTypeDef *PLL_Clocks);
  5788. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  5789. uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
  5790. uint32_t LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource);
  5791. uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
  5792. uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource);
  5793. uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource);
  5794. uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
  5795. uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource);
  5796. uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource);
  5797. uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource);
  5798. uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  5799. uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource);
  5800. #if defined(DFSDM2_BASE)
  5801. uint32_t LL_RCC_GetDFSDM2ClockFreq(uint32_t DFSDMxSource);
  5802. #endif /* DFSDM2 */
  5803. #if defined(DSI)
  5804. uint32_t LL_RCC_GetDSIClockFreq(uint32_t DSIxSource);
  5805. #endif /* DSI */
  5806. uint32_t LL_RCC_GetSPDIFClockFreq(uint32_t SPDIFxSource);
  5807. uint32_t LL_RCC_GetSPIClockFreq(uint32_t SPIxSource);
  5808. uint32_t LL_RCC_GetSWPClockFreq(uint32_t SWPxSource);
  5809. uint32_t LL_RCC_GetFDCANClockFreq(uint32_t FDCANxSource);
  5810. uint32_t LL_RCC_GetFMCClockFreq(uint32_t FMCxSource);
  5811. #if defined(QUADSPI)
  5812. uint32_t LL_RCC_GetQSPIClockFreq(uint32_t QSPIxSource);
  5813. #endif /* QUADSPI */
  5814. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  5815. uint32_t LL_RCC_GetOSPIClockFreq(uint32_t OSPIxSource);
  5816. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  5817. uint32_t LL_RCC_GetCLKPClockFreq(uint32_t CLKPxSource);
  5818. /**
  5819. * @}
  5820. */
  5821. #endif /* USE_FULL_LL_DRIVER */
  5822. /**
  5823. * @}
  5824. */
  5825. /**
  5826. * @}
  5827. */
  5828. #endif /* defined(RCC) */
  5829. /**
  5830. * @}
  5831. */
  5832. #ifdef __cplusplus
  5833. }
  5834. #endif
  5835. #endif /* STM32H7xx_LL_RCC_H */
  5836. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/