stm32f1xx_ll_rcc.h 82 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313
  1. /**
  2. ******************************************************************************
  3. * @file stm32f1xx_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.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef __STM32F1xx_LL_RCC_H
  21. #define __STM32F1xx_LL_RCC_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32f1xx.h"
  27. /** @addtogroup STM32F1xx_LL_Driver
  28. * @{
  29. */
  30. #if defined(RCC)
  31. /** @defgroup RCC_LL RCC
  32. * @{
  33. */
  34. /* Private types -------------------------------------------------------------*/
  35. /* Private variables ---------------------------------------------------------*/
  36. /* Private constants ---------------------------------------------------------*/
  37. /* Private macros ------------------------------------------------------------*/
  38. #if defined(USE_FULL_LL_DRIVER)
  39. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  40. * @{
  41. */
  42. /**
  43. * @}
  44. */
  45. #endif /*USE_FULL_LL_DRIVER*/
  46. /* Exported types ------------------------------------------------------------*/
  47. #if defined(USE_FULL_LL_DRIVER)
  48. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  49. * @{
  50. */
  51. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  52. * @{
  53. */
  54. /**
  55. * @brief RCC Clocks Frequency Structure
  56. */
  57. typedef struct
  58. {
  59. uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
  60. uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
  61. uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
  62. uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */
  63. } LL_RCC_ClocksTypeDef;
  64. /**
  65. * @}
  66. */
  67. /**
  68. * @}
  69. */
  70. #endif /* USE_FULL_LL_DRIVER */
  71. /* Exported constants --------------------------------------------------------*/
  72. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  73. * @{
  74. */
  75. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  76. * @brief Defines used to adapt values of different oscillators
  77. * @note These values could be modified in the user environment according to
  78. * HW set-up.
  79. * @{
  80. */
  81. #if !defined (HSE_VALUE)
  82. #define HSE_VALUE 8000000U /*!< Value of the HSE oscillator in Hz */
  83. #endif /* HSE_VALUE */
  84. #if !defined (HSI_VALUE)
  85. #define HSI_VALUE 8000000U /*!< Value of the HSI oscillator in Hz */
  86. #endif /* HSI_VALUE */
  87. #if !defined (LSE_VALUE)
  88. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  89. #endif /* LSE_VALUE */
  90. #if !defined (LSI_VALUE)
  91. #define LSI_VALUE 40000U /*!< Value of the LSI oscillator in Hz */
  92. #endif /* LSI_VALUE */
  93. /**
  94. * @}
  95. */
  96. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  97. * @brief Flags defines which can be used with LL_RCC_WriteReg function
  98. * @{
  99. */
  100. #define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */
  101. #define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */
  102. #define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */
  103. #define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */
  104. #define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */
  105. #define LL_RCC_CIR_PLL3RDYC RCC_CIR_PLL3RDYC /*!< PLL3(PLLI2S) Ready Interrupt Clear */
  106. #define LL_RCC_CIR_PLL2RDYC RCC_CIR_PLL2RDYC /*!< PLL2 Ready Interrupt Clear */
  107. #define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */
  108. /**
  109. * @}
  110. */
  111. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  112. * @brief Flags defines which can be used with LL_RCC_ReadReg function
  113. * @{
  114. */
  115. #define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */
  116. #define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */
  117. #define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */
  118. #define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */
  119. #define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */
  120. #define LL_RCC_CIR_PLL3RDYF RCC_CIR_PLL3RDYF /*!< PLL3(PLLI2S) Ready Interrupt flag */
  121. #define LL_RCC_CIR_PLL2RDYF RCC_CIR_PLL2RDYF /*!< PLL2 Ready Interrupt flag */
  122. #define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */
  123. #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
  124. #define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */
  125. #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
  126. #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
  127. #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
  128. #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */
  129. /**
  130. * @}
  131. */
  132. /** @defgroup RCC_LL_EC_IT IT Defines
  133. * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
  134. * @{
  135. */
  136. #define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */
  137. #define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */
  138. #define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */
  139. #define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */
  140. #define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */
  141. #define LL_RCC_CIR_PLL3RDYIE RCC_CIR_PLL3RDYIE /*!< PLL3(PLLI2S) Ready Interrupt Enable */
  142. #define LL_RCC_CIR_PLL2RDYIE RCC_CIR_PLL2RDYIE /*!< PLL2 Ready Interrupt Enable */
  143. /**
  144. * @}
  145. */
  146. #if defined(RCC_CFGR2_PREDIV2)
  147. /** @defgroup RCC_LL_EC_HSE_PREDIV2_DIV HSE PREDIV2 Division factor
  148. * @{
  149. */
  150. #define LL_RCC_HSE_PREDIV2_DIV_1 RCC_CFGR2_PREDIV2_DIV1 /*!< PREDIV2 input clock not divided */
  151. #define LL_RCC_HSE_PREDIV2_DIV_2 RCC_CFGR2_PREDIV2_DIV2 /*!< PREDIV2 input clock divided by 2 */
  152. #define LL_RCC_HSE_PREDIV2_DIV_3 RCC_CFGR2_PREDIV2_DIV3 /*!< PREDIV2 input clock divided by 3 */
  153. #define LL_RCC_HSE_PREDIV2_DIV_4 RCC_CFGR2_PREDIV2_DIV4 /*!< PREDIV2 input clock divided by 4 */
  154. #define LL_RCC_HSE_PREDIV2_DIV_5 RCC_CFGR2_PREDIV2_DIV5 /*!< PREDIV2 input clock divided by 5 */
  155. #define LL_RCC_HSE_PREDIV2_DIV_6 RCC_CFGR2_PREDIV2_DIV6 /*!< PREDIV2 input clock divided by 6 */
  156. #define LL_RCC_HSE_PREDIV2_DIV_7 RCC_CFGR2_PREDIV2_DIV7 /*!< PREDIV2 input clock divided by 7 */
  157. #define LL_RCC_HSE_PREDIV2_DIV_8 RCC_CFGR2_PREDIV2_DIV8 /*!< PREDIV2 input clock divided by 8 */
  158. #define LL_RCC_HSE_PREDIV2_DIV_9 RCC_CFGR2_PREDIV2_DIV9 /*!< PREDIV2 input clock divided by 9 */
  159. #define LL_RCC_HSE_PREDIV2_DIV_10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */
  160. #define LL_RCC_HSE_PREDIV2_DIV_11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */
  161. #define LL_RCC_HSE_PREDIV2_DIV_12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */
  162. #define LL_RCC_HSE_PREDIV2_DIV_13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */
  163. #define LL_RCC_HSE_PREDIV2_DIV_14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */
  164. #define LL_RCC_HSE_PREDIV2_DIV_15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */
  165. #define LL_RCC_HSE_PREDIV2_DIV_16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */
  166. /**
  167. * @}
  168. */
  169. #endif /* RCC_CFGR2_PREDIV2 */
  170. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  171. * @{
  172. */
  173. #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */
  174. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */
  175. #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */
  176. /**
  177. * @}
  178. */
  179. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  180. * @{
  181. */
  182. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
  183. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
  184. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */
  185. /**
  186. * @}
  187. */
  188. /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
  189. * @{
  190. */
  191. #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */
  192. #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */
  193. #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */
  194. #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */
  195. #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */
  196. #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */
  197. #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
  198. #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
  199. #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
  200. /**
  201. * @}
  202. */
  203. /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
  204. * @{
  205. */
  206. #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */
  207. #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */
  208. #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */
  209. #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */
  210. #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
  211. /**
  212. * @}
  213. */
  214. /** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2)
  215. * @{
  216. */
  217. #define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */
  218. #define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */
  219. #define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */
  220. #define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */
  221. #define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
  222. /**
  223. * @}
  224. */
  225. /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
  226. * @{
  227. */
  228. #define LL_RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCO_NOCLOCK /*!< MCO output disabled, no clock on MCO */
  229. #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCO_SYSCLK /*!< SYSCLK selection as MCO source */
  230. #define LL_RCC_MCO1SOURCE_HSI RCC_CFGR_MCO_HSI /*!< HSI selection as MCO source */
  231. #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCO_HSE /*!< HSE selection as MCO source */
  232. #define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2 RCC_CFGR_MCO_PLLCLK_DIV2 /*!< PLL clock divided by 2*/
  233. #if defined(RCC_CFGR_MCO_PLL2CLK)
  234. #define LL_RCC_MCO1SOURCE_PLL2CLK RCC_CFGR_MCO_PLL2CLK /*!< PLL2 clock selected as MCO source*/
  235. #endif /* RCC_CFGR_MCO_PLL2CLK */
  236. #if defined(RCC_CFGR_MCO_PLL3CLK_DIV2)
  237. #define LL_RCC_MCO1SOURCE_PLLI2SCLK_DIV2 RCC_CFGR_MCO_PLL3CLK_DIV2 /*!< PLLI2S clock divided by 2 selected as MCO source*/
  238. #endif /* RCC_CFGR_MCO_PLL3CLK_DIV2 */
  239. #if defined(RCC_CFGR_MCO_EXT_HSE)
  240. #define LL_RCC_MCO1SOURCE_EXT_HSE RCC_CFGR_MCO_EXT_HSE /*!< XT1 external 3-25 MHz oscillator clock selected as MCO source */
  241. #endif /* RCC_CFGR_MCO_EXT_HSE */
  242. #if defined(RCC_CFGR_MCO_PLL3CLK)
  243. #define LL_RCC_MCO1SOURCE_PLLI2SCLK RCC_CFGR_MCO_PLL3CLK /*!< PLLI2S clock selected as MCO source */
  244. #endif /* RCC_CFGR_MCO_PLL3CLK */
  245. /**
  246. * @}
  247. */
  248. #if defined(USE_FULL_LL_DRIVER)
  249. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  250. * @{
  251. */
  252. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  253. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  254. /**
  255. * @}
  256. */
  257. #endif /* USE_FULL_LL_DRIVER */
  258. #if defined(RCC_CFGR2_I2S2SRC)
  259. /** @defgroup RCC_LL_EC_I2S2CLKSOURCE Peripheral I2S clock source selection
  260. * @{
  261. */
  262. #define LL_RCC_I2S2_CLKSOURCE_SYSCLK RCC_CFGR2_I2S2SRC /*!< System clock (SYSCLK) selected as I2S2 clock entry */
  263. #define LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO (uint32_t)(RCC_CFGR2_I2S2SRC | (RCC_CFGR2_I2S2SRC >> 16U)) /*!< PLLI2S VCO clock selected as I2S2 clock entry */
  264. #define LL_RCC_I2S3_CLKSOURCE_SYSCLK RCC_CFGR2_I2S3SRC /*!< System clock (SYSCLK) selected as I2S3 clock entry */
  265. #define LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO (uint32_t)(RCC_CFGR2_I2S3SRC | (RCC_CFGR2_I2S3SRC >> 16U)) /*!< PLLI2S VCO clock selected as I2S3 clock entry */
  266. /**
  267. * @}
  268. */
  269. #endif /* RCC_CFGR2_I2S2SRC */
  270. #if defined(USB_OTG_FS) || defined(USB)
  271. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  272. * @{
  273. */
  274. #if defined(RCC_CFGR_USBPRE)
  275. #define LL_RCC_USB_CLKSOURCE_PLL RCC_CFGR_USBPRE /*!< PLL clock is not divided */
  276. #define LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 0x00000000U /*!< PLL clock is divided by 1.5 */
  277. #endif /*RCC_CFGR_USBPRE*/
  278. #if defined(RCC_CFGR_OTGFSPRE)
  279. #define LL_RCC_USB_CLKSOURCE_PLL_DIV_2 RCC_CFGR_OTGFSPRE /*!< PLL clock is divided by 2 */
  280. #define LL_RCC_USB_CLKSOURCE_PLL_DIV_3 0x00000000U /*!< PLL clock is divided by 3 */
  281. #endif /*RCC_CFGR_OTGFSPRE*/
  282. /**
  283. * @}
  284. */
  285. #endif /* USB_OTG_FS || USB */
  286. /** @defgroup RCC_LL_EC_ADC_CLKSOURCE_PCLK2 Peripheral ADC clock source selection
  287. * @{
  288. */
  289. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_2 RCC_CFGR_ADCPRE_DIV2 /*ADC prescaler PCLK2 divided by 2*/
  290. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_4 RCC_CFGR_ADCPRE_DIV4 /*ADC prescaler PCLK2 divided by 4*/
  291. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_6 RCC_CFGR_ADCPRE_DIV6 /*ADC prescaler PCLK2 divided by 6*/
  292. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_8 RCC_CFGR_ADCPRE_DIV8 /*ADC prescaler PCLK2 divided by 8*/
  293. /**
  294. * @}
  295. */
  296. #if defined(RCC_CFGR2_I2S2SRC)
  297. /** @defgroup RCC_LL_EC_I2S2 Peripheral I2S get clock source
  298. * @{
  299. */
  300. #define LL_RCC_I2S2_CLKSOURCE RCC_CFGR2_I2S2SRC /*!< I2S2 Clock source selection */
  301. #define LL_RCC_I2S3_CLKSOURCE RCC_CFGR2_I2S3SRC /*!< I2S3 Clock source selection */
  302. /**
  303. * @}
  304. */
  305. #endif /* RCC_CFGR2_I2S2SRC */
  306. #if defined(USB_OTG_FS) || defined(USB)
  307. /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
  308. * @{
  309. */
  310. #define LL_RCC_USB_CLKSOURCE 0x00400000U /*!< USB Clock source selection */
  311. /**
  312. * @}
  313. */
  314. #endif /* USB_OTG_FS || USB */
  315. /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source
  316. * @{
  317. */
  318. #define LL_RCC_ADC_CLKSOURCE RCC_CFGR_ADCPRE /*!< ADC Clock source selection */
  319. /**
  320. * @}
  321. */
  322. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
  323. * @{
  324. */
  325. #define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */
  326. #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */
  327. #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */
  328. #define LL_RCC_RTC_CLKSOURCE_HSE_DIV128 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 128 used as RTC clock */
  329. /**
  330. * @}
  331. */
  332. /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
  333. * @{
  334. */
  335. #if defined(RCC_CFGR_PLLMULL2)
  336. #define LL_RCC_PLL_MUL_2 RCC_CFGR_PLLMULL2 /*!< PLL input clock*2 */
  337. #endif /*RCC_CFGR_PLLMULL2*/
  338. #if defined(RCC_CFGR_PLLMULL3)
  339. #define LL_RCC_PLL_MUL_3 RCC_CFGR_PLLMULL3 /*!< PLL input clock*3 */
  340. #endif /*RCC_CFGR_PLLMULL3*/
  341. #define LL_RCC_PLL_MUL_4 RCC_CFGR_PLLMULL4 /*!< PLL input clock*4 */
  342. #define LL_RCC_PLL_MUL_5 RCC_CFGR_PLLMULL5 /*!< PLL input clock*5 */
  343. #define LL_RCC_PLL_MUL_6 RCC_CFGR_PLLMULL6 /*!< PLL input clock*6 */
  344. #define LL_RCC_PLL_MUL_7 RCC_CFGR_PLLMULL7 /*!< PLL input clock*7 */
  345. #define LL_RCC_PLL_MUL_8 RCC_CFGR_PLLMULL8 /*!< PLL input clock*8 */
  346. #define LL_RCC_PLL_MUL_9 RCC_CFGR_PLLMULL9 /*!< PLL input clock*9 */
  347. #if defined(RCC_CFGR_PLLMULL6_5)
  348. #define LL_RCC_PLL_MUL_6_5 RCC_CFGR_PLLMULL6_5 /*!< PLL input clock*6 */
  349. #else
  350. #define LL_RCC_PLL_MUL_10 RCC_CFGR_PLLMULL10 /*!< PLL input clock*10 */
  351. #define LL_RCC_PLL_MUL_11 RCC_CFGR_PLLMULL11 /*!< PLL input clock*11 */
  352. #define LL_RCC_PLL_MUL_12 RCC_CFGR_PLLMULL12 /*!< PLL input clock*12 */
  353. #define LL_RCC_PLL_MUL_13 RCC_CFGR_PLLMULL13 /*!< PLL input clock*13 */
  354. #define LL_RCC_PLL_MUL_14 RCC_CFGR_PLLMULL14 /*!< PLL input clock*14 */
  355. #define LL_RCC_PLL_MUL_15 RCC_CFGR_PLLMULL15 /*!< PLL input clock*15 */
  356. #define LL_RCC_PLL_MUL_16 RCC_CFGR_PLLMULL16 /*!< PLL input clock*16 */
  357. #endif /*RCC_CFGR_PLLMULL6_5*/
  358. /**
  359. * @}
  360. */
  361. /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
  362. * @{
  363. */
  364. #define LL_RCC_PLLSOURCE_HSI_DIV_2 0x00000000U /*!< HSI clock divided by 2 selected as PLL entry clock source */
  365. #define LL_RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC /*!< HSE/PREDIV1 clock selected as PLL entry clock source */
  366. #if defined(RCC_CFGR2_PREDIV1SRC)
  367. #define LL_RCC_PLLSOURCE_PLL2 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/PREDIV1 clock selected as PLL entry clock source */
  368. #endif /*RCC_CFGR2_PREDIV1SRC*/
  369. #if defined(RCC_CFGR2_PREDIV1)
  370. #define LL_RCC_PLLSOURCE_HSE_DIV_1 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV1) /*!< HSE/1 clock selected as PLL entry clock source */
  371. #define LL_RCC_PLLSOURCE_HSE_DIV_2 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV2) /*!< HSE/2 clock selected as PLL entry clock source */
  372. #define LL_RCC_PLLSOURCE_HSE_DIV_3 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV3) /*!< HSE/3 clock selected as PLL entry clock source */
  373. #define LL_RCC_PLLSOURCE_HSE_DIV_4 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV4) /*!< HSE/4 clock selected as PLL entry clock source */
  374. #define LL_RCC_PLLSOURCE_HSE_DIV_5 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV5) /*!< HSE/5 clock selected as PLL entry clock source */
  375. #define LL_RCC_PLLSOURCE_HSE_DIV_6 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV6) /*!< HSE/6 clock selected as PLL entry clock source */
  376. #define LL_RCC_PLLSOURCE_HSE_DIV_7 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV7) /*!< HSE/7 clock selected as PLL entry clock source */
  377. #define LL_RCC_PLLSOURCE_HSE_DIV_8 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV8) /*!< HSE/8 clock selected as PLL entry clock source */
  378. #define LL_RCC_PLLSOURCE_HSE_DIV_9 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV9) /*!< HSE/9 clock selected as PLL entry clock source */
  379. #define LL_RCC_PLLSOURCE_HSE_DIV_10 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV10) /*!< HSE/10 clock selected as PLL entry clock source */
  380. #define LL_RCC_PLLSOURCE_HSE_DIV_11 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV11) /*!< HSE/11 clock selected as PLL entry clock source */
  381. #define LL_RCC_PLLSOURCE_HSE_DIV_12 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV12) /*!< HSE/12 clock selected as PLL entry clock source */
  382. #define LL_RCC_PLLSOURCE_HSE_DIV_13 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV13) /*!< HSE/13 clock selected as PLL entry clock source */
  383. #define LL_RCC_PLLSOURCE_HSE_DIV_14 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV14) /*!< HSE/14 clock selected as PLL entry clock source */
  384. #define LL_RCC_PLLSOURCE_HSE_DIV_15 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV15) /*!< HSE/15 clock selected as PLL entry clock source */
  385. #define LL_RCC_PLLSOURCE_HSE_DIV_16 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV16) /*!< HSE/16 clock selected as PLL entry clock source */
  386. #if defined(RCC_CFGR2_PREDIV1SRC)
  387. #define LL_RCC_PLLSOURCE_PLL2_DIV_1 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV1 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/1 clock selected as PLL entry clock source */
  388. #define LL_RCC_PLLSOURCE_PLL2_DIV_2 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV2 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/2 clock selected as PLL entry clock source */
  389. #define LL_RCC_PLLSOURCE_PLL2_DIV_3 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV3 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/3 clock selected as PLL entry clock source */
  390. #define LL_RCC_PLLSOURCE_PLL2_DIV_4 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV4 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/4 clock selected as PLL entry clock source */
  391. #define LL_RCC_PLLSOURCE_PLL2_DIV_5 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV5 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/5 clock selected as PLL entry clock source */
  392. #define LL_RCC_PLLSOURCE_PLL2_DIV_6 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV6 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/6 clock selected as PLL entry clock source */
  393. #define LL_RCC_PLLSOURCE_PLL2_DIV_7 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV7 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/7 clock selected as PLL entry clock source */
  394. #define LL_RCC_PLLSOURCE_PLL2_DIV_8 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV8 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/8 clock selected as PLL entry clock source */
  395. #define LL_RCC_PLLSOURCE_PLL2_DIV_9 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV9 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/9 clock selected as PLL entry clock source */
  396. #define LL_RCC_PLLSOURCE_PLL2_DIV_10 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV10 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/10 clock selected as PLL entry clock source */
  397. #define LL_RCC_PLLSOURCE_PLL2_DIV_11 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV11 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/11 clock selected as PLL entry clock source */
  398. #define LL_RCC_PLLSOURCE_PLL2_DIV_12 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV12 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/12 clock selected as PLL entry clock source */
  399. #define LL_RCC_PLLSOURCE_PLL2_DIV_13 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV13 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/13 clock selected as PLL entry clock source */
  400. #define LL_RCC_PLLSOURCE_PLL2_DIV_14 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV14 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/14 clock selected as PLL entry clock source */
  401. #define LL_RCC_PLLSOURCE_PLL2_DIV_15 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV15 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/15 clock selected as PLL entry clock source */
  402. #define LL_RCC_PLLSOURCE_PLL2_DIV_16 (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV16 | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/16 clock selected as PLL entry clock source */
  403. #endif /*RCC_CFGR2_PREDIV1SRC*/
  404. #else
  405. #define LL_RCC_PLLSOURCE_HSE_DIV_1 (RCC_CFGR_PLLSRC | 0x00000000U) /*!< HSE/1 clock selected as PLL entry clock source */
  406. #define LL_RCC_PLLSOURCE_HSE_DIV_2 (RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE) /*!< HSE/2 clock selected as PLL entry clock source */
  407. #endif /*RCC_CFGR2_PREDIV1*/
  408. /**
  409. * @}
  410. */
  411. /** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor
  412. * @{
  413. */
  414. #if defined(RCC_CFGR2_PREDIV1)
  415. #define LL_RCC_PREDIV_DIV_1 RCC_CFGR2_PREDIV1_DIV1 /*!< PREDIV1 input clock not divided */
  416. #define LL_RCC_PREDIV_DIV_2 RCC_CFGR2_PREDIV1_DIV2 /*!< PREDIV1 input clock divided by 2 */
  417. #define LL_RCC_PREDIV_DIV_3 RCC_CFGR2_PREDIV1_DIV3 /*!< PREDIV1 input clock divided by 3 */
  418. #define LL_RCC_PREDIV_DIV_4 RCC_CFGR2_PREDIV1_DIV4 /*!< PREDIV1 input clock divided by 4 */
  419. #define LL_RCC_PREDIV_DIV_5 RCC_CFGR2_PREDIV1_DIV5 /*!< PREDIV1 input clock divided by 5 */
  420. #define LL_RCC_PREDIV_DIV_6 RCC_CFGR2_PREDIV1_DIV6 /*!< PREDIV1 input clock divided by 6 */
  421. #define LL_RCC_PREDIV_DIV_7 RCC_CFGR2_PREDIV1_DIV7 /*!< PREDIV1 input clock divided by 7 */
  422. #define LL_RCC_PREDIV_DIV_8 RCC_CFGR2_PREDIV1_DIV8 /*!< PREDIV1 input clock divided by 8 */
  423. #define LL_RCC_PREDIV_DIV_9 RCC_CFGR2_PREDIV1_DIV9 /*!< PREDIV1 input clock divided by 9 */
  424. #define LL_RCC_PREDIV_DIV_10 RCC_CFGR2_PREDIV1_DIV10 /*!< PREDIV1 input clock divided by 10 */
  425. #define LL_RCC_PREDIV_DIV_11 RCC_CFGR2_PREDIV1_DIV11 /*!< PREDIV1 input clock divided by 11 */
  426. #define LL_RCC_PREDIV_DIV_12 RCC_CFGR2_PREDIV1_DIV12 /*!< PREDIV1 input clock divided by 12 */
  427. #define LL_RCC_PREDIV_DIV_13 RCC_CFGR2_PREDIV1_DIV13 /*!< PREDIV1 input clock divided by 13 */
  428. #define LL_RCC_PREDIV_DIV_14 RCC_CFGR2_PREDIV1_DIV14 /*!< PREDIV1 input clock divided by 14 */
  429. #define LL_RCC_PREDIV_DIV_15 RCC_CFGR2_PREDIV1_DIV15 /*!< PREDIV1 input clock divided by 15 */
  430. #define LL_RCC_PREDIV_DIV_16 RCC_CFGR2_PREDIV1_DIV16 /*!< PREDIV1 input clock divided by 16 */
  431. #else
  432. #define LL_RCC_PREDIV_DIV_1 0x00000000U /*!< HSE divider clock clock not divided */
  433. #define LL_RCC_PREDIV_DIV_2 RCC_CFGR_PLLXTPRE /*!< HSE divider clock divided by 2 for PLL entry */
  434. #endif /*RCC_CFGR2_PREDIV1*/
  435. /**
  436. * @}
  437. */
  438. #if defined(RCC_PLLI2S_SUPPORT)
  439. /** @defgroup RCC_LL_EC_PLLI2S_MUL PLLI2S MUL
  440. * @{
  441. */
  442. #define LL_RCC_PLLI2S_MUL_8 RCC_CFGR2_PLL3MUL8 /*!< PLLI2S input clock * 8 */
  443. #define LL_RCC_PLLI2S_MUL_9 RCC_CFGR2_PLL3MUL9 /*!< PLLI2S input clock * 9 */
  444. #define LL_RCC_PLLI2S_MUL_10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */
  445. #define LL_RCC_PLLI2S_MUL_11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */
  446. #define LL_RCC_PLLI2S_MUL_12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */
  447. #define LL_RCC_PLLI2S_MUL_13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */
  448. #define LL_RCC_PLLI2S_MUL_14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */
  449. #define LL_RCC_PLLI2S_MUL_16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */
  450. #define LL_RCC_PLLI2S_MUL_20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */
  451. /**
  452. * @}
  453. */
  454. #endif /* RCC_PLLI2S_SUPPORT */
  455. #if defined(RCC_PLL2_SUPPORT)
  456. /** @defgroup RCC_LL_EC_PLL2_MUL PLL2 MUL
  457. * @{
  458. */
  459. #define LL_RCC_PLL2_MUL_8 RCC_CFGR2_PLL2MUL8 /*!< PLL2 input clock * 8 */
  460. #define LL_RCC_PLL2_MUL_9 RCC_CFGR2_PLL2MUL9 /*!< PLL2 input clock * 9 */
  461. #define LL_RCC_PLL2_MUL_10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */
  462. #define LL_RCC_PLL2_MUL_11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */
  463. #define LL_RCC_PLL2_MUL_12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */
  464. #define LL_RCC_PLL2_MUL_13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */
  465. #define LL_RCC_PLL2_MUL_14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */
  466. #define LL_RCC_PLL2_MUL_16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */
  467. #define LL_RCC_PLL2_MUL_20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */
  468. /**
  469. * @}
  470. */
  471. #endif /* RCC_PLL2_SUPPORT */
  472. /**
  473. * @}
  474. */
  475. /* Exported macro ------------------------------------------------------------*/
  476. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  477. * @{
  478. */
  479. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  480. * @{
  481. */
  482. /**
  483. * @brief Write a value in RCC register
  484. * @param __REG__ Register to be written
  485. * @param __VALUE__ Value to be written in the register
  486. * @retval None
  487. */
  488. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
  489. /**
  490. * @brief Read a value in RCC register
  491. * @param __REG__ Register to be read
  492. * @retval Register value
  493. */
  494. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  495. /**
  496. * @}
  497. */
  498. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  499. * @{
  500. */
  501. #if defined(RCC_CFGR_PLLMULL6_5)
  502. /**
  503. * @brief Helper macro to calculate the PLLCLK frequency
  504. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator());
  505. * @param __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv1 / HSI div 2 / PLL2 div Prediv1)
  506. * @param __PLLMUL__: This parameter can be one of the following values:
  507. * @arg @ref LL_RCC_PLL_MUL_4
  508. * @arg @ref LL_RCC_PLL_MUL_5
  509. * @arg @ref LL_RCC_PLL_MUL_6
  510. * @arg @ref LL_RCC_PLL_MUL_7
  511. * @arg @ref LL_RCC_PLL_MUL_8
  512. * @arg @ref LL_RCC_PLL_MUL_9
  513. * @arg @ref LL_RCC_PLL_MUL_6_5
  514. * @retval PLL clock frequency (in Hz)
  515. */
  516. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \
  517. (((__PLLMUL__) != RCC_CFGR_PLLMULL6_5) ? \
  518. ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos) + 2U)) :\
  519. (((__INPUTFREQ__) * 13U) / 2U))
  520. #else
  521. /**
  522. * @brief Helper macro to calculate the PLLCLK frequency
  523. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator ());
  524. * @param __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv1 or div 2 / HSI div 2)
  525. * @param __PLLMUL__: This parameter can be one of the following values:
  526. * @arg @ref LL_RCC_PLL_MUL_2
  527. * @arg @ref LL_RCC_PLL_MUL_3
  528. * @arg @ref LL_RCC_PLL_MUL_4
  529. * @arg @ref LL_RCC_PLL_MUL_5
  530. * @arg @ref LL_RCC_PLL_MUL_6
  531. * @arg @ref LL_RCC_PLL_MUL_7
  532. * @arg @ref LL_RCC_PLL_MUL_8
  533. * @arg @ref LL_RCC_PLL_MUL_9
  534. * @arg @ref LL_RCC_PLL_MUL_10
  535. * @arg @ref LL_RCC_PLL_MUL_11
  536. * @arg @ref LL_RCC_PLL_MUL_12
  537. * @arg @ref LL_RCC_PLL_MUL_13
  538. * @arg @ref LL_RCC_PLL_MUL_14
  539. * @arg @ref LL_RCC_PLL_MUL_15
  540. * @arg @ref LL_RCC_PLL_MUL_16
  541. * @retval PLL clock frequency (in Hz)
  542. */
  543. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) ((__INPUTFREQ__) * (((__PLLMUL__) >> RCC_CFGR_PLLMULL_Pos) + 2U))
  544. #endif /* RCC_CFGR_PLLMULL6_5 */
  545. #if defined(RCC_PLLI2S_SUPPORT)
  546. /**
  547. * @brief Helper macro to calculate the PLLI2S frequency
  548. * @note ex: @ref __LL_RCC_CALC_PLLI2SCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLLI2S_GetMultiplicator (), @ref LL_RCC_HSE_GetPrediv2 ());
  549. * @param __INPUTFREQ__ PLLI2S Input frequency (based on HSE value)
  550. * @param __PLLI2SMUL__: This parameter can be one of the following values:
  551. * @arg @ref LL_RCC_PLLI2S_MUL_8
  552. * @arg @ref LL_RCC_PLLI2S_MUL_9
  553. * @arg @ref LL_RCC_PLLI2S_MUL_10
  554. * @arg @ref LL_RCC_PLLI2S_MUL_11
  555. * @arg @ref LL_RCC_PLLI2S_MUL_12
  556. * @arg @ref LL_RCC_PLLI2S_MUL_13
  557. * @arg @ref LL_RCC_PLLI2S_MUL_14
  558. * @arg @ref LL_RCC_PLLI2S_MUL_16
  559. * @arg @ref LL_RCC_PLLI2S_MUL_20
  560. * @param __PLLI2SDIV__: This parameter can be one of the following values:
  561. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
  562. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
  563. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
  564. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
  565. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
  566. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
  567. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
  568. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
  569. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
  570. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
  571. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
  572. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
  573. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
  574. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
  575. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
  576. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
  577. * @retval PLLI2S clock frequency (in Hz)
  578. */
  579. #define __LL_RCC_CALC_PLLI2SCLK_FREQ(__INPUTFREQ__, __PLLI2SMUL__, __PLLI2SDIV__) (((__INPUTFREQ__) * (((__PLLI2SMUL__) >> RCC_CFGR2_PLL3MUL_Pos) + 2U)) / (((__PLLI2SDIV__) >> RCC_CFGR2_PREDIV2_Pos) + 1U))
  580. #endif /* RCC_PLLI2S_SUPPORT */
  581. #if defined(RCC_PLL2_SUPPORT)
  582. /**
  583. * @brief Helper macro to calculate the PLL2 frequency
  584. * @note ex: @ref __LL_RCC_CALC_PLL2CLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL2_GetMultiplicator (), @ref LL_RCC_HSE_GetPrediv2 ());
  585. * @param __INPUTFREQ__ PLL2 Input frequency (based on HSE value)
  586. * @param __PLL2MUL__: This parameter can be one of the following values:
  587. * @arg @ref LL_RCC_PLL2_MUL_8
  588. * @arg @ref LL_RCC_PLL2_MUL_9
  589. * @arg @ref LL_RCC_PLL2_MUL_10
  590. * @arg @ref LL_RCC_PLL2_MUL_11
  591. * @arg @ref LL_RCC_PLL2_MUL_12
  592. * @arg @ref LL_RCC_PLL2_MUL_13
  593. * @arg @ref LL_RCC_PLL2_MUL_14
  594. * @arg @ref LL_RCC_PLL2_MUL_16
  595. * @arg @ref LL_RCC_PLL2_MUL_20
  596. * @param __PLL2DIV__: This parameter can be one of the following values:
  597. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
  598. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
  599. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
  600. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
  601. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
  602. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
  603. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
  604. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
  605. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
  606. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
  607. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
  608. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
  609. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
  610. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
  611. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
  612. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
  613. * @retval PLL2 clock frequency (in Hz)
  614. */
  615. #define __LL_RCC_CALC_PLL2CLK_FREQ(__INPUTFREQ__, __PLL2MUL__, __PLL2DIV__) (((__INPUTFREQ__) * (((__PLL2MUL__) >> RCC_CFGR2_PLL2MUL_Pos) + 2U)) / (((__PLL2DIV__) >> RCC_CFGR2_PREDIV2_Pos) + 1U))
  616. #endif /* RCC_PLL2_SUPPORT */
  617. /**
  618. * @brief Helper macro to calculate the HCLK frequency
  619. * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
  620. * ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
  621. * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
  622. * @param __AHBPRESCALER__: This parameter can be one of the following values:
  623. * @arg @ref LL_RCC_SYSCLK_DIV_1
  624. * @arg @ref LL_RCC_SYSCLK_DIV_2
  625. * @arg @ref LL_RCC_SYSCLK_DIV_4
  626. * @arg @ref LL_RCC_SYSCLK_DIV_8
  627. * @arg @ref LL_RCC_SYSCLK_DIV_16
  628. * @arg @ref LL_RCC_SYSCLK_DIV_64
  629. * @arg @ref LL_RCC_SYSCLK_DIV_128
  630. * @arg @ref LL_RCC_SYSCLK_DIV_256
  631. * @arg @ref LL_RCC_SYSCLK_DIV_512
  632. * @retval HCLK clock frequency (in Hz)
  633. */
  634. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos])
  635. /**
  636. * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
  637. * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
  638. * ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
  639. * @param __HCLKFREQ__ HCLK frequency
  640. * @param __APB1PRESCALER__: This parameter can be one of the following values:
  641. * @arg @ref LL_RCC_APB1_DIV_1
  642. * @arg @ref LL_RCC_APB1_DIV_2
  643. * @arg @ref LL_RCC_APB1_DIV_4
  644. * @arg @ref LL_RCC_APB1_DIV_8
  645. * @arg @ref LL_RCC_APB1_DIV_16
  646. * @retval PCLK1 clock frequency (in Hz)
  647. */
  648. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos])
  649. /**
  650. * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
  651. * @note: __APB2PRESCALER__ be retrieved by @ref LL_RCC_GetAPB2Prescaler
  652. * ex: __LL_RCC_CALC_PCLK2_FREQ(LL_RCC_GetAPB2Prescaler())
  653. * @param __HCLKFREQ__ HCLK frequency
  654. * @param __APB2PRESCALER__: This parameter can be one of the following values:
  655. * @arg @ref LL_RCC_APB2_DIV_1
  656. * @arg @ref LL_RCC_APB2_DIV_2
  657. * @arg @ref LL_RCC_APB2_DIV_4
  658. * @arg @ref LL_RCC_APB2_DIV_8
  659. * @arg @ref LL_RCC_APB2_DIV_16
  660. * @retval PCLK2 clock frequency (in Hz)
  661. */
  662. #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos])
  663. /**
  664. * @}
  665. */
  666. /**
  667. * @}
  668. */
  669. /* Exported functions --------------------------------------------------------*/
  670. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  671. * @{
  672. */
  673. /** @defgroup RCC_LL_EF_HSE HSE
  674. * @{
  675. */
  676. /**
  677. * @brief Enable the Clock Security System.
  678. * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS
  679. * @retval None
  680. */
  681. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  682. {
  683. SET_BIT(RCC->CR, RCC_CR_CSSON);
  684. }
  685. /**
  686. * @brief Enable HSE external oscillator (HSE Bypass)
  687. * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
  688. * @retval None
  689. */
  690. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  691. {
  692. SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  693. }
  694. /**
  695. * @brief Disable HSE external oscillator (HSE Bypass)
  696. * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
  697. * @retval None
  698. */
  699. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  700. {
  701. CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  702. }
  703. /**
  704. * @brief Enable HSE crystal oscillator (HSE ON)
  705. * @rmtoll CR HSEON LL_RCC_HSE_Enable
  706. * @retval None
  707. */
  708. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  709. {
  710. SET_BIT(RCC->CR, RCC_CR_HSEON);
  711. }
  712. /**
  713. * @brief Disable HSE crystal oscillator (HSE ON)
  714. * @rmtoll CR HSEON LL_RCC_HSE_Disable
  715. * @retval None
  716. */
  717. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  718. {
  719. CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  720. }
  721. /**
  722. * @brief Check if HSE oscillator Ready
  723. * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
  724. * @retval State of bit (1 or 0).
  725. */
  726. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  727. {
  728. return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
  729. }
  730. #if defined(RCC_CFGR2_PREDIV2)
  731. /**
  732. * @brief Get PREDIV2 division factor
  733. * @rmtoll CFGR2 PREDIV2 LL_RCC_HSE_GetPrediv2
  734. * @retval Returned value can be one of the following values:
  735. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
  736. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
  737. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
  738. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
  739. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
  740. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
  741. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
  742. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
  743. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
  744. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
  745. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
  746. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
  747. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
  748. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
  749. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
  750. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
  751. */
  752. __STATIC_INLINE uint32_t LL_RCC_HSE_GetPrediv2(void)
  753. {
  754. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2));
  755. }
  756. #endif /* RCC_CFGR2_PREDIV2 */
  757. /**
  758. * @}
  759. */
  760. /** @defgroup RCC_LL_EF_HSI HSI
  761. * @{
  762. */
  763. /**
  764. * @brief Enable HSI oscillator
  765. * @rmtoll CR HSION LL_RCC_HSI_Enable
  766. * @retval None
  767. */
  768. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  769. {
  770. SET_BIT(RCC->CR, RCC_CR_HSION);
  771. }
  772. /**
  773. * @brief Disable HSI oscillator
  774. * @rmtoll CR HSION LL_RCC_HSI_Disable
  775. * @retval None
  776. */
  777. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  778. {
  779. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  780. }
  781. /**
  782. * @brief Check if HSI clock is ready
  783. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  784. * @retval State of bit (1 or 0).
  785. */
  786. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  787. {
  788. return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
  789. }
  790. /**
  791. * @brief Get HSI Calibration value
  792. * @note When HSITRIM is written, HSICAL is updated with the sum of
  793. * HSITRIM and the factory trim value
  794. * @rmtoll CR HSICAL LL_RCC_HSI_GetCalibration
  795. * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  796. */
  797. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  798. {
  799. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos);
  800. }
  801. /**
  802. * @brief Set HSI Calibration trimming
  803. * @note user-programmable trimming value that is added to the HSICAL
  804. * @note Default value is 16, which, when added to the HSICAL value,
  805. * should trim the HSI to 16 MHz +/- 1 %
  806. * @rmtoll CR HSITRIM LL_RCC_HSI_SetCalibTrimming
  807. * @param Value between Min_Data = 0x00 and Max_Data = 0x1F
  808. * @retval None
  809. */
  810. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  811. {
  812. MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos);
  813. }
  814. /**
  815. * @brief Get HSI Calibration trimming
  816. * @rmtoll CR HSITRIM LL_RCC_HSI_GetCalibTrimming
  817. * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  818. */
  819. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  820. {
  821. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
  822. }
  823. /**
  824. * @}
  825. */
  826. /** @defgroup RCC_LL_EF_LSE LSE
  827. * @{
  828. */
  829. /**
  830. * @brief Enable Low Speed External (LSE) crystal.
  831. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  832. * @retval None
  833. */
  834. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  835. {
  836. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  837. }
  838. /**
  839. * @brief Disable Low Speed External (LSE) crystal.
  840. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  841. * @retval None
  842. */
  843. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  844. {
  845. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  846. }
  847. /**
  848. * @brief Enable external clock source (LSE bypass).
  849. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  850. * @retval None
  851. */
  852. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  853. {
  854. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  855. }
  856. /**
  857. * @brief Disable external clock source (LSE bypass).
  858. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  859. * @retval None
  860. */
  861. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  862. {
  863. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  864. }
  865. /**
  866. * @brief Check if LSE oscillator Ready
  867. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  868. * @retval State of bit (1 or 0).
  869. */
  870. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  871. {
  872. return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
  873. }
  874. /**
  875. * @}
  876. */
  877. /** @defgroup RCC_LL_EF_LSI LSI
  878. * @{
  879. */
  880. /**
  881. * @brief Enable LSI Oscillator
  882. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  883. * @retval None
  884. */
  885. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  886. {
  887. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  888. }
  889. /**
  890. * @brief Disable LSI Oscillator
  891. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  892. * @retval None
  893. */
  894. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  895. {
  896. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  897. }
  898. /**
  899. * @brief Check if LSI is Ready
  900. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  901. * @retval State of bit (1 or 0).
  902. */
  903. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  904. {
  905. return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
  906. }
  907. /**
  908. * @}
  909. */
  910. /** @defgroup RCC_LL_EF_System System
  911. * @{
  912. */
  913. /**
  914. * @brief Configure the system clock source
  915. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  916. * @param Source This parameter can be one of the following values:
  917. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  918. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  919. * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
  920. * @retval None
  921. */
  922. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  923. {
  924. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  925. }
  926. /**
  927. * @brief Get the system clock source
  928. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  929. * @retval Returned value can be one of the following values:
  930. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  931. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  932. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
  933. */
  934. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  935. {
  936. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  937. }
  938. /**
  939. * @brief Set AHB prescaler
  940. * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
  941. * @param Prescaler This parameter can be one of the following values:
  942. * @arg @ref LL_RCC_SYSCLK_DIV_1
  943. * @arg @ref LL_RCC_SYSCLK_DIV_2
  944. * @arg @ref LL_RCC_SYSCLK_DIV_4
  945. * @arg @ref LL_RCC_SYSCLK_DIV_8
  946. * @arg @ref LL_RCC_SYSCLK_DIV_16
  947. * @arg @ref LL_RCC_SYSCLK_DIV_64
  948. * @arg @ref LL_RCC_SYSCLK_DIV_128
  949. * @arg @ref LL_RCC_SYSCLK_DIV_256
  950. * @arg @ref LL_RCC_SYSCLK_DIV_512
  951. * @retval None
  952. */
  953. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  954. {
  955. MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  956. }
  957. /**
  958. * @brief Set APB1 prescaler
  959. * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler
  960. * @param Prescaler This parameter can be one of the following values:
  961. * @arg @ref LL_RCC_APB1_DIV_1
  962. * @arg @ref LL_RCC_APB1_DIV_2
  963. * @arg @ref LL_RCC_APB1_DIV_4
  964. * @arg @ref LL_RCC_APB1_DIV_8
  965. * @arg @ref LL_RCC_APB1_DIV_16
  966. * @retval None
  967. */
  968. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  969. {
  970. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
  971. }
  972. /**
  973. * @brief Set APB2 prescaler
  974. * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler
  975. * @param Prescaler This parameter can be one of the following values:
  976. * @arg @ref LL_RCC_APB2_DIV_1
  977. * @arg @ref LL_RCC_APB2_DIV_2
  978. * @arg @ref LL_RCC_APB2_DIV_4
  979. * @arg @ref LL_RCC_APB2_DIV_8
  980. * @arg @ref LL_RCC_APB2_DIV_16
  981. * @retval None
  982. */
  983. __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
  984. {
  985. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
  986. }
  987. /**
  988. * @brief Get AHB prescaler
  989. * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
  990. * @retval Returned value can be one of the following values:
  991. * @arg @ref LL_RCC_SYSCLK_DIV_1
  992. * @arg @ref LL_RCC_SYSCLK_DIV_2
  993. * @arg @ref LL_RCC_SYSCLK_DIV_4
  994. * @arg @ref LL_RCC_SYSCLK_DIV_8
  995. * @arg @ref LL_RCC_SYSCLK_DIV_16
  996. * @arg @ref LL_RCC_SYSCLK_DIV_64
  997. * @arg @ref LL_RCC_SYSCLK_DIV_128
  998. * @arg @ref LL_RCC_SYSCLK_DIV_256
  999. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1000. */
  1001. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  1002. {
  1003. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  1004. }
  1005. /**
  1006. * @brief Get APB1 prescaler
  1007. * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler
  1008. * @retval Returned value can be one of the following values:
  1009. * @arg @ref LL_RCC_APB1_DIV_1
  1010. * @arg @ref LL_RCC_APB1_DIV_2
  1011. * @arg @ref LL_RCC_APB1_DIV_4
  1012. * @arg @ref LL_RCC_APB1_DIV_8
  1013. * @arg @ref LL_RCC_APB1_DIV_16
  1014. */
  1015. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  1016. {
  1017. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
  1018. }
  1019. /**
  1020. * @brief Get APB2 prescaler
  1021. * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler
  1022. * @retval Returned value can be one of the following values:
  1023. * @arg @ref LL_RCC_APB2_DIV_1
  1024. * @arg @ref LL_RCC_APB2_DIV_2
  1025. * @arg @ref LL_RCC_APB2_DIV_4
  1026. * @arg @ref LL_RCC_APB2_DIV_8
  1027. * @arg @ref LL_RCC_APB2_DIV_16
  1028. */
  1029. __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
  1030. {
  1031. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
  1032. }
  1033. /**
  1034. * @}
  1035. */
  1036. /** @defgroup RCC_LL_EF_MCO MCO
  1037. * @{
  1038. */
  1039. /**
  1040. * @brief Configure MCOx
  1041. * @rmtoll CFGR MCO LL_RCC_ConfigMCO
  1042. * @param MCOxSource This parameter can be one of the following values:
  1043. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  1044. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  1045. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  1046. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  1047. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2
  1048. * @arg @ref LL_RCC_MCO1SOURCE_PLL2CLK (*)
  1049. * @arg @ref LL_RCC_MCO1SOURCE_PLLI2SCLK_DIV2 (*)
  1050. * @arg @ref LL_RCC_MCO1SOURCE_EXT_HSE (*)
  1051. * @arg @ref LL_RCC_MCO1SOURCE_PLLI2SCLK (*)
  1052. *
  1053. * (*) value not defined in all devices
  1054. * @retval None
  1055. */
  1056. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource)
  1057. {
  1058. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource);
  1059. }
  1060. /**
  1061. * @}
  1062. */
  1063. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1064. * @{
  1065. */
  1066. #if defined(RCC_CFGR2_I2S2SRC)
  1067. /**
  1068. * @brief Configure I2Sx clock source
  1069. * @rmtoll CFGR2 I2S2SRC LL_RCC_SetI2SClockSource\n
  1070. * CFGR2 I2S3SRC LL_RCC_SetI2SClockSource
  1071. * @param I2SxSource This parameter can be one of the following values:
  1072. * @arg @ref LL_RCC_I2S2_CLKSOURCE_SYSCLK
  1073. * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO
  1074. * @arg @ref LL_RCC_I2S3_CLKSOURCE_SYSCLK
  1075. * @arg @ref LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO
  1076. * @retval None
  1077. */
  1078. __STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t I2SxSource)
  1079. {
  1080. MODIFY_REG(RCC->CFGR2, (I2SxSource & 0xFFFF0000U), (I2SxSource << 16U));
  1081. }
  1082. #endif /* RCC_CFGR2_I2S2SRC */
  1083. #if defined(USB_OTG_FS) || defined(USB)
  1084. /**
  1085. * @brief Configure USB clock source
  1086. * @rmtoll CFGR OTGFSPRE LL_RCC_SetUSBClockSource\n
  1087. * CFGR USBPRE LL_RCC_SetUSBClockSource
  1088. * @param USBxSource This parameter can be one of the following values:
  1089. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL (*)
  1090. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 (*)
  1091. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_2 (*)
  1092. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_3 (*)
  1093. *
  1094. * (*) value not defined in all devices
  1095. * @retval None
  1096. */
  1097. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
  1098. {
  1099. #if defined(RCC_CFGR_USBPRE)
  1100. MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, USBxSource);
  1101. #else /*RCC_CFGR_OTGFSPRE*/
  1102. MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, USBxSource);
  1103. #endif /*RCC_CFGR_USBPRE*/
  1104. }
  1105. #endif /* USB_OTG_FS || USB */
  1106. /**
  1107. * @brief Configure ADC clock source
  1108. * @rmtoll CFGR ADCPRE LL_RCC_SetADCClockSource
  1109. * @param ADCxSource This parameter can be one of the following values:
  1110. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
  1111. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
  1112. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
  1113. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
  1114. * @retval None
  1115. */
  1116. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
  1117. {
  1118. MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, ADCxSource);
  1119. }
  1120. #if defined(RCC_CFGR2_I2S2SRC)
  1121. /**
  1122. * @brief Get I2Sx clock source
  1123. * @rmtoll CFGR2 I2S2SRC LL_RCC_GetI2SClockSource\n
  1124. * CFGR2 I2S3SRC LL_RCC_GetI2SClockSource
  1125. * @param I2Sx This parameter can be one of the following values:
  1126. * @arg @ref LL_RCC_I2S2_CLKSOURCE
  1127. * @arg @ref LL_RCC_I2S3_CLKSOURCE
  1128. * @retval Returned value can be one of the following values:
  1129. * @arg @ref LL_RCC_I2S2_CLKSOURCE_SYSCLK
  1130. * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO
  1131. * @arg @ref LL_RCC_I2S3_CLKSOURCE_SYSCLK
  1132. * @arg @ref LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO
  1133. */
  1134. __STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx)
  1135. {
  1136. return (uint32_t)(READ_BIT(RCC->CFGR2, I2Sx) >> 16U | I2Sx);
  1137. }
  1138. #endif /* RCC_CFGR2_I2S2SRC */
  1139. #if defined(USB_OTG_FS) || defined(USB)
  1140. /**
  1141. * @brief Get USBx clock source
  1142. * @rmtoll CFGR OTGFSPRE LL_RCC_GetUSBClockSource\n
  1143. * CFGR USBPRE LL_RCC_GetUSBClockSource
  1144. * @param USBx This parameter can be one of the following values:
  1145. * @arg @ref LL_RCC_USB_CLKSOURCE
  1146. * @retval Returned value can be one of the following values:
  1147. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL (*)
  1148. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 (*)
  1149. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_2 (*)
  1150. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_3 (*)
  1151. *
  1152. * (*) value not defined in all devices
  1153. */
  1154. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
  1155. {
  1156. return (uint32_t)(READ_BIT(RCC->CFGR, USBx));
  1157. }
  1158. #endif /* USB_OTG_FS || USB */
  1159. /**
  1160. * @brief Get ADCx clock source
  1161. * @rmtoll CFGR ADCPRE LL_RCC_GetADCClockSource
  1162. * @param ADCx This parameter can be one of the following values:
  1163. * @arg @ref LL_RCC_ADC_CLKSOURCE
  1164. * @retval Returned value can be one of the following values:
  1165. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
  1166. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
  1167. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
  1168. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
  1169. */
  1170. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
  1171. {
  1172. return (uint32_t)(READ_BIT(RCC->CFGR, ADCx));
  1173. }
  1174. /**
  1175. * @}
  1176. */
  1177. /** @defgroup RCC_LL_EF_RTC RTC
  1178. * @{
  1179. */
  1180. /**
  1181. * @brief Set RTC Clock Source
  1182. * @note Once the RTC clock source has been selected, it cannot be changed any more unless
  1183. * the Backup domain is reset. The BDRST bit can be used to reset them.
  1184. * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource
  1185. * @param Source This parameter can be one of the following values:
  1186. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1187. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1188. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1189. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV128
  1190. * @retval None
  1191. */
  1192. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  1193. {
  1194. MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  1195. }
  1196. /**
  1197. * @brief Get RTC Clock Source
  1198. * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource
  1199. * @retval Returned value can be one of the following values:
  1200. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1201. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1202. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1203. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV128
  1204. */
  1205. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  1206. {
  1207. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  1208. }
  1209. /**
  1210. * @brief Enable RTC
  1211. * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
  1212. * @retval None
  1213. */
  1214. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  1215. {
  1216. SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1217. }
  1218. /**
  1219. * @brief Disable RTC
  1220. * @rmtoll BDCR RTCEN LL_RCC_DisableRTC
  1221. * @retval None
  1222. */
  1223. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  1224. {
  1225. CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1226. }
  1227. /**
  1228. * @brief Check if RTC has been enabled or not
  1229. * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC
  1230. * @retval State of bit (1 or 0).
  1231. */
  1232. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  1233. {
  1234. return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
  1235. }
  1236. /**
  1237. * @brief Force the Backup domain reset
  1238. * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset
  1239. * @retval None
  1240. */
  1241. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  1242. {
  1243. SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1244. }
  1245. /**
  1246. * @brief Release the Backup domain reset
  1247. * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset
  1248. * @retval None
  1249. */
  1250. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  1251. {
  1252. CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1253. }
  1254. /**
  1255. * @}
  1256. */
  1257. /** @defgroup RCC_LL_EF_PLL PLL
  1258. * @{
  1259. */
  1260. /**
  1261. * @brief Enable PLL
  1262. * @rmtoll CR PLLON LL_RCC_PLL_Enable
  1263. * @retval None
  1264. */
  1265. __STATIC_INLINE void LL_RCC_PLL_Enable(void)
  1266. {
  1267. SET_BIT(RCC->CR, RCC_CR_PLLON);
  1268. }
  1269. /**
  1270. * @brief Disable PLL
  1271. * @note Cannot be disabled if the PLL clock is used as the system clock
  1272. * @rmtoll CR PLLON LL_RCC_PLL_Disable
  1273. * @retval None
  1274. */
  1275. __STATIC_INLINE void LL_RCC_PLL_Disable(void)
  1276. {
  1277. CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
  1278. }
  1279. /**
  1280. * @brief Check if PLL Ready
  1281. * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
  1282. * @retval State of bit (1 or 0).
  1283. */
  1284. __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
  1285. {
  1286. return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
  1287. }
  1288. /**
  1289. * @brief Configure PLL used for SYSCLK Domain
  1290. * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  1291. * CFGR PLLXTPRE LL_RCC_PLL_ConfigDomain_SYS\n
  1292. * CFGR PLLMULL LL_RCC_PLL_ConfigDomain_SYS\n
  1293. * CFGR2 PREDIV1 LL_RCC_PLL_ConfigDomain_SYS\n
  1294. * CFGR2 PREDIV1SRC LL_RCC_PLL_ConfigDomain_SYS
  1295. * @param Source This parameter can be one of the following values:
  1296. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  1297. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1
  1298. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2 (*)
  1299. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3 (*)
  1300. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4 (*)
  1301. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5 (*)
  1302. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6 (*)
  1303. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7 (*)
  1304. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8 (*)
  1305. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9 (*)
  1306. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10 (*)
  1307. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11 (*)
  1308. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12 (*)
  1309. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13 (*)
  1310. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14 (*)
  1311. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15 (*)
  1312. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16 (*)
  1313. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_1 (*)
  1314. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_2 (*)
  1315. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_3 (*)
  1316. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_4 (*)
  1317. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_5 (*)
  1318. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_6 (*)
  1319. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_7 (*)
  1320. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_8 (*)
  1321. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_9 (*)
  1322. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_10 (*)
  1323. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_11 (*)
  1324. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_12 (*)
  1325. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_13 (*)
  1326. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_14 (*)
  1327. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_15 (*)
  1328. * @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_16 (*)
  1329. *
  1330. * (*) value not defined in all devices
  1331. * @param PLLMul This parameter can be one of the following values:
  1332. * @arg @ref LL_RCC_PLL_MUL_2 (*)
  1333. * @arg @ref LL_RCC_PLL_MUL_3 (*)
  1334. * @arg @ref LL_RCC_PLL_MUL_4
  1335. * @arg @ref LL_RCC_PLL_MUL_5
  1336. * @arg @ref LL_RCC_PLL_MUL_6
  1337. * @arg @ref LL_RCC_PLL_MUL_7
  1338. * @arg @ref LL_RCC_PLL_MUL_8
  1339. * @arg @ref LL_RCC_PLL_MUL_9
  1340. * @arg @ref LL_RCC_PLL_MUL_6_5 (*)
  1341. * @arg @ref LL_RCC_PLL_MUL_10 (*)
  1342. * @arg @ref LL_RCC_PLL_MUL_11 (*)
  1343. * @arg @ref LL_RCC_PLL_MUL_12 (*)
  1344. * @arg @ref LL_RCC_PLL_MUL_13 (*)
  1345. * @arg @ref LL_RCC_PLL_MUL_14 (*)
  1346. * @arg @ref LL_RCC_PLL_MUL_15 (*)
  1347. * @arg @ref LL_RCC_PLL_MUL_16 (*)
  1348. *
  1349. * (*) value not defined in all devices
  1350. * @retval None
  1351. */
  1352. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul)
  1353. {
  1354. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL,
  1355. (Source & (RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE)) | PLLMul);
  1356. #if defined(RCC_CFGR2_PREDIV1)
  1357. #if defined(RCC_CFGR2_PREDIV1SRC)
  1358. MODIFY_REG(RCC->CFGR2, (RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC),
  1359. (Source & RCC_CFGR2_PREDIV1) | ((Source & (RCC_CFGR2_PREDIV1SRC << 4U)) >> 4U));
  1360. #else
  1361. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (Source & RCC_CFGR2_PREDIV1));
  1362. #endif /*RCC_CFGR2_PREDIV1SRC*/
  1363. #endif /*RCC_CFGR2_PREDIV1*/
  1364. }
  1365. /**
  1366. * @brief Configure PLL clock source
  1367. * @rmtoll CFGR PLLSRC LL_RCC_PLL_SetMainSource\n
  1368. * CFGR2 PREDIV1SRC LL_RCC_PLL_SetMainSource
  1369. * @param PLLSource This parameter can be one of the following values:
  1370. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  1371. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1372. * @arg @ref LL_RCC_PLLSOURCE_PLL2 (*)
  1373. * @retval None
  1374. */
  1375. __STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource)
  1376. {
  1377. #if defined(RCC_CFGR2_PREDIV1SRC)
  1378. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC, ((PLLSource & (RCC_CFGR2_PREDIV1SRC << 4U)) >> 4U));
  1379. #endif /* RCC_CFGR2_PREDIV1SRC */
  1380. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC, PLLSource);
  1381. }
  1382. /**
  1383. * @brief Get the oscillator used as PLL clock source.
  1384. * @rmtoll CFGR PLLSRC LL_RCC_PLL_GetMainSource\n
  1385. * CFGR2 PREDIV1SRC LL_RCC_PLL_GetMainSource
  1386. * @retval Returned value can be one of the following values:
  1387. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  1388. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1389. * @arg @ref LL_RCC_PLLSOURCE_PLL2 (*)
  1390. *
  1391. * (*) value not defined in all devices
  1392. */
  1393. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
  1394. {
  1395. #if defined(RCC_CFGR2_PREDIV1SRC)
  1396. uint32_t pllsrc = READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC);
  1397. uint32_t predivsrc = (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC) << 4U);
  1398. return (uint32_t)(pllsrc | predivsrc);
  1399. #else
  1400. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
  1401. #endif /*RCC_CFGR2_PREDIV1SRC*/
  1402. }
  1403. /**
  1404. * @brief Get PLL multiplication Factor
  1405. * @rmtoll CFGR PLLMULL LL_RCC_PLL_GetMultiplicator
  1406. * @retval Returned value can be one of the following values:
  1407. * @arg @ref LL_RCC_PLL_MUL_2 (*)
  1408. * @arg @ref LL_RCC_PLL_MUL_3 (*)
  1409. * @arg @ref LL_RCC_PLL_MUL_4
  1410. * @arg @ref LL_RCC_PLL_MUL_5
  1411. * @arg @ref LL_RCC_PLL_MUL_6
  1412. * @arg @ref LL_RCC_PLL_MUL_7
  1413. * @arg @ref LL_RCC_PLL_MUL_8
  1414. * @arg @ref LL_RCC_PLL_MUL_9
  1415. * @arg @ref LL_RCC_PLL_MUL_6_5 (*)
  1416. * @arg @ref LL_RCC_PLL_MUL_10 (*)
  1417. * @arg @ref LL_RCC_PLL_MUL_11 (*)
  1418. * @arg @ref LL_RCC_PLL_MUL_12 (*)
  1419. * @arg @ref LL_RCC_PLL_MUL_13 (*)
  1420. * @arg @ref LL_RCC_PLL_MUL_14 (*)
  1421. * @arg @ref LL_RCC_PLL_MUL_15 (*)
  1422. * @arg @ref LL_RCC_PLL_MUL_16 (*)
  1423. *
  1424. * (*) value not defined in all devices
  1425. */
  1426. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
  1427. {
  1428. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMULL));
  1429. }
  1430. /**
  1431. * @brief Get PREDIV1 division factor for the main PLL
  1432. * @note They can be written only when the PLL is disabled
  1433. * @rmtoll CFGR2 PREDIV1 LL_RCC_PLL_GetPrediv\n
  1434. * CFGR2 PLLXTPRE LL_RCC_PLL_GetPrediv
  1435. * @retval Returned value can be one of the following values:
  1436. * @arg @ref LL_RCC_PREDIV_DIV_1
  1437. * @arg @ref LL_RCC_PREDIV_DIV_2
  1438. * @arg @ref LL_RCC_PREDIV_DIV_3 (*)
  1439. * @arg @ref LL_RCC_PREDIV_DIV_4 (*)
  1440. * @arg @ref LL_RCC_PREDIV_DIV_5 (*)
  1441. * @arg @ref LL_RCC_PREDIV_DIV_6 (*)
  1442. * @arg @ref LL_RCC_PREDIV_DIV_7 (*)
  1443. * @arg @ref LL_RCC_PREDIV_DIV_8 (*)
  1444. * @arg @ref LL_RCC_PREDIV_DIV_9 (*)
  1445. * @arg @ref LL_RCC_PREDIV_DIV_10 (*)
  1446. * @arg @ref LL_RCC_PREDIV_DIV_11 (*)
  1447. * @arg @ref LL_RCC_PREDIV_DIV_12 (*)
  1448. * @arg @ref LL_RCC_PREDIV_DIV_13 (*)
  1449. * @arg @ref LL_RCC_PREDIV_DIV_14 (*)
  1450. * @arg @ref LL_RCC_PREDIV_DIV_15 (*)
  1451. * @arg @ref LL_RCC_PREDIV_DIV_16 (*)
  1452. *
  1453. * (*) value not defined in all devices
  1454. */
  1455. __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void)
  1456. {
  1457. #if defined(RCC_CFGR2_PREDIV1)
  1458. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1));
  1459. #else
  1460. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos);
  1461. #endif /*RCC_CFGR2_PREDIV1*/
  1462. }
  1463. /**
  1464. * @}
  1465. */
  1466. #if defined(RCC_PLLI2S_SUPPORT)
  1467. /** @defgroup RCC_LL_EF_PLLI2S PLLI2S
  1468. * @{
  1469. */
  1470. /**
  1471. * @brief Enable PLLI2S
  1472. * @rmtoll CR PLL3ON LL_RCC_PLLI2S_Enable
  1473. * @retval None
  1474. */
  1475. __STATIC_INLINE void LL_RCC_PLLI2S_Enable(void)
  1476. {
  1477. SET_BIT(RCC->CR, RCC_CR_PLL3ON);
  1478. }
  1479. /**
  1480. * @brief Disable PLLI2S
  1481. * @rmtoll CR PLL3ON LL_RCC_PLLI2S_Disable
  1482. * @retval None
  1483. */
  1484. __STATIC_INLINE void LL_RCC_PLLI2S_Disable(void)
  1485. {
  1486. CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);
  1487. }
  1488. /**
  1489. * @brief Check if PLLI2S Ready
  1490. * @rmtoll CR PLL3RDY LL_RCC_PLLI2S_IsReady
  1491. * @retval State of bit (1 or 0).
  1492. */
  1493. __STATIC_INLINE uint32_t LL_RCC_PLLI2S_IsReady(void)
  1494. {
  1495. return (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) == (RCC_CR_PLL3RDY));
  1496. }
  1497. /**
  1498. * @brief Configure PLLI2S used for I2S Domain
  1499. * @rmtoll CFGR2 PREDIV2 LL_RCC_PLL_ConfigDomain_PLLI2S\n
  1500. * CFGR2 PLL3MUL LL_RCC_PLL_ConfigDomain_PLLI2S
  1501. * @param Divider This parameter can be one of the following values:
  1502. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
  1503. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
  1504. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
  1505. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
  1506. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
  1507. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
  1508. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
  1509. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
  1510. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
  1511. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
  1512. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
  1513. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
  1514. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
  1515. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
  1516. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
  1517. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
  1518. * @param Multiplicator This parameter can be one of the following values:
  1519. * @arg @ref LL_RCC_PLLI2S_MUL_8
  1520. * @arg @ref LL_RCC_PLLI2S_MUL_9
  1521. * @arg @ref LL_RCC_PLLI2S_MUL_10
  1522. * @arg @ref LL_RCC_PLLI2S_MUL_11
  1523. * @arg @ref LL_RCC_PLLI2S_MUL_12
  1524. * @arg @ref LL_RCC_PLLI2S_MUL_13
  1525. * @arg @ref LL_RCC_PLLI2S_MUL_14
  1526. * @arg @ref LL_RCC_PLLI2S_MUL_16
  1527. * @arg @ref LL_RCC_PLLI2S_MUL_20
  1528. * @retval None
  1529. */
  1530. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLLI2S(uint32_t Divider, uint32_t Multiplicator)
  1531. {
  1532. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL3MUL, Divider | Multiplicator);
  1533. }
  1534. /**
  1535. * @brief Get PLLI2S Multiplication Factor
  1536. * @rmtoll CFGR2 PLL3MUL LL_RCC_PLLI2S_GetMultiplicator
  1537. * @retval Returned value can be one of the following values:
  1538. * @arg @ref LL_RCC_PLLI2S_MUL_8
  1539. * @arg @ref LL_RCC_PLLI2S_MUL_9
  1540. * @arg @ref LL_RCC_PLLI2S_MUL_10
  1541. * @arg @ref LL_RCC_PLLI2S_MUL_11
  1542. * @arg @ref LL_RCC_PLLI2S_MUL_12
  1543. * @arg @ref LL_RCC_PLLI2S_MUL_13
  1544. * @arg @ref LL_RCC_PLLI2S_MUL_14
  1545. * @arg @ref LL_RCC_PLLI2S_MUL_16
  1546. * @arg @ref LL_RCC_PLLI2S_MUL_20
  1547. */
  1548. __STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetMultiplicator(void)
  1549. {
  1550. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL));
  1551. }
  1552. /**
  1553. * @}
  1554. */
  1555. #endif /* RCC_PLLI2S_SUPPORT */
  1556. #if defined(RCC_PLL2_SUPPORT)
  1557. /** @defgroup RCC_LL_EF_PLL2 PLL2
  1558. * @{
  1559. */
  1560. /**
  1561. * @brief Enable PLL2
  1562. * @rmtoll CR PLL2ON LL_RCC_PLL2_Enable
  1563. * @retval None
  1564. */
  1565. __STATIC_INLINE void LL_RCC_PLL2_Enable(void)
  1566. {
  1567. SET_BIT(RCC->CR, RCC_CR_PLL2ON);
  1568. }
  1569. /**
  1570. * @brief Disable PLL2
  1571. * @rmtoll CR PLL2ON LL_RCC_PLL2_Disable
  1572. * @retval None
  1573. */
  1574. __STATIC_INLINE void LL_RCC_PLL2_Disable(void)
  1575. {
  1576. CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);
  1577. }
  1578. /**
  1579. * @brief Check if PLL2 Ready
  1580. * @rmtoll CR PLL2RDY LL_RCC_PLL2_IsReady
  1581. * @retval State of bit (1 or 0).
  1582. */
  1583. __STATIC_INLINE uint32_t LL_RCC_PLL2_IsReady(void)
  1584. {
  1585. return (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) == (RCC_CR_PLL2RDY));
  1586. }
  1587. /**
  1588. * @brief Configure PLL2 used for PLL2 Domain
  1589. * @rmtoll CFGR2 PREDIV2 LL_RCC_PLL_ConfigDomain_PLL2\n
  1590. * CFGR2 PLL2MUL LL_RCC_PLL_ConfigDomain_PLL2
  1591. * @param Divider This parameter can be one of the following values:
  1592. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
  1593. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
  1594. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
  1595. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
  1596. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
  1597. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
  1598. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
  1599. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
  1600. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
  1601. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
  1602. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
  1603. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
  1604. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
  1605. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
  1606. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
  1607. * @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
  1608. * @param Multiplicator This parameter can be one of the following values:
  1609. * @arg @ref LL_RCC_PLL2_MUL_8
  1610. * @arg @ref LL_RCC_PLL2_MUL_9
  1611. * @arg @ref LL_RCC_PLL2_MUL_10
  1612. * @arg @ref LL_RCC_PLL2_MUL_11
  1613. * @arg @ref LL_RCC_PLL2_MUL_12
  1614. * @arg @ref LL_RCC_PLL2_MUL_13
  1615. * @arg @ref LL_RCC_PLL2_MUL_14
  1616. * @arg @ref LL_RCC_PLL2_MUL_16
  1617. * @arg @ref LL_RCC_PLL2_MUL_20
  1618. * @retval None
  1619. */
  1620. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLL2(uint32_t Divider, uint32_t Multiplicator)
  1621. {
  1622. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL, Divider | Multiplicator);
  1623. }
  1624. /**
  1625. * @brief Get PLL2 Multiplication Factor
  1626. * @rmtoll CFGR2 PLL2MUL LL_RCC_PLL2_GetMultiplicator
  1627. * @retval Returned value can be one of the following values:
  1628. * @arg @ref LL_RCC_PLL2_MUL_8
  1629. * @arg @ref LL_RCC_PLL2_MUL_9
  1630. * @arg @ref LL_RCC_PLL2_MUL_10
  1631. * @arg @ref LL_RCC_PLL2_MUL_11
  1632. * @arg @ref LL_RCC_PLL2_MUL_12
  1633. * @arg @ref LL_RCC_PLL2_MUL_13
  1634. * @arg @ref LL_RCC_PLL2_MUL_14
  1635. * @arg @ref LL_RCC_PLL2_MUL_16
  1636. * @arg @ref LL_RCC_PLL2_MUL_20
  1637. */
  1638. __STATIC_INLINE uint32_t LL_RCC_PLL2_GetMultiplicator(void)
  1639. {
  1640. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL2MUL));
  1641. }
  1642. /**
  1643. * @}
  1644. */
  1645. #endif /* RCC_PLL2_SUPPORT */
  1646. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  1647. * @{
  1648. */
  1649. /**
  1650. * @brief Clear LSI ready interrupt flag
  1651. * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  1652. * @retval None
  1653. */
  1654. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  1655. {
  1656. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
  1657. }
  1658. /**
  1659. * @brief Clear LSE ready interrupt flag
  1660. * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY
  1661. * @retval None
  1662. */
  1663. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  1664. {
  1665. SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
  1666. }
  1667. /**
  1668. * @brief Clear HSI ready interrupt flag
  1669. * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  1670. * @retval None
  1671. */
  1672. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  1673. {
  1674. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
  1675. }
  1676. /**
  1677. * @brief Clear HSE ready interrupt flag
  1678. * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY
  1679. * @retval None
  1680. */
  1681. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  1682. {
  1683. SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
  1684. }
  1685. /**
  1686. * @brief Clear PLL ready interrupt flag
  1687. * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY
  1688. * @retval None
  1689. */
  1690. __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
  1691. {
  1692. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
  1693. }
  1694. #if defined(RCC_PLLI2S_SUPPORT)
  1695. /**
  1696. * @brief Clear PLLI2S ready interrupt flag
  1697. * @rmtoll CIR PLL3RDYC LL_RCC_ClearFlag_PLLI2SRDY
  1698. * @retval None
  1699. */
  1700. __STATIC_INLINE void LL_RCC_ClearFlag_PLLI2SRDY(void)
  1701. {
  1702. SET_BIT(RCC->CIR, RCC_CIR_PLL3RDYC);
  1703. }
  1704. #endif /* RCC_PLLI2S_SUPPORT */
  1705. #if defined(RCC_PLL2_SUPPORT)
  1706. /**
  1707. * @brief Clear PLL2 ready interrupt flag
  1708. * @rmtoll CIR PLL2RDYC LL_RCC_ClearFlag_PLL2RDY
  1709. * @retval None
  1710. */
  1711. __STATIC_INLINE void LL_RCC_ClearFlag_PLL2RDY(void)
  1712. {
  1713. SET_BIT(RCC->CIR, RCC_CIR_PLL2RDYC);
  1714. }
  1715. #endif /* RCC_PLL2_SUPPORT */
  1716. /**
  1717. * @brief Clear Clock security system interrupt flag
  1718. * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS
  1719. * @retval None
  1720. */
  1721. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  1722. {
  1723. SET_BIT(RCC->CIR, RCC_CIR_CSSC);
  1724. }
  1725. /**
  1726. * @brief Check if LSI ready interrupt occurred or not
  1727. * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  1728. * @retval State of bit (1 or 0).
  1729. */
  1730. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  1731. {
  1732. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF));
  1733. }
  1734. /**
  1735. * @brief Check if LSE ready interrupt occurred or not
  1736. * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  1737. * @retval State of bit (1 or 0).
  1738. */
  1739. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  1740. {
  1741. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF));
  1742. }
  1743. /**
  1744. * @brief Check if HSI ready interrupt occurred or not
  1745. * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  1746. * @retval State of bit (1 or 0).
  1747. */
  1748. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  1749. {
  1750. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF));
  1751. }
  1752. /**
  1753. * @brief Check if HSE ready interrupt occurred or not
  1754. * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY
  1755. * @retval State of bit (1 or 0).
  1756. */
  1757. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  1758. {
  1759. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF));
  1760. }
  1761. /**
  1762. * @brief Check if PLL ready interrupt occurred or not
  1763. * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY
  1764. * @retval State of bit (1 or 0).
  1765. */
  1766. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
  1767. {
  1768. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF));
  1769. }
  1770. #if defined(RCC_PLLI2S_SUPPORT)
  1771. /**
  1772. * @brief Check if PLLI2S ready interrupt occurred or not
  1773. * @rmtoll CIR PLL3RDYF LL_RCC_IsActiveFlag_PLLI2SRDY
  1774. * @retval State of bit (1 or 0).
  1775. */
  1776. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLI2SRDY(void)
  1777. {
  1778. return (READ_BIT(RCC->CIR, RCC_CIR_PLL3RDYF) == (RCC_CIR_PLL3RDYF));
  1779. }
  1780. #endif /* RCC_PLLI2S_SUPPORT */
  1781. #if defined(RCC_PLL2_SUPPORT)
  1782. /**
  1783. * @brief Check if PLL2 ready interrupt occurred or not
  1784. * @rmtoll CIR PLL2RDYF LL_RCC_IsActiveFlag_PLL2RDY
  1785. * @retval State of bit (1 or 0).
  1786. */
  1787. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL2RDY(void)
  1788. {
  1789. return (READ_BIT(RCC->CIR, RCC_CIR_PLL2RDYF) == (RCC_CIR_PLL2RDYF));
  1790. }
  1791. #endif /* RCC_PLL2_SUPPORT */
  1792. /**
  1793. * @brief Check if Clock security system interrupt occurred or not
  1794. * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS
  1795. * @retval State of bit (1 or 0).
  1796. */
  1797. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  1798. {
  1799. return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF));
  1800. }
  1801. /**
  1802. * @brief Check if RCC flag Independent Watchdog reset is set or not.
  1803. * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
  1804. * @retval State of bit (1 or 0).
  1805. */
  1806. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  1807. {
  1808. return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
  1809. }
  1810. /**
  1811. * @brief Check if RCC flag Low Power reset is set or not.
  1812. * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
  1813. * @retval State of bit (1 or 0).
  1814. */
  1815. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  1816. {
  1817. return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
  1818. }
  1819. /**
  1820. * @brief Check if RCC flag Pin reset is set or not.
  1821. * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  1822. * @retval State of bit (1 or 0).
  1823. */
  1824. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  1825. {
  1826. return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
  1827. }
  1828. /**
  1829. * @brief Check if RCC flag POR/PDR reset is set or not.
  1830. * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST
  1831. * @retval State of bit (1 or 0).
  1832. */
  1833. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
  1834. {
  1835. return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF));
  1836. }
  1837. /**
  1838. * @brief Check if RCC flag Software reset is set or not.
  1839. * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
  1840. * @retval State of bit (1 or 0).
  1841. */
  1842. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  1843. {
  1844. return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
  1845. }
  1846. /**
  1847. * @brief Check if RCC flag Window Watchdog reset is set or not.
  1848. * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
  1849. * @retval State of bit (1 or 0).
  1850. */
  1851. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
  1852. {
  1853. return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
  1854. }
  1855. /**
  1856. * @brief Set RMVF bit to clear the reset flags.
  1857. * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
  1858. * @retval None
  1859. */
  1860. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  1861. {
  1862. SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  1863. }
  1864. /**
  1865. * @}
  1866. */
  1867. /** @defgroup RCC_LL_EF_IT_Management IT Management
  1868. * @{
  1869. */
  1870. /**
  1871. * @brief Enable LSI ready interrupt
  1872. * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY
  1873. * @retval None
  1874. */
  1875. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  1876. {
  1877. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  1878. }
  1879. /**
  1880. * @brief Enable LSE ready interrupt
  1881. * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY
  1882. * @retval None
  1883. */
  1884. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  1885. {
  1886. SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  1887. }
  1888. /**
  1889. * @brief Enable HSI ready interrupt
  1890. * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY
  1891. * @retval None
  1892. */
  1893. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  1894. {
  1895. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  1896. }
  1897. /**
  1898. * @brief Enable HSE ready interrupt
  1899. * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY
  1900. * @retval None
  1901. */
  1902. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  1903. {
  1904. SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  1905. }
  1906. /**
  1907. * @brief Enable PLL ready interrupt
  1908. * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY
  1909. * @retval None
  1910. */
  1911. __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
  1912. {
  1913. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  1914. }
  1915. #if defined(RCC_PLLI2S_SUPPORT)
  1916. /**
  1917. * @brief Enable PLLI2S ready interrupt
  1918. * @rmtoll CIR PLL3RDYIE LL_RCC_EnableIT_PLLI2SRDY
  1919. * @retval None
  1920. */
  1921. __STATIC_INLINE void LL_RCC_EnableIT_PLLI2SRDY(void)
  1922. {
  1923. SET_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE);
  1924. }
  1925. #endif /* RCC_PLLI2S_SUPPORT */
  1926. #if defined(RCC_PLL2_SUPPORT)
  1927. /**
  1928. * @brief Enable PLL2 ready interrupt
  1929. * @rmtoll CIR PLL2RDYIE LL_RCC_EnableIT_PLL2RDY
  1930. * @retval None
  1931. */
  1932. __STATIC_INLINE void LL_RCC_EnableIT_PLL2RDY(void)
  1933. {
  1934. SET_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE);
  1935. }
  1936. #endif /* RCC_PLL2_SUPPORT */
  1937. /**
  1938. * @brief Disable LSI ready interrupt
  1939. * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY
  1940. * @retval None
  1941. */
  1942. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  1943. {
  1944. CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  1945. }
  1946. /**
  1947. * @brief Disable LSE ready interrupt
  1948. * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY
  1949. * @retval None
  1950. */
  1951. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  1952. {
  1953. CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  1954. }
  1955. /**
  1956. * @brief Disable HSI ready interrupt
  1957. * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY
  1958. * @retval None
  1959. */
  1960. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  1961. {
  1962. CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  1963. }
  1964. /**
  1965. * @brief Disable HSE ready interrupt
  1966. * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY
  1967. * @retval None
  1968. */
  1969. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  1970. {
  1971. CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  1972. }
  1973. /**
  1974. * @brief Disable PLL ready interrupt
  1975. * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY
  1976. * @retval None
  1977. */
  1978. __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
  1979. {
  1980. CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  1981. }
  1982. #if defined(RCC_PLLI2S_SUPPORT)
  1983. /**
  1984. * @brief Disable PLLI2S ready interrupt
  1985. * @rmtoll CIR PLL3RDYIE LL_RCC_DisableIT_PLLI2SRDY
  1986. * @retval None
  1987. */
  1988. __STATIC_INLINE void LL_RCC_DisableIT_PLLI2SRDY(void)
  1989. {
  1990. CLEAR_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE);
  1991. }
  1992. #endif /* RCC_PLLI2S_SUPPORT */
  1993. #if defined(RCC_PLL2_SUPPORT)
  1994. /**
  1995. * @brief Disable PLL2 ready interrupt
  1996. * @rmtoll CIR PLL2RDYIE LL_RCC_DisableIT_PLL2RDY
  1997. * @retval None
  1998. */
  1999. __STATIC_INLINE void LL_RCC_DisableIT_PLL2RDY(void)
  2000. {
  2001. CLEAR_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE);
  2002. }
  2003. #endif /* RCC_PLL2_SUPPORT */
  2004. /**
  2005. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  2006. * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
  2007. * @retval State of bit (1 or 0).
  2008. */
  2009. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  2010. {
  2011. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE));
  2012. }
  2013. /**
  2014. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  2015. * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY
  2016. * @retval State of bit (1 or 0).
  2017. */
  2018. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  2019. {
  2020. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE));
  2021. }
  2022. /**
  2023. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  2024. * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
  2025. * @retval State of bit (1 or 0).
  2026. */
  2027. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  2028. {
  2029. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE));
  2030. }
  2031. /**
  2032. * @brief Checks if HSE ready interrupt source is enabled or disabled.
  2033. * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY
  2034. * @retval State of bit (1 or 0).
  2035. */
  2036. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
  2037. {
  2038. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE));
  2039. }
  2040. /**
  2041. * @brief Checks if PLL ready interrupt source is enabled or disabled.
  2042. * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY
  2043. * @retval State of bit (1 or 0).
  2044. */
  2045. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
  2046. {
  2047. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE));
  2048. }
  2049. #if defined(RCC_PLLI2S_SUPPORT)
  2050. /**
  2051. * @brief Checks if PLLI2S ready interrupt source is enabled or disabled.
  2052. * @rmtoll CIR PLL3RDYIE LL_RCC_IsEnabledIT_PLLI2SRDY
  2053. * @retval State of bit (1 or 0).
  2054. */
  2055. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLI2SRDY(void)
  2056. {
  2057. return (READ_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE) == (RCC_CIR_PLL3RDYIE));
  2058. }
  2059. #endif /* RCC_PLLI2S_SUPPORT */
  2060. #if defined(RCC_PLL2_SUPPORT)
  2061. /**
  2062. * @brief Checks if PLL2 ready interrupt source is enabled or disabled.
  2063. * @rmtoll CIR PLL2RDYIE LL_RCC_IsEnabledIT_PLL2RDY
  2064. * @retval State of bit (1 or 0).
  2065. */
  2066. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLL2RDY(void)
  2067. {
  2068. return (READ_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE) == (RCC_CIR_PLL2RDYIE));
  2069. }
  2070. #endif /* RCC_PLL2_SUPPORT */
  2071. /**
  2072. * @}
  2073. */
  2074. #if defined(USE_FULL_LL_DRIVER)
  2075. /** @defgroup RCC_LL_EF_Init De-initialization function
  2076. * @{
  2077. */
  2078. ErrorStatus LL_RCC_DeInit(void);
  2079. /**
  2080. * @}
  2081. */
  2082. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  2083. * @{
  2084. */
  2085. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  2086. #if defined(RCC_CFGR2_I2S2SRC)
  2087. uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource);
  2088. #endif /* RCC_CFGR2_I2S2SRC */
  2089. #if defined(USB_OTG_FS) || defined(USB)
  2090. uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  2091. #endif /* USB_OTG_FS || USB */
  2092. uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
  2093. /**
  2094. * @}
  2095. */
  2096. #endif /* USE_FULL_LL_DRIVER */
  2097. /**
  2098. * @}
  2099. */
  2100. /**
  2101. * @}
  2102. */
  2103. #endif /* RCC */
  2104. /**
  2105. * @}
  2106. */
  2107. #ifdef __cplusplus
  2108. }
  2109. #endif
  2110. #endif /* __STM32F1xx_LL_RCC_H */
  2111. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/