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.
 
 
 

2258 lines
77 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f0xx_ll_rcc.h
  4. * @author MCD Application Team
  5. * @brief Header file of RCC LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  10. *
  11. * Redistribution and use in source and binary forms, with or without modification,
  12. * are permitted provided that the following conditions are met:
  13. * 1. Redistributions of source code must retain the above copyright notice,
  14. * this list of conditions and the following disclaimer.
  15. * 2. Redistributions in binary form must reproduce the above copyright notice,
  16. * this list of conditions and the following disclaimer in the documentation
  17. * and/or other materials provided with the distribution.
  18. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  19. * may be used to endorse or promote products derived from this software
  20. * without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. *
  33. ******************************************************************************
  34. */
  35. /* Define to prevent recursive inclusion -------------------------------------*/
  36. #ifndef __STM32F0xx_LL_RCC_H
  37. #define __STM32F0xx_LL_RCC_H
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /* Includes ------------------------------------------------------------------*/
  42. #include "stm32f0xx.h"
  43. /** @addtogroup STM32F0xx_LL_Driver
  44. * @{
  45. */
  46. #if defined(RCC)
  47. /** @defgroup RCC_LL RCC
  48. * @{
  49. */
  50. /* Private types -------------------------------------------------------------*/
  51. /* Private variables ---------------------------------------------------------*/
  52. /* Private constants ---------------------------------------------------------*/
  53. /** @defgroup RCC_LL_Private_Constants RCC Private Constants
  54. * @{
  55. */
  56. /* Defines used for the bit position in the register and perform offsets*/
  57. #define RCC_POSITION_HPRE (uint32_t)4U /*!< field position in register RCC_CFGR */
  58. #define RCC_POSITION_PPRE1 (uint32_t)8U /*!< field position in register RCC_CFGR */
  59. #define RCC_POSITION_PLLMUL (uint32_t)18U /*!< field position in register RCC_CFGR */
  60. #define RCC_POSITION_HSICAL (uint32_t)8U /*!< field position in register RCC_CR */
  61. #define RCC_POSITION_HSITRIM (uint32_t)3U /*!< field position in register RCC_CR */
  62. #define RCC_POSITION_HSI14TRIM (uint32_t)3U /*!< field position in register RCC_CR2 */
  63. #define RCC_POSITION_HSI14CAL (uint32_t)8U /*!< field position in register RCC_CR2 */
  64. #if defined(RCC_HSI48_SUPPORT)
  65. #define RCC_POSITION_HSI48CAL (uint32_t)24U /*!< field position in register RCC_CR2 */
  66. #endif /* RCC_HSI48_SUPPORT */
  67. #define RCC_POSITION_USART1SW (uint32_t)0U /*!< field position in register RCC_CFGR3 */
  68. #define RCC_POSITION_USART2SW (uint32_t)16U /*!< field position in register RCC_CFGR3 */
  69. #define RCC_POSITION_USART3SW (uint32_t)18U /*!< field position in register RCC_CFGR3 */
  70. /**
  71. * @}
  72. */
  73. /* Private macros ------------------------------------------------------------*/
  74. #if defined(USE_FULL_LL_DRIVER)
  75. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  76. * @{
  77. */
  78. /**
  79. * @}
  80. */
  81. #endif /*USE_FULL_LL_DRIVER*/
  82. /* Exported types ------------------------------------------------------------*/
  83. #if defined(USE_FULL_LL_DRIVER)
  84. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  85. * @{
  86. */
  87. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  88. * @{
  89. */
  90. /**
  91. * @brief RCC Clocks Frequency Structure
  92. */
  93. typedef struct
  94. {
  95. uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
  96. uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
  97. uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
  98. } LL_RCC_ClocksTypeDef;
  99. /**
  100. * @}
  101. */
  102. /**
  103. * @}
  104. */
  105. #endif /* USE_FULL_LL_DRIVER */
  106. /* Exported constants --------------------------------------------------------*/
  107. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  108. * @{
  109. */
  110. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  111. * @brief Defines used to adapt values of different oscillators
  112. * @note These values could be modified in the user environment according to
  113. * HW set-up.
  114. * @{
  115. */
  116. #if !defined (HSE_VALUE)
  117. #define HSE_VALUE 8000000U /*!< Value of the HSE oscillator in Hz */
  118. #endif /* HSE_VALUE */
  119. #if !defined (HSI_VALUE)
  120. #define HSI_VALUE 8000000U /*!< Value of the HSI oscillator in Hz */
  121. #endif /* HSI_VALUE */
  122. #if !defined (LSE_VALUE)
  123. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  124. #endif /* LSE_VALUE */
  125. #if !defined (LSI_VALUE)
  126. #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */
  127. #endif /* LSI_VALUE */
  128. #if defined(RCC_HSI48_SUPPORT)
  129. #if !defined (HSI48_VALUE)
  130. #define HSI48_VALUE 48000000U /*!< Value of the HSI48 oscillator in Hz */
  131. #endif /* HSI48_VALUE */
  132. #endif /* RCC_HSI48_SUPPORT */
  133. /**
  134. * @}
  135. */
  136. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  137. * @brief Flags defines which can be used with LL_RCC_WriteReg function
  138. * @{
  139. */
  140. #define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */
  141. #define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */
  142. #define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */
  143. #define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */
  144. #define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */
  145. #define LL_RCC_CIR_HSI14RDYC RCC_CIR_HSI14RDYC /*!< HSI14 Ready Interrupt Clear */
  146. #if defined(RCC_HSI48_SUPPORT)
  147. #define LL_RCC_CIR_HSI48RDYC RCC_CIR_HSI48RDYC /*!< HSI48 Ready Interrupt Clear */
  148. #endif /* RCC_HSI48_SUPPORT */
  149. #define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */
  150. /**
  151. * @}
  152. */
  153. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  154. * @brief Flags defines which can be used with LL_RCC_ReadReg function
  155. * @{
  156. */
  157. #define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */
  158. #define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */
  159. #define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */
  160. #define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */
  161. #define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */
  162. #define LL_RCC_CIR_HSI14RDYF RCC_CIR_HSI14RDYF /*!< HSI14 Ready Interrupt flag */
  163. #if defined(RCC_HSI48_SUPPORT)
  164. #define LL_RCC_CIR_HSI48RDYF RCC_CIR_HSI48RDYF /*!< HSI48 Ready Interrupt flag */
  165. #endif /* RCC_HSI48_SUPPORT */
  166. #define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */
  167. #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */
  168. #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
  169. #define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */
  170. #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
  171. #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
  172. #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
  173. #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */
  174. #if defined(RCC_CSR_V18PWRRSTF)
  175. #define LL_RCC_CSR_V18PWRRSTF RCC_CSR_V18PWRRSTF /*!< Reset flag of the 1.8 V domain. */
  176. #endif /* RCC_CSR_V18PWRRSTF */
  177. /**
  178. * @}
  179. */
  180. /** @defgroup RCC_LL_EC_IT IT Defines
  181. * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
  182. * @{
  183. */
  184. #define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */
  185. #define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */
  186. #define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */
  187. #define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */
  188. #define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */
  189. #define LL_RCC_CIR_HSI14RDYIE RCC_CIR_HSI14RDYIE /*!< HSI14 Ready Interrupt Enable */
  190. #if defined(RCC_HSI48_SUPPORT)
  191. #define LL_RCC_CIR_HSI48RDYIE RCC_CIR_HSI48RDYIE /*!< HSI48 Ready Interrupt Enable */
  192. #endif /* RCC_HSI48_SUPPORT */
  193. /**
  194. * @}
  195. */
  196. /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
  197. * @{
  198. */
  199. #define LL_RCC_LSEDRIVE_LOW ((uint32_t)0x00000000U) /*!< Xtal mode lower driving capability */
  200. #define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */
  201. #define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */
  202. #define LL_RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */
  203. /**
  204. * @}
  205. */
  206. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  207. * @{
  208. */
  209. #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */
  210. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */
  211. #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */
  212. #if defined(RCC_CFGR_SW_HSI48)
  213. #define LL_RCC_SYS_CLKSOURCE_HSI48 RCC_CFGR_SW_HSI48 /*!< HSI48 selection as system clock */
  214. #endif /* RCC_CFGR_SW_HSI48 */
  215. /**
  216. * @}
  217. */
  218. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  219. * @{
  220. */
  221. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
  222. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
  223. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */
  224. #if defined(RCC_CFGR_SWS_HSI48)
  225. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI48 RCC_CFGR_SWS_HSI48 /*!< HSI48 used as system clock */
  226. #endif /* RCC_CFGR_SWS_HSI48 */
  227. /**
  228. * @}
  229. */
  230. /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
  231. * @{
  232. */
  233. #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */
  234. #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */
  235. #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */
  236. #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */
  237. #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */
  238. #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */
  239. #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
  240. #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
  241. #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
  242. /**
  243. * @}
  244. */
  245. /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
  246. * @{
  247. */
  248. #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE_DIV1 /*!< HCLK not divided */
  249. #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE_DIV2 /*!< HCLK divided by 2 */
  250. #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE_DIV4 /*!< HCLK divided by 4 */
  251. #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE_DIV8 /*!< HCLK divided by 8 */
  252. #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE_DIV16 /*!< HCLK divided by 16 */
  253. /**
  254. * @}
  255. */
  256. /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
  257. * @{
  258. */
  259. #define LL_RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCOSEL_NOCLOCK /*!< MCO output disabled, no clock on MCO */
  260. #define LL_RCC_MCO1SOURCE_HSI14 RCC_CFGR_MCOSEL_HSI14 /*!< HSI14 oscillator clock selected */
  261. #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_SYSCLK /*!< SYSCLK selection as MCO source */
  262. #define LL_RCC_MCO1SOURCE_HSI RCC_CFGR_MCOSEL_HSI /*!< HSI selection as MCO source */
  263. #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_HSE /*!< HSE selection as MCO source */
  264. #define LL_RCC_MCO1SOURCE_LSI RCC_CFGR_MCOSEL_LSI /*!< LSI selection as MCO source */
  265. #define LL_RCC_MCO1SOURCE_LSE RCC_CFGR_MCOSEL_LSE /*!< LSE selection as MCO source */
  266. #if defined(RCC_CFGR_MCOSEL_HSI48)
  267. #define LL_RCC_MCO1SOURCE_HSI48 RCC_CFGR_MCOSEL_HSI48 /*!< HSI48 selection as MCO source */
  268. #endif /* RCC_CFGR_MCOSEL_HSI48 */
  269. #define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2 RCC_CFGR_MCOSEL_PLL_DIV2 /*!< PLL clock divided by 2*/
  270. #if defined(RCC_CFGR_PLLNODIV)
  271. #define LL_RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCOSEL_PLL_DIV2 | RCC_CFGR_PLLNODIV) /*!< PLL clock selected*/
  272. #endif /* RCC_CFGR_PLLNODIV */
  273. /**
  274. * @}
  275. */
  276. /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
  277. * @{
  278. */
  279. #define LL_RCC_MCO1_DIV_1 ((uint32_t)0x00000000U)/*!< MCO Clock divided by 1 */
  280. #if defined(RCC_CFGR_MCOPRE)
  281. #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO Clock divided by 2 */
  282. #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO Clock divided by 4 */
  283. #define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO Clock divided by 8 */
  284. #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO Clock divided by 16 */
  285. #define LL_RCC_MCO1_DIV_32 RCC_CFGR_MCOPRE_DIV32 /*!< MCO Clock divided by 32 */
  286. #define LL_RCC_MCO1_DIV_64 RCC_CFGR_MCOPRE_DIV64 /*!< MCO Clock divided by 64 */
  287. #define LL_RCC_MCO1_DIV_128 RCC_CFGR_MCOPRE_DIV128 /*!< MCO Clock divided by 128 */
  288. #endif /* RCC_CFGR_MCOPRE */
  289. /**
  290. * @}
  291. */
  292. #if defined(USE_FULL_LL_DRIVER)
  293. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  294. * @{
  295. */
  296. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  297. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  298. /**
  299. * @}
  300. */
  301. #endif /* USE_FULL_LL_DRIVER */
  302. /** @defgroup RCC_LL_EC_USART1_CLKSOURCE Peripheral USART clock source selection
  303. * @{
  304. */
  305. #define LL_RCC_USART1_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_PCLK) /*!< PCLK1 clock used as USART1 clock source */
  306. #define LL_RCC_USART1_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_SYSCLK) /*!< System clock selected as USART1 clock source */
  307. #define LL_RCC_USART1_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_LSE) /*!< LSE oscillator clock used as USART1 clock source */
  308. #define LL_RCC_USART1_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_HSI) /*!< HSI oscillator clock used as USART1 clock source */
  309. #if defined(RCC_CFGR3_USART2SW)
  310. #define LL_RCC_USART2_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_PCLK) /*!< PCLK1 clock used as USART2 clock source */
  311. #define LL_RCC_USART2_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_SYSCLK) /*!< System clock selected as USART2 clock source */
  312. #define LL_RCC_USART2_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_LSE) /*!< LSE oscillator clock used as USART2 clock source */
  313. #define LL_RCC_USART2_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_HSI) /*!< HSI oscillator clock used as USART2 clock source */
  314. #endif /* RCC_CFGR3_USART2SW */
  315. #if defined(RCC_CFGR3_USART3SW)
  316. #define LL_RCC_USART3_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_PCLK) /*!< PCLK1 clock used as USART3 clock source */
  317. #define LL_RCC_USART3_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_SYSCLK) /*!< System clock selected as USART3 clock source */
  318. #define LL_RCC_USART3_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_LSE) /*!< LSE oscillator clock used as USART3 clock source */
  319. #define LL_RCC_USART3_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_HSI) /*!< HSI oscillator clock used as USART3 clock source */
  320. #endif /* RCC_CFGR3_USART3SW */
  321. /**
  322. * @}
  323. */
  324. /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE Peripheral I2C clock source selection
  325. * @{
  326. */
  327. #define LL_RCC_I2C1_CLKSOURCE_HSI RCC_CFGR3_I2C1SW_HSI /*!< HSI oscillator clock used as I2C1 clock source */
  328. #define LL_RCC_I2C1_CLKSOURCE_SYSCLK RCC_CFGR3_I2C1SW_SYSCLK /*!< System clock selected as I2C1 clock source */
  329. /**
  330. * @}
  331. */
  332. #if defined(CEC)
  333. /** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection
  334. * @{
  335. */
  336. #define LL_RCC_CEC_CLKSOURCE_HSI_DIV244 RCC_CFGR3_CECSW_HSI_DIV244 /*!< HSI clock divided by 244 selected as HDMI CEC entry clock source */
  337. #define LL_RCC_CEC_CLKSOURCE_LSE RCC_CFGR3_CECSW_LSE /*!< LSE clock selected as HDMI CEC entry clock source */
  338. /**
  339. * @}
  340. */
  341. #endif /* CEC */
  342. #if defined(USB)
  343. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  344. * @{
  345. */
  346. #if defined(RCC_CFGR3_USBSW_HSI48)
  347. #define LL_RCC_USB_CLKSOURCE_HSI48 RCC_CFGR3_USBSW_HSI48 /*!< HSI48 oscillator clock used as USB clock source */
  348. #else
  349. #define LL_RCC_USB_CLKSOURCE_NONE ((uint32_t)0x00000000) /*!< USB Clock disabled */
  350. #endif /*RCC_CFGR3_USBSW_HSI48*/
  351. #define LL_RCC_USB_CLKSOURCE_PLL RCC_CFGR3_USBSW_PLLCLK /*!< PLL selected as USB clock source */
  352. /**
  353. * @}
  354. */
  355. #endif /* USB */
  356. /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source
  357. * @{
  358. */
  359. #define LL_RCC_USART1_CLKSOURCE RCC_POSITION_USART1SW /*!< USART1 Clock source selection */
  360. #if defined(RCC_CFGR3_USART2SW)
  361. #define LL_RCC_USART2_CLKSOURCE RCC_POSITION_USART2SW /*!< USART2 Clock source selection */
  362. #endif /* RCC_CFGR3_USART2SW */
  363. #if defined(RCC_CFGR3_USART3SW)
  364. #define LL_RCC_USART3_CLKSOURCE RCC_POSITION_USART3SW /*!< USART3 Clock source selection */
  365. #endif /* RCC_CFGR3_USART3SW */
  366. /**
  367. * @}
  368. */
  369. /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source
  370. * @{
  371. */
  372. #define LL_RCC_I2C1_CLKSOURCE RCC_CFGR3_I2C1SW /*!< I2C1 Clock source selection */
  373. /**
  374. * @}
  375. */
  376. #if defined(CEC)
  377. /** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source
  378. * @{
  379. */
  380. #define LL_RCC_CEC_CLKSOURCE RCC_CFGR3_CECSW /*!< CEC Clock source selection */
  381. /**
  382. * @}
  383. */
  384. #endif /* CEC */
  385. #if defined(USB)
  386. /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
  387. * @{
  388. */
  389. #define LL_RCC_USB_CLKSOURCE RCC_CFGR3_USBSW /*!< USB Clock source selection */
  390. /**
  391. * @}
  392. */
  393. #endif /* USB */
  394. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
  395. * @{
  396. */
  397. #define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */
  398. #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */
  399. #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */
  400. #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */
  401. /**
  402. * @}
  403. */
  404. /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
  405. * @{
  406. */
  407. #define LL_RCC_PLL_MUL_2 RCC_CFGR_PLLMUL2 /*!< PLL input clock*2 */
  408. #define LL_RCC_PLL_MUL_3 RCC_CFGR_PLLMUL3 /*!< PLL input clock*3 */
  409. #define LL_RCC_PLL_MUL_4 RCC_CFGR_PLLMUL4 /*!< PLL input clock*4 */
  410. #define LL_RCC_PLL_MUL_5 RCC_CFGR_PLLMUL5 /*!< PLL input clock*5 */
  411. #define LL_RCC_PLL_MUL_6 RCC_CFGR_PLLMUL6 /*!< PLL input clock*6 */
  412. #define LL_RCC_PLL_MUL_7 RCC_CFGR_PLLMUL7 /*!< PLL input clock*7 */
  413. #define LL_RCC_PLL_MUL_8 RCC_CFGR_PLLMUL8 /*!< PLL input clock*8 */
  414. #define LL_RCC_PLL_MUL_9 RCC_CFGR_PLLMUL9 /*!< PLL input clock*9 */
  415. #define LL_RCC_PLL_MUL_10 RCC_CFGR_PLLMUL10 /*!< PLL input clock*10 */
  416. #define LL_RCC_PLL_MUL_11 RCC_CFGR_PLLMUL11 /*!< PLL input clock*11 */
  417. #define LL_RCC_PLL_MUL_12 RCC_CFGR_PLLMUL12 /*!< PLL input clock*12 */
  418. #define LL_RCC_PLL_MUL_13 RCC_CFGR_PLLMUL13 /*!< PLL input clock*13 */
  419. #define LL_RCC_PLL_MUL_14 RCC_CFGR_PLLMUL14 /*!< PLL input clock*14 */
  420. #define LL_RCC_PLL_MUL_15 RCC_CFGR_PLLMUL15 /*!< PLL input clock*15 */
  421. #define LL_RCC_PLL_MUL_16 RCC_CFGR_PLLMUL16 /*!< PLL input clock*16 */
  422. /**
  423. * @}
  424. */
  425. /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
  426. * @{
  427. */
  428. #define LL_RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE_PREDIV /*!< HSE/PREDIV clock selected as PLL entry clock source */
  429. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  430. #define LL_RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV /*!< HSI/PREDIV clock selected as PLL entry clock source */
  431. #if defined(RCC_CFGR_SW_HSI48)
  432. #define LL_RCC_PLLSOURCE_HSI48 RCC_CFGR_PLLSRC_HSI48_PREDIV /*!< HSI48/PREDIV clock selected as PLL entry clock source */
  433. #endif /* RCC_CFGR_SW_HSI48 */
  434. #else
  435. #define LL_RCC_PLLSOURCE_HSI_DIV_2 RCC_CFGR_PLLSRC_HSI_DIV2 /*!< HSI clock divided by 2 selected as PLL entry clock source */
  436. #define LL_RCC_PLLSOURCE_HSE_DIV_1 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV1) /*!< HSE clock selected as PLL entry clock source */
  437. #define LL_RCC_PLLSOURCE_HSE_DIV_2 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV2) /*!< HSE/2 clock selected as PLL entry clock source */
  438. #define LL_RCC_PLLSOURCE_HSE_DIV_3 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV3) /*!< HSE/3 clock selected as PLL entry clock source */
  439. #define LL_RCC_PLLSOURCE_HSE_DIV_4 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV4) /*!< HSE/4 clock selected as PLL entry clock source */
  440. #define LL_RCC_PLLSOURCE_HSE_DIV_5 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV5) /*!< HSE/5 clock selected as PLL entry clock source */
  441. #define LL_RCC_PLLSOURCE_HSE_DIV_6 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV6) /*!< HSE/6 clock selected as PLL entry clock source */
  442. #define LL_RCC_PLLSOURCE_HSE_DIV_7 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV7) /*!< HSE/7 clock selected as PLL entry clock source */
  443. #define LL_RCC_PLLSOURCE_HSE_DIV_8 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV8) /*!< HSE/8 clock selected as PLL entry clock source */
  444. #define LL_RCC_PLLSOURCE_HSE_DIV_9 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV9) /*!< HSE/9 clock selected as PLL entry clock source */
  445. #define LL_RCC_PLLSOURCE_HSE_DIV_10 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV10) /*!< HSE/10 clock selected as PLL entry clock source */
  446. #define LL_RCC_PLLSOURCE_HSE_DIV_11 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV11) /*!< HSE/11 clock selected as PLL entry clock source */
  447. #define LL_RCC_PLLSOURCE_HSE_DIV_12 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV12) /*!< HSE/12 clock selected as PLL entry clock source */
  448. #define LL_RCC_PLLSOURCE_HSE_DIV_13 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV13) /*!< HSE/13 clock selected as PLL entry clock source */
  449. #define LL_RCC_PLLSOURCE_HSE_DIV_14 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV14) /*!< HSE/14 clock selected as PLL entry clock source */
  450. #define LL_RCC_PLLSOURCE_HSE_DIV_15 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV15) /*!< HSE/15 clock selected as PLL entry clock source */
  451. #define LL_RCC_PLLSOURCE_HSE_DIV_16 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV16) /*!< HSE/16 clock selected as PLL entry clock source */
  452. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  453. /**
  454. * @}
  455. */
  456. /** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor
  457. * @{
  458. */
  459. #define LL_RCC_PREDIV_DIV_1 RCC_CFGR2_PREDIV_DIV1 /*!< PREDIV input clock not divided */
  460. #define LL_RCC_PREDIV_DIV_2 RCC_CFGR2_PREDIV_DIV2 /*!< PREDIV input clock divided by 2 */
  461. #define LL_RCC_PREDIV_DIV_3 RCC_CFGR2_PREDIV_DIV3 /*!< PREDIV input clock divided by 3 */
  462. #define LL_RCC_PREDIV_DIV_4 RCC_CFGR2_PREDIV_DIV4 /*!< PREDIV input clock divided by 4 */
  463. #define LL_RCC_PREDIV_DIV_5 RCC_CFGR2_PREDIV_DIV5 /*!< PREDIV input clock divided by 5 */
  464. #define LL_RCC_PREDIV_DIV_6 RCC_CFGR2_PREDIV_DIV6 /*!< PREDIV input clock divided by 6 */
  465. #define LL_RCC_PREDIV_DIV_7 RCC_CFGR2_PREDIV_DIV7 /*!< PREDIV input clock divided by 7 */
  466. #define LL_RCC_PREDIV_DIV_8 RCC_CFGR2_PREDIV_DIV8 /*!< PREDIV input clock divided by 8 */
  467. #define LL_RCC_PREDIV_DIV_9 RCC_CFGR2_PREDIV_DIV9 /*!< PREDIV input clock divided by 9 */
  468. #define LL_RCC_PREDIV_DIV_10 RCC_CFGR2_PREDIV_DIV10 /*!< PREDIV input clock divided by 10 */
  469. #define LL_RCC_PREDIV_DIV_11 RCC_CFGR2_PREDIV_DIV11 /*!< PREDIV input clock divided by 11 */
  470. #define LL_RCC_PREDIV_DIV_12 RCC_CFGR2_PREDIV_DIV12 /*!< PREDIV input clock divided by 12 */
  471. #define LL_RCC_PREDIV_DIV_13 RCC_CFGR2_PREDIV_DIV13 /*!< PREDIV input clock divided by 13 */
  472. #define LL_RCC_PREDIV_DIV_14 RCC_CFGR2_PREDIV_DIV14 /*!< PREDIV input clock divided by 14 */
  473. #define LL_RCC_PREDIV_DIV_15 RCC_CFGR2_PREDIV_DIV15 /*!< PREDIV input clock divided by 15 */
  474. #define LL_RCC_PREDIV_DIV_16 RCC_CFGR2_PREDIV_DIV16 /*!< PREDIV input clock divided by 16 */
  475. /**
  476. * @}
  477. */
  478. /**
  479. * @}
  480. */
  481. /* Exported macro ------------------------------------------------------------*/
  482. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  483. * @{
  484. */
  485. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  486. * @{
  487. */
  488. /**
  489. * @brief Write a value in RCC register
  490. * @param __REG__ Register to be written
  491. * @param __VALUE__ Value to be written in the register
  492. * @retval None
  493. */
  494. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
  495. /**
  496. * @brief Read a value in RCC register
  497. * @param __REG__ Register to be read
  498. * @retval Register value
  499. */
  500. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  501. /**
  502. * @}
  503. */
  504. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  505. * @{
  506. */
  507. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  508. /**
  509. * @brief Helper macro to calculate the PLLCLK frequency
  510. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetMultiplicator()
  511. * , @ref LL_RCC_PLL_GetPrediv());
  512. * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI/HSI48)
  513. * @param __PLLMUL__ This parameter can be one of the following values:
  514. * @arg @ref LL_RCC_PLL_MUL_2
  515. * @arg @ref LL_RCC_PLL_MUL_3
  516. * @arg @ref LL_RCC_PLL_MUL_4
  517. * @arg @ref LL_RCC_PLL_MUL_5
  518. * @arg @ref LL_RCC_PLL_MUL_6
  519. * @arg @ref LL_RCC_PLL_MUL_7
  520. * @arg @ref LL_RCC_PLL_MUL_8
  521. * @arg @ref LL_RCC_PLL_MUL_9
  522. * @arg @ref LL_RCC_PLL_MUL_10
  523. * @arg @ref LL_RCC_PLL_MUL_11
  524. * @arg @ref LL_RCC_PLL_MUL_12
  525. * @arg @ref LL_RCC_PLL_MUL_13
  526. * @arg @ref LL_RCC_PLL_MUL_14
  527. * @arg @ref LL_RCC_PLL_MUL_15
  528. * @arg @ref LL_RCC_PLL_MUL_16
  529. * @param __PLLPREDIV__ This parameter can be one of the following values:
  530. * @arg @ref LL_RCC_PREDIV_DIV_1
  531. * @arg @ref LL_RCC_PREDIV_DIV_2
  532. * @arg @ref LL_RCC_PREDIV_DIV_3
  533. * @arg @ref LL_RCC_PREDIV_DIV_4
  534. * @arg @ref LL_RCC_PREDIV_DIV_5
  535. * @arg @ref LL_RCC_PREDIV_DIV_6
  536. * @arg @ref LL_RCC_PREDIV_DIV_7
  537. * @arg @ref LL_RCC_PREDIV_DIV_8
  538. * @arg @ref LL_RCC_PREDIV_DIV_9
  539. * @arg @ref LL_RCC_PREDIV_DIV_10
  540. * @arg @ref LL_RCC_PREDIV_DIV_11
  541. * @arg @ref LL_RCC_PREDIV_DIV_12
  542. * @arg @ref LL_RCC_PREDIV_DIV_13
  543. * @arg @ref LL_RCC_PREDIV_DIV_14
  544. * @arg @ref LL_RCC_PREDIV_DIV_15
  545. * @arg @ref LL_RCC_PREDIV_DIV_16
  546. * @retval PLL clock frequency (in Hz)
  547. */
  548. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__, __PLLPREDIV__) \
  549. (((__INPUTFREQ__) / ((((__PLLPREDIV__) & RCC_CFGR2_PREDIV) + 1U))) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  550. #else
  551. /**
  552. * @brief Helper macro to calculate the PLLCLK frequency
  553. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator());
  554. * @param __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv / HSI div 2)
  555. * @param __PLLMUL__ This parameter can be one of the following values:
  556. * @arg @ref LL_RCC_PLL_MUL_2
  557. * @arg @ref LL_RCC_PLL_MUL_3
  558. * @arg @ref LL_RCC_PLL_MUL_4
  559. * @arg @ref LL_RCC_PLL_MUL_5
  560. * @arg @ref LL_RCC_PLL_MUL_6
  561. * @arg @ref LL_RCC_PLL_MUL_7
  562. * @arg @ref LL_RCC_PLL_MUL_8
  563. * @arg @ref LL_RCC_PLL_MUL_9
  564. * @arg @ref LL_RCC_PLL_MUL_10
  565. * @arg @ref LL_RCC_PLL_MUL_11
  566. * @arg @ref LL_RCC_PLL_MUL_12
  567. * @arg @ref LL_RCC_PLL_MUL_13
  568. * @arg @ref LL_RCC_PLL_MUL_14
  569. * @arg @ref LL_RCC_PLL_MUL_15
  570. * @arg @ref LL_RCC_PLL_MUL_16
  571. * @retval PLL clock frequency (in Hz)
  572. */
  573. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \
  574. ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  575. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  576. /**
  577. * @brief Helper macro to calculate the HCLK frequency
  578. * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
  579. * ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
  580. * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
  581. * @param __AHBPRESCALER__ This parameter can be one of the following values:
  582. * @arg @ref LL_RCC_SYSCLK_DIV_1
  583. * @arg @ref LL_RCC_SYSCLK_DIV_2
  584. * @arg @ref LL_RCC_SYSCLK_DIV_4
  585. * @arg @ref LL_RCC_SYSCLK_DIV_8
  586. * @arg @ref LL_RCC_SYSCLK_DIV_16
  587. * @arg @ref LL_RCC_SYSCLK_DIV_64
  588. * @arg @ref LL_RCC_SYSCLK_DIV_128
  589. * @arg @ref LL_RCC_SYSCLK_DIV_256
  590. * @arg @ref LL_RCC_SYSCLK_DIV_512
  591. * @retval HCLK clock frequency (in Hz)
  592. */
  593. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos])
  594. /**
  595. * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
  596. * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
  597. * ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
  598. * @param __HCLKFREQ__ HCLK frequency
  599. * @param __APB1PRESCALER__ This parameter can be one of the following values:
  600. * @arg @ref LL_RCC_APB1_DIV_1
  601. * @arg @ref LL_RCC_APB1_DIV_2
  602. * @arg @ref LL_RCC_APB1_DIV_4
  603. * @arg @ref LL_RCC_APB1_DIV_8
  604. * @arg @ref LL_RCC_APB1_DIV_16
  605. * @retval PCLK1 clock frequency (in Hz)
  606. */
  607. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE_Pos])
  608. /**
  609. * @}
  610. */
  611. /**
  612. * @}
  613. */
  614. /* Exported functions --------------------------------------------------------*/
  615. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  616. * @{
  617. */
  618. /** @defgroup RCC_LL_EF_HSE HSE
  619. * @{
  620. */
  621. /**
  622. * @brief Enable the Clock Security System.
  623. * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS
  624. * @retval None
  625. */
  626. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  627. {
  628. SET_BIT(RCC->CR, RCC_CR_CSSON);
  629. }
  630. /**
  631. * @brief Disable the Clock Security System.
  632. * @note Cannot be disabled in HSE is ready (only by hardware)
  633. * @rmtoll CR CSSON LL_RCC_HSE_DisableCSS
  634. * @retval None
  635. */
  636. __STATIC_INLINE void LL_RCC_HSE_DisableCSS(void)
  637. {
  638. CLEAR_BIT(RCC->CR, RCC_CR_CSSON);
  639. }
  640. /**
  641. * @brief Enable HSE external oscillator (HSE Bypass)
  642. * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
  643. * @retval None
  644. */
  645. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  646. {
  647. SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  648. }
  649. /**
  650. * @brief Disable HSE external oscillator (HSE Bypass)
  651. * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
  652. * @retval None
  653. */
  654. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  655. {
  656. CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  657. }
  658. /**
  659. * @brief Enable HSE crystal oscillator (HSE ON)
  660. * @rmtoll CR HSEON LL_RCC_HSE_Enable
  661. * @retval None
  662. */
  663. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  664. {
  665. SET_BIT(RCC->CR, RCC_CR_HSEON);
  666. }
  667. /**
  668. * @brief Disable HSE crystal oscillator (HSE ON)
  669. * @rmtoll CR HSEON LL_RCC_HSE_Disable
  670. * @retval None
  671. */
  672. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  673. {
  674. CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  675. }
  676. /**
  677. * @brief Check if HSE oscillator Ready
  678. * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
  679. * @retval State of bit (1 or 0).
  680. */
  681. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  682. {
  683. return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
  684. }
  685. /**
  686. * @}
  687. */
  688. /** @defgroup RCC_LL_EF_HSI HSI
  689. * @{
  690. */
  691. /**
  692. * @brief Enable HSI oscillator
  693. * @rmtoll CR HSION LL_RCC_HSI_Enable
  694. * @retval None
  695. */
  696. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  697. {
  698. SET_BIT(RCC->CR, RCC_CR_HSION);
  699. }
  700. /**
  701. * @brief Disable HSI oscillator
  702. * @rmtoll CR HSION LL_RCC_HSI_Disable
  703. * @retval None
  704. */
  705. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  706. {
  707. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  708. }
  709. /**
  710. * @brief Check if HSI clock is ready
  711. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  712. * @retval State of bit (1 or 0).
  713. */
  714. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  715. {
  716. return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
  717. }
  718. /**
  719. * @brief Get HSI Calibration value
  720. * @note When HSITRIM is written, HSICAL is updated with the sum of
  721. * HSITRIM and the factory trim value
  722. * @rmtoll CR HSICAL LL_RCC_HSI_GetCalibration
  723. * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  724. */
  725. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  726. {
  727. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos);
  728. }
  729. /**
  730. * @brief Set HSI Calibration trimming
  731. * @note user-programmable trimming value that is added to the HSICAL
  732. * @note Default value is 16, which, when added to the HSICAL value,
  733. * should trim the HSI to 16 MHz +/- 1 %
  734. * @rmtoll CR HSITRIM LL_RCC_HSI_SetCalibTrimming
  735. * @param Value between Min_Data = 0x00 and Max_Data = 0x1F
  736. * @retval None
  737. */
  738. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  739. {
  740. MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos);
  741. }
  742. /**
  743. * @brief Get HSI Calibration trimming
  744. * @rmtoll CR HSITRIM LL_RCC_HSI_GetCalibTrimming
  745. * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  746. */
  747. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  748. {
  749. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
  750. }
  751. /**
  752. * @}
  753. */
  754. #if defined(RCC_HSI48_SUPPORT)
  755. /** @defgroup RCC_LL_EF_HSI48 HSI48
  756. * @{
  757. */
  758. /**
  759. * @brief Enable HSI48
  760. * @rmtoll CR2 HSI48ON LL_RCC_HSI48_Enable
  761. * @retval None
  762. */
  763. __STATIC_INLINE void LL_RCC_HSI48_Enable(void)
  764. {
  765. SET_BIT(RCC->CR2, RCC_CR2_HSI48ON);
  766. }
  767. /**
  768. * @brief Disable HSI48
  769. * @rmtoll CR2 HSI48ON LL_RCC_HSI48_Disable
  770. * @retval None
  771. */
  772. __STATIC_INLINE void LL_RCC_HSI48_Disable(void)
  773. {
  774. CLEAR_BIT(RCC->CR2, RCC_CR2_HSI48ON);
  775. }
  776. /**
  777. * @brief Check if HSI48 oscillator Ready
  778. * @rmtoll CR2 HSI48RDY LL_RCC_HSI48_IsReady
  779. * @retval State of bit (1 or 0).
  780. */
  781. __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void)
  782. {
  783. return (READ_BIT(RCC->CR2, RCC_CR2_HSI48RDY) == (RCC_CR2_HSI48RDY));
  784. }
  785. /**
  786. * @brief Get HSI48 Calibration value
  787. * @rmtoll CR2 HSI48CAL LL_RCC_HSI48_GetCalibration
  788. * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  789. */
  790. __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void)
  791. {
  792. return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI48CAL) >> RCC_POSITION_HSI48CAL);
  793. }
  794. /**
  795. * @}
  796. */
  797. #endif /* RCC_HSI48_SUPPORT */
  798. /** @defgroup RCC_LL_EF_HSI14 HSI14
  799. * @{
  800. */
  801. /**
  802. * @brief Enable HSI14
  803. * @rmtoll CR2 HSI14ON LL_RCC_HSI14_Enable
  804. * @retval None
  805. */
  806. __STATIC_INLINE void LL_RCC_HSI14_Enable(void)
  807. {
  808. SET_BIT(RCC->CR2, RCC_CR2_HSI14ON);
  809. }
  810. /**
  811. * @brief Disable HSI14
  812. * @rmtoll CR2 HSI14ON LL_RCC_HSI14_Disable
  813. * @retval None
  814. */
  815. __STATIC_INLINE void LL_RCC_HSI14_Disable(void)
  816. {
  817. CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14ON);
  818. }
  819. /**
  820. * @brief Check if HSI14 oscillator Ready
  821. * @rmtoll CR2 HSI14RDY LL_RCC_HSI14_IsReady
  822. * @retval State of bit (1 or 0).
  823. */
  824. __STATIC_INLINE uint32_t LL_RCC_HSI14_IsReady(void)
  825. {
  826. return (READ_BIT(RCC->CR2, RCC_CR2_HSI14RDY) == (RCC_CR2_HSI14RDY));
  827. }
  828. /**
  829. * @brief ADC interface can turn on the HSI14 oscillator
  830. * @rmtoll CR2 HSI14DIS LL_RCC_HSI14_EnableADCControl
  831. * @retval None
  832. */
  833. __STATIC_INLINE void LL_RCC_HSI14_EnableADCControl(void)
  834. {
  835. CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14DIS);
  836. }
  837. /**
  838. * @brief ADC interface can not turn on the HSI14 oscillator
  839. * @rmtoll CR2 HSI14DIS LL_RCC_HSI14_DisableADCControl
  840. * @retval None
  841. */
  842. __STATIC_INLINE void LL_RCC_HSI14_DisableADCControl(void)
  843. {
  844. SET_BIT(RCC->CR2, RCC_CR2_HSI14DIS);
  845. }
  846. /**
  847. * @brief Set HSI14 Calibration trimming
  848. * @note user-programmable trimming value that is added to the HSI14CAL
  849. * @note Default value is 16, which, when added to the HSI14CAL value,
  850. * should trim the HSI14 to 14 MHz +/- 1 %
  851. * @rmtoll CR2 HSI14TRIM LL_RCC_HSI14_SetCalibTrimming
  852. * @param Value between Min_Data = 0x00 and Max_Data = 0xFF
  853. * @retval None
  854. */
  855. __STATIC_INLINE void LL_RCC_HSI14_SetCalibTrimming(uint32_t Value)
  856. {
  857. MODIFY_REG(RCC->CR2, RCC_CR2_HSI14TRIM, Value << RCC_POSITION_HSI14TRIM);
  858. }
  859. /**
  860. * @brief Get HSI14 Calibration value
  861. * @note When HSI14TRIM is written, HSI14CAL is updated with the sum of
  862. * HSI14TRIM and the factory trim value
  863. * @rmtoll CR2 HSI14TRIM LL_RCC_HSI14_GetCalibTrimming
  864. * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  865. */
  866. __STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibTrimming(void)
  867. {
  868. return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14TRIM) >> RCC_POSITION_HSI14TRIM);
  869. }
  870. /**
  871. * @brief Get HSI14 Calibration trimming
  872. * @rmtoll CR2 HSI14CAL LL_RCC_HSI14_GetCalibration
  873. * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  874. */
  875. __STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibration(void)
  876. {
  877. return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14CAL) >> RCC_POSITION_HSI14CAL);
  878. }
  879. /**
  880. * @}
  881. */
  882. /** @defgroup RCC_LL_EF_LSE LSE
  883. * @{
  884. */
  885. /**
  886. * @brief Enable Low Speed External (LSE) crystal.
  887. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  888. * @retval None
  889. */
  890. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  891. {
  892. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  893. }
  894. /**
  895. * @brief Disable Low Speed External (LSE) crystal.
  896. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  897. * @retval None
  898. */
  899. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  900. {
  901. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  902. }
  903. /**
  904. * @brief Enable external clock source (LSE bypass).
  905. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  906. * @retval None
  907. */
  908. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  909. {
  910. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  911. }
  912. /**
  913. * @brief Disable external clock source (LSE bypass).
  914. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  915. * @retval None
  916. */
  917. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  918. {
  919. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  920. }
  921. /**
  922. * @brief Set LSE oscillator drive capability
  923. * @note The oscillator is in Xtal mode when it is not in bypass mode.
  924. * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability
  925. * @param LSEDrive This parameter can be one of the following values:
  926. * @arg @ref LL_RCC_LSEDRIVE_LOW
  927. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  928. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  929. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  930. * @retval None
  931. */
  932. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  933. {
  934. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
  935. }
  936. /**
  937. * @brief Get LSE oscillator drive capability
  938. * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability
  939. * @retval Returned value can be one of the following values:
  940. * @arg @ref LL_RCC_LSEDRIVE_LOW
  941. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  942. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  943. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  944. */
  945. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  946. {
  947. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
  948. }
  949. /**
  950. * @brief Check if LSE oscillator Ready
  951. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  952. * @retval State of bit (1 or 0).
  953. */
  954. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  955. {
  956. return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
  957. }
  958. /**
  959. * @}
  960. */
  961. /** @defgroup RCC_LL_EF_LSI LSI
  962. * @{
  963. */
  964. /**
  965. * @brief Enable LSI Oscillator
  966. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  967. * @retval None
  968. */
  969. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  970. {
  971. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  972. }
  973. /**
  974. * @brief Disable LSI Oscillator
  975. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  976. * @retval None
  977. */
  978. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  979. {
  980. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  981. }
  982. /**
  983. * @brief Check if LSI is Ready
  984. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  985. * @retval State of bit (1 or 0).
  986. */
  987. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  988. {
  989. return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
  990. }
  991. /**
  992. * @}
  993. */
  994. /** @defgroup RCC_LL_EF_System System
  995. * @{
  996. */
  997. /**
  998. * @brief Configure the system clock source
  999. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  1000. * @param Source This parameter can be one of the following values:
  1001. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  1002. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  1003. * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
  1004. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI48 (*)
  1005. *
  1006. * (*) value not defined in all devices
  1007. * @retval None
  1008. */
  1009. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  1010. {
  1011. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  1012. }
  1013. /**
  1014. * @brief Get the system clock source
  1015. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  1016. * @retval Returned value can be one of the following values:
  1017. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  1018. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  1019. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
  1020. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI48 (*)
  1021. *
  1022. * (*) value not defined in all devices
  1023. */
  1024. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  1025. {
  1026. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  1027. }
  1028. /**
  1029. * @brief Set AHB prescaler
  1030. * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
  1031. * @param Prescaler This parameter can be one of the following values:
  1032. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1033. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1034. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1035. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1036. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1037. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1038. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1039. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1040. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1041. * @retval None
  1042. */
  1043. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  1044. {
  1045. MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  1046. }
  1047. /**
  1048. * @brief Set APB1 prescaler
  1049. * @rmtoll CFGR PPRE LL_RCC_SetAPB1Prescaler
  1050. * @param Prescaler This parameter can be one of the following values:
  1051. * @arg @ref LL_RCC_APB1_DIV_1
  1052. * @arg @ref LL_RCC_APB1_DIV_2
  1053. * @arg @ref LL_RCC_APB1_DIV_4
  1054. * @arg @ref LL_RCC_APB1_DIV_8
  1055. * @arg @ref LL_RCC_APB1_DIV_16
  1056. * @retval None
  1057. */
  1058. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  1059. {
  1060. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, Prescaler);
  1061. }
  1062. /**
  1063. * @brief Get AHB prescaler
  1064. * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
  1065. * @retval Returned value can be one of the following values:
  1066. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1067. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1068. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1069. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1070. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1071. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1072. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1073. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1074. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1075. */
  1076. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  1077. {
  1078. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  1079. }
  1080. /**
  1081. * @brief Get APB1 prescaler
  1082. * @rmtoll CFGR PPRE LL_RCC_GetAPB1Prescaler
  1083. * @retval Returned value can be one of the following values:
  1084. * @arg @ref LL_RCC_APB1_DIV_1
  1085. * @arg @ref LL_RCC_APB1_DIV_2
  1086. * @arg @ref LL_RCC_APB1_DIV_4
  1087. * @arg @ref LL_RCC_APB1_DIV_8
  1088. * @arg @ref LL_RCC_APB1_DIV_16
  1089. */
  1090. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  1091. {
  1092. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE));
  1093. }
  1094. /**
  1095. * @}
  1096. */
  1097. /** @defgroup RCC_LL_EF_MCO MCO
  1098. * @{
  1099. */
  1100. /**
  1101. * @brief Configure MCOx
  1102. * @rmtoll CFGR MCO LL_RCC_ConfigMCO\n
  1103. * CFGR MCOPRE LL_RCC_ConfigMCO\n
  1104. * CFGR PLLNODIV LL_RCC_ConfigMCO
  1105. * @param MCOxSource This parameter can be one of the following values:
  1106. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  1107. * @arg @ref LL_RCC_MCO1SOURCE_HSI14
  1108. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  1109. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  1110. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  1111. * @arg @ref LL_RCC_MCO1SOURCE_LSI
  1112. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  1113. * @arg @ref LL_RCC_MCO1SOURCE_HSI48 (*)
  1114. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK (*)
  1115. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2
  1116. *
  1117. * (*) value not defined in all devices
  1118. * @param MCOxPrescaler This parameter can be one of the following values:
  1119. * @arg @ref LL_RCC_MCO1_DIV_1
  1120. * @arg @ref LL_RCC_MCO1_DIV_2 (*)
  1121. * @arg @ref LL_RCC_MCO1_DIV_4 (*)
  1122. * @arg @ref LL_RCC_MCO1_DIV_8 (*)
  1123. * @arg @ref LL_RCC_MCO1_DIV_16 (*)
  1124. * @arg @ref LL_RCC_MCO1_DIV_32 (*)
  1125. * @arg @ref LL_RCC_MCO1_DIV_64 (*)
  1126. * @arg @ref LL_RCC_MCO1_DIV_128 (*)
  1127. *
  1128. * (*) value not defined in all devices
  1129. * @retval None
  1130. */
  1131. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  1132. {
  1133. #if defined(RCC_CFGR_MCOPRE)
  1134. #if defined(RCC_CFGR_PLLNODIV)
  1135. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE | RCC_CFGR_PLLNODIV, MCOxSource | MCOxPrescaler);
  1136. #else
  1137. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
  1138. #endif /* RCC_CFGR_PLLNODIV */
  1139. #else
  1140. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource);
  1141. #endif /* RCC_CFGR_MCOPRE */
  1142. }
  1143. /**
  1144. * @}
  1145. */
  1146. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1147. * @{
  1148. */
  1149. /**
  1150. * @brief Configure USARTx clock source
  1151. * @rmtoll CFGR3 USART1SW LL_RCC_SetUSARTClockSource\n
  1152. * CFGR3 USART2SW LL_RCC_SetUSARTClockSource\n
  1153. * CFGR3 USART3SW LL_RCC_SetUSARTClockSource
  1154. * @param USARTxSource This parameter can be one of the following values:
  1155. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
  1156. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1157. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1158. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1159. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1160. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1161. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1162. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1163. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1164. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1165. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1166. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1167. *
  1168. * (*) value not defined in all devices.
  1169. * @retval None
  1170. */
  1171. __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
  1172. {
  1173. MODIFY_REG(RCC->CFGR3, (RCC_CFGR3_USART1SW << ((USARTxSource & 0xFF000000U) >> 24U)), (USARTxSource & 0x00FFFFFFU));
  1174. }
  1175. /**
  1176. * @brief Configure I2Cx clock source
  1177. * @rmtoll CFGR3 I2C1SW LL_RCC_SetI2CClockSource
  1178. * @param I2CxSource This parameter can be one of the following values:
  1179. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1180. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1181. * @retval None
  1182. */
  1183. __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
  1184. {
  1185. MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C1SW, I2CxSource);
  1186. }
  1187. #if defined(CEC)
  1188. /**
  1189. * @brief Configure CEC clock source
  1190. * @rmtoll CFGR3 CECSW LL_RCC_SetCECClockSource
  1191. * @param CECxSource This parameter can be one of the following values:
  1192. * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1193. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1194. * @retval None
  1195. */
  1196. __STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t CECxSource)
  1197. {
  1198. MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, CECxSource);
  1199. }
  1200. #endif /* CEC */
  1201. #if defined(USB)
  1202. /**
  1203. * @brief Configure USB clock source
  1204. * @rmtoll CFGR3 USBSW LL_RCC_SetUSBClockSource
  1205. * @param USBxSource This parameter can be one of the following values:
  1206. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48 (*)
  1207. * @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*)
  1208. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1209. *
  1210. * (*) value not defined in all devices.
  1211. * @retval None
  1212. */
  1213. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
  1214. {
  1215. MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USBSW, USBxSource);
  1216. }
  1217. #endif /* USB */
  1218. /**
  1219. * @brief Get USARTx clock source
  1220. * @rmtoll CFGR3 USART1SW LL_RCC_GetUSARTClockSource\n
  1221. * CFGR3 USART2SW LL_RCC_GetUSARTClockSource\n
  1222. * CFGR3 USART3SW LL_RCC_GetUSARTClockSource
  1223. * @param USARTx This parameter can be one of the following values:
  1224. * @arg @ref LL_RCC_USART1_CLKSOURCE
  1225. * @arg @ref LL_RCC_USART2_CLKSOURCE (*)
  1226. * @arg @ref LL_RCC_USART3_CLKSOURCE (*)
  1227. *
  1228. * (*) value not defined in all devices.
  1229. * @retval Returned value can be one of the following values:
  1230. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
  1231. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1232. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1233. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1234. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1235. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1236. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1237. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1238. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1239. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1240. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1241. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1242. *
  1243. * (*) value not defined in all devices.
  1244. */
  1245. __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
  1246. {
  1247. return (uint32_t)(READ_BIT(RCC->CFGR3, (RCC_CFGR3_USART1SW << USARTx)) | (USARTx << 24U));
  1248. }
  1249. /**
  1250. * @brief Get I2Cx clock source
  1251. * @rmtoll CFGR3 I2C1SW LL_RCC_GetI2CClockSource
  1252. * @param I2Cx This parameter can be one of the following values:
  1253. * @arg @ref LL_RCC_I2C1_CLKSOURCE
  1254. * @retval Returned value can be one of the following values:
  1255. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1256. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1257. */
  1258. __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
  1259. {
  1260. return (uint32_t)(READ_BIT(RCC->CFGR3, I2Cx));
  1261. }
  1262. #if defined(CEC)
  1263. /**
  1264. * @brief Get CEC clock source
  1265. * @rmtoll CFGR3 CECSW LL_RCC_GetCECClockSource
  1266. * @param CECx This parameter can be one of the following values:
  1267. * @arg @ref LL_RCC_CEC_CLKSOURCE
  1268. * @retval Returned value can be one of the following values:
  1269. * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1270. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1271. */
  1272. __STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx)
  1273. {
  1274. return (uint32_t)(READ_BIT(RCC->CFGR3, CECx));
  1275. }
  1276. #endif /* CEC */
  1277. #if defined(USB)
  1278. /**
  1279. * @brief Get USBx clock source
  1280. * @rmtoll CFGR3 USBSW LL_RCC_GetUSBClockSource
  1281. * @param USBx This parameter can be one of the following values:
  1282. * @arg @ref LL_RCC_USB_CLKSOURCE
  1283. * @retval Returned value can be one of the following values:
  1284. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48 (*)
  1285. * @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*)
  1286. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1287. *
  1288. * (*) value not defined in all devices.
  1289. */
  1290. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
  1291. {
  1292. return (uint32_t)(READ_BIT(RCC->CFGR3, USBx));
  1293. }
  1294. #endif /* USB */
  1295. /**
  1296. * @}
  1297. */
  1298. /** @defgroup RCC_LL_EF_RTC RTC
  1299. * @{
  1300. */
  1301. /**
  1302. * @brief Set RTC Clock Source
  1303. * @note Once the RTC clock source has been selected, it cannot be changed any more unless
  1304. * the Backup domain is reset. The BDRST bit can be used to reset them.
  1305. * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource
  1306. * @param Source This parameter can be one of the following values:
  1307. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1308. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1309. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1310. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1311. * @retval None
  1312. */
  1313. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  1314. {
  1315. MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  1316. }
  1317. /**
  1318. * @brief Get RTC Clock Source
  1319. * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource
  1320. * @retval Returned value can be one of the following values:
  1321. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1322. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1323. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1324. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1325. */
  1326. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  1327. {
  1328. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  1329. }
  1330. /**
  1331. * @brief Enable RTC
  1332. * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
  1333. * @retval None
  1334. */
  1335. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  1336. {
  1337. SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1338. }
  1339. /**
  1340. * @brief Disable RTC
  1341. * @rmtoll BDCR RTCEN LL_RCC_DisableRTC
  1342. * @retval None
  1343. */
  1344. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  1345. {
  1346. CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1347. }
  1348. /**
  1349. * @brief Check if RTC has been enabled or not
  1350. * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC
  1351. * @retval State of bit (1 or 0).
  1352. */
  1353. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  1354. {
  1355. return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
  1356. }
  1357. /**
  1358. * @brief Force the Backup domain reset
  1359. * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset
  1360. * @retval None
  1361. */
  1362. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  1363. {
  1364. SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1365. }
  1366. /**
  1367. * @brief Release the Backup domain reset
  1368. * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset
  1369. * @retval None
  1370. */
  1371. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  1372. {
  1373. CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1374. }
  1375. /**
  1376. * @}
  1377. */
  1378. /** @defgroup RCC_LL_EF_PLL PLL
  1379. * @{
  1380. */
  1381. /**
  1382. * @brief Enable PLL
  1383. * @rmtoll CR PLLON LL_RCC_PLL_Enable
  1384. * @retval None
  1385. */
  1386. __STATIC_INLINE void LL_RCC_PLL_Enable(void)
  1387. {
  1388. SET_BIT(RCC->CR, RCC_CR_PLLON);
  1389. }
  1390. /**
  1391. * @brief Disable PLL
  1392. * @note Cannot be disabled if the PLL clock is used as the system clock
  1393. * @rmtoll CR PLLON LL_RCC_PLL_Disable
  1394. * @retval None
  1395. */
  1396. __STATIC_INLINE void LL_RCC_PLL_Disable(void)
  1397. {
  1398. CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
  1399. }
  1400. /**
  1401. * @brief Check if PLL Ready
  1402. * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
  1403. * @retval State of bit (1 or 0).
  1404. */
  1405. __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
  1406. {
  1407. return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
  1408. }
  1409. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  1410. /**
  1411. * @brief Configure PLL used for SYSCLK Domain
  1412. * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  1413. * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n
  1414. * CFGR2 PREDIV LL_RCC_PLL_ConfigDomain_SYS
  1415. * @param Source This parameter can be one of the following values:
  1416. * @arg @ref LL_RCC_PLLSOURCE_HSI
  1417. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1418. * @arg @ref LL_RCC_PLLSOURCE_HSI48 (*)
  1419. *
  1420. * (*) value not defined in all devices
  1421. * @param PLLMul This parameter can be one of the following values:
  1422. * @arg @ref LL_RCC_PLL_MUL_2
  1423. * @arg @ref LL_RCC_PLL_MUL_3
  1424. * @arg @ref LL_RCC_PLL_MUL_4
  1425. * @arg @ref LL_RCC_PLL_MUL_5
  1426. * @arg @ref LL_RCC_PLL_MUL_6
  1427. * @arg @ref LL_RCC_PLL_MUL_7
  1428. * @arg @ref LL_RCC_PLL_MUL_8
  1429. * @arg @ref LL_RCC_PLL_MUL_9
  1430. * @arg @ref LL_RCC_PLL_MUL_10
  1431. * @arg @ref LL_RCC_PLL_MUL_11
  1432. * @arg @ref LL_RCC_PLL_MUL_12
  1433. * @arg @ref LL_RCC_PLL_MUL_13
  1434. * @arg @ref LL_RCC_PLL_MUL_14
  1435. * @arg @ref LL_RCC_PLL_MUL_15
  1436. * @arg @ref LL_RCC_PLL_MUL_16
  1437. * @param PLLDiv This parameter can be one of the following values:
  1438. * @arg @ref LL_RCC_PREDIV_DIV_1
  1439. * @arg @ref LL_RCC_PREDIV_DIV_2
  1440. * @arg @ref LL_RCC_PREDIV_DIV_3
  1441. * @arg @ref LL_RCC_PREDIV_DIV_4
  1442. * @arg @ref LL_RCC_PREDIV_DIV_5
  1443. * @arg @ref LL_RCC_PREDIV_DIV_6
  1444. * @arg @ref LL_RCC_PREDIV_DIV_7
  1445. * @arg @ref LL_RCC_PREDIV_DIV_8
  1446. * @arg @ref LL_RCC_PREDIV_DIV_9
  1447. * @arg @ref LL_RCC_PREDIV_DIV_10
  1448. * @arg @ref LL_RCC_PREDIV_DIV_11
  1449. * @arg @ref LL_RCC_PREDIV_DIV_12
  1450. * @arg @ref LL_RCC_PREDIV_DIV_13
  1451. * @arg @ref LL_RCC_PREDIV_DIV_14
  1452. * @arg @ref LL_RCC_PREDIV_DIV_15
  1453. * @arg @ref LL_RCC_PREDIV_DIV_16
  1454. * @retval None
  1455. */
  1456. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul, uint32_t PLLDiv)
  1457. {
  1458. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, Source | PLLMul);
  1459. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, PLLDiv);
  1460. }
  1461. #else
  1462. /**
  1463. * @brief Configure PLL used for SYSCLK Domain
  1464. * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  1465. * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n
  1466. * CFGR2 PREDIV LL_RCC_PLL_ConfigDomain_SYS
  1467. * @param Source This parameter can be one of the following values:
  1468. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  1469. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1
  1470. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2
  1471. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3
  1472. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4
  1473. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5
  1474. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6
  1475. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7
  1476. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8
  1477. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9
  1478. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10
  1479. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11
  1480. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12
  1481. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13
  1482. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14
  1483. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15
  1484. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16
  1485. * @param PLLMul This parameter can be one of the following values:
  1486. * @arg @ref LL_RCC_PLL_MUL_2
  1487. * @arg @ref LL_RCC_PLL_MUL_3
  1488. * @arg @ref LL_RCC_PLL_MUL_4
  1489. * @arg @ref LL_RCC_PLL_MUL_5
  1490. * @arg @ref LL_RCC_PLL_MUL_6
  1491. * @arg @ref LL_RCC_PLL_MUL_7
  1492. * @arg @ref LL_RCC_PLL_MUL_8
  1493. * @arg @ref LL_RCC_PLL_MUL_9
  1494. * @arg @ref LL_RCC_PLL_MUL_10
  1495. * @arg @ref LL_RCC_PLL_MUL_11
  1496. * @arg @ref LL_RCC_PLL_MUL_12
  1497. * @arg @ref LL_RCC_PLL_MUL_13
  1498. * @arg @ref LL_RCC_PLL_MUL_14
  1499. * @arg @ref LL_RCC_PLL_MUL_15
  1500. * @arg @ref LL_RCC_PLL_MUL_16
  1501. * @retval None
  1502. */
  1503. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul)
  1504. {
  1505. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, (Source & RCC_CFGR_PLLSRC) | PLLMul);
  1506. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (Source & RCC_CFGR2_PREDIV));
  1507. }
  1508. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  1509. /**
  1510. * @brief Get the oscillator used as PLL clock source.
  1511. * @rmtoll CFGR PLLSRC LL_RCC_PLL_GetMainSource
  1512. * @retval Returned value can be one of the following values:
  1513. * @arg @ref LL_RCC_PLLSOURCE_HSI (*)
  1514. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*)
  1515. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1516. * @arg @ref LL_RCC_PLLSOURCE_HSI48 (*)
  1517. *
  1518. * (*) value not defined in all devices
  1519. */
  1520. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
  1521. {
  1522. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
  1523. }
  1524. /**
  1525. * @brief Get PLL multiplication Factor
  1526. * @rmtoll CFGR PLLMUL LL_RCC_PLL_GetMultiplicator
  1527. * @retval Returned value can be one of the following values:
  1528. * @arg @ref LL_RCC_PLL_MUL_2
  1529. * @arg @ref LL_RCC_PLL_MUL_3
  1530. * @arg @ref LL_RCC_PLL_MUL_4
  1531. * @arg @ref LL_RCC_PLL_MUL_5
  1532. * @arg @ref LL_RCC_PLL_MUL_6
  1533. * @arg @ref LL_RCC_PLL_MUL_7
  1534. * @arg @ref LL_RCC_PLL_MUL_8
  1535. * @arg @ref LL_RCC_PLL_MUL_9
  1536. * @arg @ref LL_RCC_PLL_MUL_10
  1537. * @arg @ref LL_RCC_PLL_MUL_11
  1538. * @arg @ref LL_RCC_PLL_MUL_12
  1539. * @arg @ref LL_RCC_PLL_MUL_13
  1540. * @arg @ref LL_RCC_PLL_MUL_14
  1541. * @arg @ref LL_RCC_PLL_MUL_15
  1542. * @arg @ref LL_RCC_PLL_MUL_16
  1543. */
  1544. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
  1545. {
  1546. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL));
  1547. }
  1548. /**
  1549. * @brief Get PREDIV division factor for the main PLL
  1550. * @note They can be written only when the PLL is disabled
  1551. * @rmtoll CFGR2 PREDIV LL_RCC_PLL_GetPrediv
  1552. * @retval Returned value can be one of the following values:
  1553. * @arg @ref LL_RCC_PREDIV_DIV_1
  1554. * @arg @ref LL_RCC_PREDIV_DIV_2
  1555. * @arg @ref LL_RCC_PREDIV_DIV_3
  1556. * @arg @ref LL_RCC_PREDIV_DIV_4
  1557. * @arg @ref LL_RCC_PREDIV_DIV_5
  1558. * @arg @ref LL_RCC_PREDIV_DIV_6
  1559. * @arg @ref LL_RCC_PREDIV_DIV_7
  1560. * @arg @ref LL_RCC_PREDIV_DIV_8
  1561. * @arg @ref LL_RCC_PREDIV_DIV_9
  1562. * @arg @ref LL_RCC_PREDIV_DIV_10
  1563. * @arg @ref LL_RCC_PREDIV_DIV_11
  1564. * @arg @ref LL_RCC_PREDIV_DIV_12
  1565. * @arg @ref LL_RCC_PREDIV_DIV_13
  1566. * @arg @ref LL_RCC_PREDIV_DIV_14
  1567. * @arg @ref LL_RCC_PREDIV_DIV_15
  1568. * @arg @ref LL_RCC_PREDIV_DIV_16
  1569. */
  1570. __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void)
  1571. {
  1572. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV));
  1573. }
  1574. /**
  1575. * @}
  1576. */
  1577. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  1578. * @{
  1579. */
  1580. /**
  1581. * @brief Clear LSI ready interrupt flag
  1582. * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  1583. * @retval None
  1584. */
  1585. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  1586. {
  1587. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
  1588. }
  1589. /**
  1590. * @brief Clear LSE ready interrupt flag
  1591. * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY
  1592. * @retval None
  1593. */
  1594. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  1595. {
  1596. SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
  1597. }
  1598. /**
  1599. * @brief Clear HSI ready interrupt flag
  1600. * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  1601. * @retval None
  1602. */
  1603. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  1604. {
  1605. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
  1606. }
  1607. /**
  1608. * @brief Clear HSE ready interrupt flag
  1609. * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY
  1610. * @retval None
  1611. */
  1612. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  1613. {
  1614. SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
  1615. }
  1616. /**
  1617. * @brief Clear PLL ready interrupt flag
  1618. * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY
  1619. * @retval None
  1620. */
  1621. __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
  1622. {
  1623. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
  1624. }
  1625. /**
  1626. * @brief Clear HSI14 ready interrupt flag
  1627. * @rmtoll CIR HSI14RDYC LL_RCC_ClearFlag_HSI14RDY
  1628. * @retval None
  1629. */
  1630. __STATIC_INLINE void LL_RCC_ClearFlag_HSI14RDY(void)
  1631. {
  1632. SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYC);
  1633. }
  1634. #if defined(RCC_HSI48_SUPPORT)
  1635. /**
  1636. * @brief Clear HSI48 ready interrupt flag
  1637. * @rmtoll CIR HSI48RDYC LL_RCC_ClearFlag_HSI48RDY
  1638. * @retval None
  1639. */
  1640. __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void)
  1641. {
  1642. SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYC);
  1643. }
  1644. #endif /* RCC_HSI48_SUPPORT */
  1645. /**
  1646. * @brief Clear Clock security system interrupt flag
  1647. * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS
  1648. * @retval None
  1649. */
  1650. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  1651. {
  1652. SET_BIT(RCC->CIR, RCC_CIR_CSSC);
  1653. }
  1654. /**
  1655. * @brief Check if LSI ready interrupt occurred or not
  1656. * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  1657. * @retval State of bit (1 or 0).
  1658. */
  1659. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  1660. {
  1661. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF));
  1662. }
  1663. /**
  1664. * @brief Check if LSE ready interrupt occurred or not
  1665. * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  1666. * @retval State of bit (1 or 0).
  1667. */
  1668. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  1669. {
  1670. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF));
  1671. }
  1672. /**
  1673. * @brief Check if HSI ready interrupt occurred or not
  1674. * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  1675. * @retval State of bit (1 or 0).
  1676. */
  1677. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  1678. {
  1679. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF));
  1680. }
  1681. /**
  1682. * @brief Check if HSE ready interrupt occurred or not
  1683. * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY
  1684. * @retval State of bit (1 or 0).
  1685. */
  1686. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  1687. {
  1688. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF));
  1689. }
  1690. /**
  1691. * @brief Check if PLL ready interrupt occurred or not
  1692. * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY
  1693. * @retval State of bit (1 or 0).
  1694. */
  1695. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
  1696. {
  1697. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF));
  1698. }
  1699. /**
  1700. * @brief Check if HSI14 ready interrupt occurred or not
  1701. * @rmtoll CIR HSI14RDYF LL_RCC_IsActiveFlag_HSI14RDY
  1702. * @retval State of bit (1 or 0).
  1703. */
  1704. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI14RDY(void)
  1705. {
  1706. return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYF) == (RCC_CIR_HSI14RDYF));
  1707. }
  1708. #if defined(RCC_HSI48_SUPPORT)
  1709. /**
  1710. * @brief Check if HSI48 ready interrupt occurred or not
  1711. * @rmtoll CIR HSI48RDYF LL_RCC_IsActiveFlag_HSI48RDY
  1712. * @retval State of bit (1 or 0).
  1713. */
  1714. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void)
  1715. {
  1716. return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYF) == (RCC_CIR_HSI48RDYF));
  1717. }
  1718. #endif /* RCC_HSI48_SUPPORT */
  1719. /**
  1720. * @brief Check if Clock security system interrupt occurred or not
  1721. * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS
  1722. * @retval State of bit (1 or 0).
  1723. */
  1724. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  1725. {
  1726. return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF));
  1727. }
  1728. /**
  1729. * @brief Check if RCC flag Independent Watchdog reset is set or not.
  1730. * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
  1731. * @retval State of bit (1 or 0).
  1732. */
  1733. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  1734. {
  1735. return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
  1736. }
  1737. /**
  1738. * @brief Check if RCC flag Low Power reset is set or not.
  1739. * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
  1740. * @retval State of bit (1 or 0).
  1741. */
  1742. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  1743. {
  1744. return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
  1745. }
  1746. /**
  1747. * @brief Check if RCC flag is set or not.
  1748. * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
  1749. * @retval State of bit (1 or 0).
  1750. */
  1751. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
  1752. {
  1753. return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF));
  1754. }
  1755. /**
  1756. * @brief Check if RCC flag Pin reset is set or not.
  1757. * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  1758. * @retval State of bit (1 or 0).
  1759. */
  1760. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  1761. {
  1762. return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
  1763. }
  1764. /**
  1765. * @brief Check if RCC flag POR/PDR reset is set or not.
  1766. * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST
  1767. * @retval State of bit (1 or 0).
  1768. */
  1769. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
  1770. {
  1771. return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF));
  1772. }
  1773. /**
  1774. * @brief Check if RCC flag Software reset is set or not.
  1775. * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
  1776. * @retval State of bit (1 or 0).
  1777. */
  1778. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  1779. {
  1780. return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
  1781. }
  1782. /**
  1783. * @brief Check if RCC flag Window Watchdog reset is set or not.
  1784. * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
  1785. * @retval State of bit (1 or 0).
  1786. */
  1787. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
  1788. {
  1789. return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
  1790. }
  1791. #if defined(RCC_CSR_V18PWRRSTF)
  1792. /**
  1793. * @brief Check if RCC Reset flag of the 1.8 V domain is set or not.
  1794. * @rmtoll CSR V18PWRRSTF LL_RCC_IsActiveFlag_V18PWRRST
  1795. * @retval State of bit (1 or 0).
  1796. */
  1797. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_V18PWRRST(void)
  1798. {
  1799. return (READ_BIT(RCC->CSR, RCC_CSR_V18PWRRSTF) == (RCC_CSR_V18PWRRSTF));
  1800. }
  1801. #endif /* RCC_CSR_V18PWRRSTF */
  1802. /**
  1803. * @brief Set RMVF bit to clear the reset flags.
  1804. * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
  1805. * @retval None
  1806. */
  1807. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  1808. {
  1809. SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  1810. }
  1811. /**
  1812. * @}
  1813. */
  1814. /** @defgroup RCC_LL_EF_IT_Management IT Management
  1815. * @{
  1816. */
  1817. /**
  1818. * @brief Enable LSI ready interrupt
  1819. * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY
  1820. * @retval None
  1821. */
  1822. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  1823. {
  1824. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  1825. }
  1826. /**
  1827. * @brief Enable LSE ready interrupt
  1828. * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY
  1829. * @retval None
  1830. */
  1831. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  1832. {
  1833. SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  1834. }
  1835. /**
  1836. * @brief Enable HSI ready interrupt
  1837. * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY
  1838. * @retval None
  1839. */
  1840. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  1841. {
  1842. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  1843. }
  1844. /**
  1845. * @brief Enable HSE ready interrupt
  1846. * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY
  1847. * @retval None
  1848. */
  1849. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  1850. {
  1851. SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  1852. }
  1853. /**
  1854. * @brief Enable PLL ready interrupt
  1855. * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY
  1856. * @retval None
  1857. */
  1858. __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
  1859. {
  1860. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  1861. }
  1862. /**
  1863. * @brief Enable HSI14 ready interrupt
  1864. * @rmtoll CIR HSI14RDYIE LL_RCC_EnableIT_HSI14RDY
  1865. * @retval None
  1866. */
  1867. __STATIC_INLINE void LL_RCC_EnableIT_HSI14RDY(void)
  1868. {
  1869. SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE);
  1870. }
  1871. #if defined(RCC_HSI48_SUPPORT)
  1872. /**
  1873. * @brief Enable HSI48 ready interrupt
  1874. * @rmtoll CIR HSI48RDYIE LL_RCC_EnableIT_HSI48RDY
  1875. * @retval None
  1876. */
  1877. __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void)
  1878. {
  1879. SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE);
  1880. }
  1881. #endif /* RCC_HSI48_SUPPORT */
  1882. /**
  1883. * @brief Disable LSI ready interrupt
  1884. * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY
  1885. * @retval None
  1886. */
  1887. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  1888. {
  1889. CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  1890. }
  1891. /**
  1892. * @brief Disable LSE ready interrupt
  1893. * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY
  1894. * @retval None
  1895. */
  1896. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  1897. {
  1898. CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  1899. }
  1900. /**
  1901. * @brief Disable HSI ready interrupt
  1902. * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY
  1903. * @retval None
  1904. */
  1905. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  1906. {
  1907. CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  1908. }
  1909. /**
  1910. * @brief Disable HSE ready interrupt
  1911. * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY
  1912. * @retval None
  1913. */
  1914. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  1915. {
  1916. CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  1917. }
  1918. /**
  1919. * @brief Disable PLL ready interrupt
  1920. * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY
  1921. * @retval None
  1922. */
  1923. __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
  1924. {
  1925. CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  1926. }
  1927. /**
  1928. * @brief Disable HSI14 ready interrupt
  1929. * @rmtoll CIR HSI14RDYIE LL_RCC_DisableIT_HSI14RDY
  1930. * @retval None
  1931. */
  1932. __STATIC_INLINE void LL_RCC_DisableIT_HSI14RDY(void)
  1933. {
  1934. CLEAR_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE);
  1935. }
  1936. #if defined(RCC_HSI48_SUPPORT)
  1937. /**
  1938. * @brief Disable HSI48 ready interrupt
  1939. * @rmtoll CIR HSI48RDYIE LL_RCC_DisableIT_HSI48RDY
  1940. * @retval None
  1941. */
  1942. __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void)
  1943. {
  1944. CLEAR_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE);
  1945. }
  1946. #endif /* RCC_HSI48_SUPPORT */
  1947. /**
  1948. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  1949. * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
  1950. * @retval State of bit (1 or 0).
  1951. */
  1952. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  1953. {
  1954. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE));
  1955. }
  1956. /**
  1957. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  1958. * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY
  1959. * @retval State of bit (1 or 0).
  1960. */
  1961. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  1962. {
  1963. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE));
  1964. }
  1965. /**
  1966. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  1967. * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
  1968. * @retval State of bit (1 or 0).
  1969. */
  1970. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  1971. {
  1972. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE));
  1973. }
  1974. /**
  1975. * @brief Checks if HSE ready interrupt source is enabled or disabled.
  1976. * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY
  1977. * @retval State of bit (1 or 0).
  1978. */
  1979. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
  1980. {
  1981. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE));
  1982. }
  1983. /**
  1984. * @brief Checks if PLL ready interrupt source is enabled or disabled.
  1985. * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY
  1986. * @retval State of bit (1 or 0).
  1987. */
  1988. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
  1989. {
  1990. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE));
  1991. }
  1992. /**
  1993. * @brief Checks if HSI14 ready interrupt source is enabled or disabled.
  1994. * @rmtoll CIR HSI14RDYIE LL_RCC_IsEnabledIT_HSI14RDY
  1995. * @retval State of bit (1 or 0).
  1996. */
  1997. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI14RDY(void)
  1998. {
  1999. return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE) == (RCC_CIR_HSI14RDYIE));
  2000. }
  2001. #if defined(RCC_HSI48_SUPPORT)
  2002. /**
  2003. * @brief Checks if HSI48 ready interrupt source is enabled or disabled.
  2004. * @rmtoll CIR HSI48RDYIE LL_RCC_IsEnabledIT_HSI48RDY
  2005. * @retval State of bit (1 or 0).
  2006. */
  2007. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void)
  2008. {
  2009. return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE) == (RCC_CIR_HSI48RDYIE));
  2010. }
  2011. #endif /* RCC_HSI48_SUPPORT */
  2012. /**
  2013. * @}
  2014. */
  2015. #if defined(USE_FULL_LL_DRIVER)
  2016. /** @defgroup RCC_LL_EF_Init De-initialization function
  2017. * @{
  2018. */
  2019. ErrorStatus LL_RCC_DeInit(void);
  2020. /**
  2021. * @}
  2022. */
  2023. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  2024. * @{
  2025. */
  2026. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  2027. uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
  2028. uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
  2029. #if defined(USB_OTG_FS) || defined(USB)
  2030. uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  2031. #endif /* USB_OTG_FS || USB */
  2032. #if defined(CEC)
  2033. uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource);
  2034. #endif /* CEC */
  2035. /**
  2036. * @}
  2037. */
  2038. #endif /* USE_FULL_LL_DRIVER */
  2039. /**
  2040. * @}
  2041. */
  2042. /**
  2043. * @}
  2044. */
  2045. #endif /* RCC */
  2046. /**
  2047. * @}
  2048. */
  2049. #ifdef __cplusplus
  2050. }
  2051. #endif
  2052. #endif /* __STM32F0xx_LL_RCC_H */
  2053. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/