stm32g4xx_ll_rcc.h 111 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008
  1. /**
  2. ******************************************************************************
  3. * @file stm32g4xx_ll_rcc.h
  4. * @author MCD Application Team
  5. * @brief Header file of RCC LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2019 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file in
  13. * the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. ******************************************************************************
  16. */
  17. /* Define to prevent recursive inclusion -------------------------------------*/
  18. #ifndef STM32G4xx_LL_RCC_H
  19. #define STM32G4xx_LL_RCC_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32g4xx.h"
  25. /** @addtogroup STM32G4xx_LL_Driver
  26. * @{
  27. */
  28. /** @defgroup RCC_LL RCC
  29. * @{
  30. */
  31. /* Private types -------------------------------------------------------------*/
  32. /* Private variables ---------------------------------------------------------*/
  33. /** @defgroup RCC_LL_Private_Variables RCC Private Variables
  34. * @{
  35. */
  36. /**
  37. * @}
  38. */
  39. /* Private constants ---------------------------------------------------------*/
  40. /** @defgroup RCC_LL_Private_Constants RCC Private Constants
  41. * @{
  42. */
  43. /* Defines used to perform offsets*/
  44. /* Offset used to access to RCC_CCIPR and RCC_CCIPR2 registers */
  45. #define RCC_OFFSET_CCIPR 0U
  46. #define RCC_OFFSET_CCIPR2 0x14U
  47. /**
  48. * @}
  49. */
  50. /* Private macros ------------------------------------------------------------*/
  51. #if defined(USE_FULL_LL_DRIVER)
  52. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  53. * @{
  54. */
  55. /**
  56. * @}
  57. */
  58. #endif /*USE_FULL_LL_DRIVER*/
  59. /* Exported types ------------------------------------------------------------*/
  60. #if defined(USE_FULL_LL_DRIVER)
  61. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  62. * @{
  63. */
  64. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  65. * @{
  66. */
  67. /**
  68. * @brief RCC Clocks Frequency Structure
  69. */
  70. typedef struct
  71. {
  72. uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
  73. uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
  74. uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
  75. uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */
  76. } LL_RCC_ClocksTypeDef;
  77. /**
  78. * @}
  79. */
  80. /**
  81. * @}
  82. */
  83. #endif /* USE_FULL_LL_DRIVER */
  84. /* Exported constants --------------------------------------------------------*/
  85. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  86. * @{
  87. */
  88. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  89. * @brief Defines used to adapt values of different oscillators
  90. * @note These values could be modified in the user environment according to
  91. * HW set-up.
  92. * @{
  93. */
  94. #if !defined (HSE_VALUE)
  95. #define HSE_VALUE 8000000U /*!< Value of the HSE oscillator in Hz */
  96. #endif /* HSE_VALUE */
  97. #if !defined (HSI_VALUE)
  98. #define HSI_VALUE 16000000U /*!< Value of the HSI oscillator in Hz */
  99. #endif /* HSI_VALUE */
  100. #if !defined (LSE_VALUE)
  101. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  102. #endif /* LSE_VALUE */
  103. #if !defined (LSI_VALUE)
  104. #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */
  105. #endif /* LSI_VALUE */
  106. #if !defined (HSI48_VALUE)
  107. #define HSI48_VALUE 48000000U /*!< Value of the HSI48 oscillator in Hz */
  108. #endif /* HSI48_VALUE */
  109. #if !defined (EXTERNAL_CLOCK_VALUE)
  110. #define EXTERNAL_CLOCK_VALUE 48000U /*!< Value of the I2S_CKIN, I2S and SAI1 external clock source in Hz */
  111. #endif /* EXTERNAL_CLOCK_VALUE */
  112. /**
  113. * @}
  114. */
  115. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  116. * @brief Flags defines which can be used with LL_RCC_WriteReg function
  117. * @{
  118. */
  119. #define LL_RCC_CICR_LSIRDYC RCC_CICR_LSIRDYC /*!< LSI Ready Interrupt Clear */
  120. #define LL_RCC_CICR_LSERDYC RCC_CICR_LSERDYC /*!< LSE Ready Interrupt Clear */
  121. #define LL_RCC_CICR_HSIRDYC RCC_CICR_HSIRDYC /*!< HSI Ready Interrupt Clear */
  122. #define LL_RCC_CICR_HSERDYC RCC_CICR_HSERDYC /*!< HSE Ready Interrupt Clear */
  123. #define LL_RCC_CICR_PLLRDYC RCC_CICR_PLLRDYC /*!< PLL Ready Interrupt Clear */
  124. #define LL_RCC_CICR_HSI48RDYC RCC_CICR_HSI48RDYC /*!< HSI48 Ready Interrupt Clear */
  125. #define LL_RCC_CICR_LSECSSC RCC_CICR_LSECSSC /*!< LSE Clock Security System Interrupt Clear */
  126. #define LL_RCC_CICR_CSSC RCC_CICR_CSSC /*!< Clock Security System Interrupt Clear */
  127. /**
  128. * @}
  129. */
  130. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  131. * @brief Flags defines which can be used with LL_RCC_ReadReg function
  132. * @{
  133. */
  134. #define LL_RCC_CIFR_LSIRDYF RCC_CIFR_LSIRDYF /*!< LSI Ready Interrupt flag */
  135. #define LL_RCC_CIFR_LSERDYF RCC_CIFR_LSERDYF /*!< LSE Ready Interrupt flag */
  136. #define LL_RCC_CIFR_HSIRDYF RCC_CIFR_HSIRDYF /*!< HSI Ready Interrupt flag */
  137. #define LL_RCC_CIFR_HSERDYF RCC_CIFR_HSERDYF /*!< HSE Ready Interrupt flag */
  138. #define LL_RCC_CIFR_PLLRDYF RCC_CIFR_PLLRDYF /*!< PLL Ready Interrupt flag */
  139. #define LL_RCC_CIFR_HSI48RDYF RCC_CIFR_HSI48RDYF /*!< HSI48 Ready Interrupt flag */
  140. #define LL_RCC_CIFR_LSECSSF RCC_CIFR_LSECSSF /*!< LSE Clock Security System Interrupt flag */
  141. #define LL_RCC_CIFR_CSSF RCC_CIFR_CSSF /*!< Clock Security System Interrupt flag */
  142. #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */
  143. #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */
  144. #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
  145. #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
  146. #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
  147. #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
  148. #define LL_RCC_CSR_BORRSTF RCC_CSR_BORRSTF /*!< BOR reset flag */
  149. /**
  150. * @}
  151. */
  152. /** @defgroup RCC_LL_EC_IT IT Defines
  153. * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
  154. * @{
  155. */
  156. #define LL_RCC_CIER_LSIRDYIE RCC_CIER_LSIRDYIE /*!< LSI Ready Interrupt Enable */
  157. #define LL_RCC_CIER_LSERDYIE RCC_CIER_LSERDYIE /*!< LSE Ready Interrupt Enable */
  158. #define LL_RCC_CIER_HSIRDYIE RCC_CIER_HSIRDYIE /*!< HSI Ready Interrupt Enable */
  159. #define LL_RCC_CIER_HSERDYIE RCC_CIER_HSERDYIE /*!< HSE Ready Interrupt Enable */
  160. #define LL_RCC_CIER_PLLRDYIE RCC_CIER_PLLRDYIE /*!< PLL Ready Interrupt Enable */
  161. #define LL_RCC_CIER_HSI48RDYIE RCC_CIER_HSI48RDYIE /*!< HSI48 Ready Interrupt Enable */
  162. #define LL_RCC_CIER_LSECSSIE RCC_CIER_LSECSSIE /*!< LSE CSS Interrupt Enable */
  163. /**
  164. * @}
  165. */
  166. /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
  167. * @{
  168. */
  169. #define LL_RCC_LSEDRIVE_LOW 0x00000000U /*!< Xtal mode lower driving capability */
  170. #define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium low driving capability */
  171. #define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium high driving capability */
  172. #define LL_RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */
  173. /**
  174. * @}
  175. */
  176. /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE LSCO Selection
  177. * @{
  178. */
  179. #define LL_RCC_LSCO_CLKSOURCE_LSI 0x00000000U /*!< LSI selection for low speed clock */
  180. #define LL_RCC_LSCO_CLKSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock */
  181. /**
  182. * @}
  183. */
  184. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  185. * @{
  186. */
  187. #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */
  188. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */
  189. #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */
  190. /**
  191. * @}
  192. */
  193. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  194. * @{
  195. */
  196. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
  197. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
  198. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */
  199. /**
  200. * @}
  201. */
  202. /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
  203. * @{
  204. */
  205. #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */
  206. #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */
  207. #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */
  208. #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */
  209. #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */
  210. #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */
  211. #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
  212. #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
  213. #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
  214. /**
  215. * @}
  216. */
  217. /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
  218. * @{
  219. */
  220. #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */
  221. #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */
  222. #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */
  223. #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */
  224. #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
  225. /**
  226. * @}
  227. */
  228. /** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2)
  229. * @{
  230. */
  231. #define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */
  232. #define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */
  233. #define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */
  234. #define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */
  235. #define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
  236. /**
  237. * @}
  238. */
  239. /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
  240. * @{
  241. */
  242. #define LL_RCC_MCO1SOURCE_NOCLOCK 0x00000000U /*!< MCO output disabled, no clock on MCO */
  243. #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_0 /*!< SYSCLK selection as MCO1 source */
  244. #define LL_RCC_MCO1SOURCE_HSI (RCC_CFGR_MCOSEL_0| RCC_CFGR_MCOSEL_1) /*!< HSI16 selection as MCO1 source */
  245. #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_2 /*!< HSE selection as MCO1 source */
  246. #define LL_RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_2) /*!< Main PLL selection as MCO1 source */
  247. #define LL_RCC_MCO1SOURCE_LSI (RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSI selection as MCO1 source */
  248. #define LL_RCC_MCO1SOURCE_LSE (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSE selection as MCO1 source */
  249. #define LL_RCC_MCO1SOURCE_HSI48 RCC_CFGR_MCOSEL_3 /*!< HSI48 selection as MCO1 source */
  250. /**
  251. * @}
  252. */
  253. /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
  254. * @{
  255. */
  256. #define LL_RCC_MCO1_DIV_1 RCC_CFGR_MCOPRE_DIV1 /*!< MCO not divided */
  257. #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO divided by 2 */
  258. #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO divided by 4 */
  259. #define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO divided by 8 */
  260. #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO divided by 16 */
  261. /**
  262. * @}
  263. */
  264. #if defined(USE_FULL_LL_DRIVER)
  265. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  266. * @{
  267. */
  268. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  269. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  270. /**
  271. * @}
  272. */
  273. #endif /* USE_FULL_LL_DRIVER */
  274. /** @defgroup RCC_LL_EC_USARTx_CLKSOURCE Peripheral USART clock source selection
  275. * @{
  276. */
  277. #define LL_RCC_USART1_CLKSOURCE_PCLK2 (RCC_CCIPR_USART1SEL << 16U) /*!< PCLK2 clock used as USART1 clock source */
  278. #define LL_RCC_USART1_CLKSOURCE_SYSCLK ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL_0) /*!< SYSCLK clock used as USART1 clock source */
  279. #define LL_RCC_USART1_CLKSOURCE_HSI ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL_1) /*!< HSI clock used as USART1 clock source */
  280. #define LL_RCC_USART1_CLKSOURCE_LSE ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL) /*!< LSE clock used as USART1 clock source */
  281. #define LL_RCC_USART2_CLKSOURCE_PCLK1 (RCC_CCIPR_USART2SEL << 16U) /*!< PCLK1 clock used as USART2 clock source */
  282. #define LL_RCC_USART2_CLKSOURCE_SYSCLK ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL_0) /*!< SYSCLK clock used as USART2 clock source */
  283. #define LL_RCC_USART2_CLKSOURCE_HSI ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL_1) /*!< HSI clock used as USART2 clock source */
  284. #define LL_RCC_USART2_CLKSOURCE_LSE ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL) /*!< LSE clock used as USART2 clock source */
  285. #if defined(RCC_CCIPR_USART3SEL)
  286. #define LL_RCC_USART3_CLKSOURCE_PCLK1 (RCC_CCIPR_USART3SEL << 16U) /*!< PCLK1 clock used as USART3 clock source */
  287. #define LL_RCC_USART3_CLKSOURCE_SYSCLK ((RCC_CCIPR_USART3SEL << 16U) | RCC_CCIPR_USART3SEL_0) /*!< SYSCLK clock used as USART3 clock source */
  288. #define LL_RCC_USART3_CLKSOURCE_HSI ((RCC_CCIPR_USART3SEL << 16U) | RCC_CCIPR_USART3SEL_1) /*!< HSI clock used as USART3 clock source */
  289. #define LL_RCC_USART3_CLKSOURCE_LSE ((RCC_CCIPR_USART3SEL << 16U) | RCC_CCIPR_USART3SEL) /*!< LSE clock used as USART3 clock source */
  290. #endif /* RCC_CCIPR_USART3SEL */
  291. /**
  292. * @}
  293. */
  294. /** @defgroup RCC_LL_EC_UARTx_CLKSOURCE Peripheral UART clock source selection
  295. * @{
  296. */
  297. #if defined(RCC_CCIPR_UART4SEL)
  298. #define LL_RCC_UART4_CLKSOURCE_PCLK1 (RCC_CCIPR_UART4SEL << 16U) /*!< PCLK1 clock used as UART4 clock source */
  299. #define LL_RCC_UART4_CLKSOURCE_SYSCLK ((RCC_CCIPR_UART4SEL << 16U) | RCC_CCIPR_UART4SEL_0) /*!< SYSCLK clock used as UART4 clock source */
  300. #define LL_RCC_UART4_CLKSOURCE_HSI ((RCC_CCIPR_UART4SEL << 16U) | RCC_CCIPR_UART4SEL_1) /*!< HSI clock used as UART4 clock source */
  301. #define LL_RCC_UART4_CLKSOURCE_LSE ((RCC_CCIPR_UART4SEL << 16U) | RCC_CCIPR_UART4SEL) /*!< LSE clock used as UART4 clock source */
  302. #endif /* RCC_CCIPR_UART4SEL */
  303. #if defined(RCC_CCIPR_UART5SEL)
  304. #define LL_RCC_UART5_CLKSOURCE_PCLK1 (RCC_CCIPR_UART5SEL << 16U) /*!< PCLK1 clock used as UART5 clock source */
  305. #define LL_RCC_UART5_CLKSOURCE_SYSCLK ((RCC_CCIPR_UART5SEL << 16U) | RCC_CCIPR_UART5SEL_0) /*!< SYSCLK clock used as UART5 clock source */
  306. #define LL_RCC_UART5_CLKSOURCE_HSI ((RCC_CCIPR_UART5SEL << 16U) | RCC_CCIPR_UART5SEL_1) /*!< HSI clock used as UART5 clock source */
  307. #define LL_RCC_UART5_CLKSOURCE_LSE ((RCC_CCIPR_UART5SEL << 16U) | RCC_CCIPR_UART5SEL) /*!< LSE clock used as UART5 clock source */
  308. #endif /* RCC_CCIPR_UART5SEL */
  309. /**
  310. * @}
  311. */
  312. /** @defgroup RCC_LL_EC_LPUART1_CLKSOURCE Peripheral LPUART clock source selection
  313. * @{
  314. */
  315. #define LL_RCC_LPUART1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as LPUART1 clock source */
  316. #define LL_RCC_LPUART1_CLKSOURCE_SYSCLK RCC_CCIPR_LPUART1SEL_0 /*!< SYSCLK clock used as LPUART1 clock source */
  317. #define LL_RCC_LPUART1_CLKSOURCE_HSI RCC_CCIPR_LPUART1SEL_1 /*!< HSI clock used as LPUART1 clock source */
  318. #define LL_RCC_LPUART1_CLKSOURCE_LSE RCC_CCIPR_LPUART1SEL /*!< LSE clock used as LPUART1 clock source */
  319. /**
  320. * @}
  321. */
  322. /** @defgroup RCC_LL_EC_I2Cx_CLKSOURCE Peripheral I2C clock source selection
  323. * @{
  324. */
  325. #define LL_RCC_I2C1_CLKSOURCE_PCLK1 (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C1SEL_Pos << 16U)) /*!< PCLK1 clock used as I2C1 clock source */
  326. #define LL_RCC_I2C1_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C1SEL_Pos << 16U) | (RCC_CCIPR_I2C1SEL_0 >> RCC_CCIPR_I2C1SEL_Pos)) /*!< SYSCLK clock used as I2C1 clock source */
  327. #define LL_RCC_I2C1_CLKSOURCE_HSI (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C1SEL_Pos << 16U) | (RCC_CCIPR_I2C1SEL_1 >> RCC_CCIPR_I2C1SEL_Pos)) /*!< HSI clock used as I2C1 clock source */
  328. #define LL_RCC_I2C2_CLKSOURCE_PCLK1 (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C2SEL_Pos << 16U)) /*!< PCLK1 clock used as I2C2 clock source */
  329. #define LL_RCC_I2C2_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C2SEL_Pos << 16U) | (RCC_CCIPR_I2C2SEL_0 >> RCC_CCIPR_I2C2SEL_Pos)) /*!< SYSCLK clock used as I2C2 clock source */
  330. #define LL_RCC_I2C2_CLKSOURCE_HSI (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C2SEL_Pos << 16U) | (RCC_CCIPR_I2C2SEL_1 >> RCC_CCIPR_I2C2SEL_Pos)) /*!< HSI clock used as I2C2 clock source */
  331. #define LL_RCC_I2C3_CLKSOURCE_PCLK1 (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C3SEL_Pos << 16U)) /*!< PCLK1 clock used as I2C3 clock source */
  332. #define LL_RCC_I2C3_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C3SEL_Pos << 16U) | (RCC_CCIPR_I2C3SEL_0 >> RCC_CCIPR_I2C3SEL_Pos)) /*!< SYSCLK clock used as I2C3 clock source */
  333. #define LL_RCC_I2C3_CLKSOURCE_HSI (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C3SEL_Pos << 16U) | (RCC_CCIPR_I2C3SEL_1 >> RCC_CCIPR_I2C3SEL_Pos)) /*!< HSI clock used as I2C3 clock source */
  334. #if defined(RCC_CCIPR2_I2C4SEL)
  335. #define LL_RCC_I2C4_CLKSOURCE_PCLK1 (((uint32_t)RCC_OFFSET_CCIPR2 << 24U) | ((uint32_t)RCC_CCIPR2_I2C4SEL_Pos << 16U)) /*!< PCLK1 clock used as I2C4 clock source */
  336. #define LL_RCC_I2C4_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR2 << 24U) | ((uint32_t)RCC_CCIPR2_I2C4SEL_Pos << 16U) | (RCC_CCIPR2_I2C4SEL_0 >> RCC_CCIPR2_I2C4SEL_Pos)) /*!< SYSCLK clock used as I2C4 clock source */
  337. #define LL_RCC_I2C4_CLKSOURCE_HSI (((uint32_t)RCC_OFFSET_CCIPR2 << 24U) | ((uint32_t)RCC_CCIPR2_I2C4SEL_Pos << 16U) | (RCC_CCIPR2_I2C4SEL_1 >> RCC_CCIPR2_I2C4SEL_Pos)) /*!< HSI clock used as I2C4 clock source */
  338. #endif /* RCC_CCIPR2_I2C4SEL */
  339. /**
  340. * @}
  341. */
  342. /** @defgroup RCC_LL_EC_LPTIM1_CLKSOURCE Peripheral LPTIM clock source selection
  343. * @{
  344. */
  345. #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as LPTIM1 clock source */
  346. #define LL_RCC_LPTIM1_CLKSOURCE_LSI RCC_CCIPR_LPTIM1SEL_0 /*!< LSI clock used as LPTIM1 clock source */
  347. #define LL_RCC_LPTIM1_CLKSOURCE_HSI RCC_CCIPR_LPTIM1SEL_1 /*!< HSI clock used as LPTIM1 clock source */
  348. #define LL_RCC_LPTIM1_CLKSOURCE_LSE RCC_CCIPR_LPTIM1SEL /*!< LSE clock used as LPTIM1 clock source */
  349. /**
  350. * @}
  351. */
  352. /** @defgroup RCC_LL_EC_SAI1_CLKSOURCE Peripheral SAI clock source selection
  353. * @{
  354. */
  355. #define LL_RCC_SAI1_CLKSOURCE_SYSCLK 0x00000000U /*!< System clock used as SAI1 clock source */
  356. #define LL_RCC_SAI1_CLKSOURCE_PLL RCC_CCIPR_SAI1SEL_0 /*!< PLL clock used as SAI1 clock source */
  357. #define LL_RCC_SAI1_CLKSOURCE_PIN RCC_CCIPR_SAI1SEL_1 /*!< EXT clock used as SAI1 clock source */
  358. #define LL_RCC_SAI1_CLKSOURCE_HSI (RCC_CCIPR_SAI1SEL_0 | RCC_CCIPR_SAI1SEL_1) /*!< HSI clock used as SAI1 clock source */
  359. /**
  360. * @}
  361. */
  362. /** @defgroup RCC_LL_EC_I2S_CLKSOURCE Peripheral I2S clock source selection
  363. * @{
  364. */
  365. #define LL_RCC_I2S_CLKSOURCE_SYSCLK 0x00000000U /*!< System clock used as I2S clock source */
  366. #define LL_RCC_I2S_CLKSOURCE_PLL RCC_CCIPR_I2S23SEL_0 /*!< PLL clock used as I2S clock source */
  367. #define LL_RCC_I2S_CLKSOURCE_PIN RCC_CCIPR_I2S23SEL_1 /*!< EXT clock used as I2S clock source */
  368. #define LL_RCC_I2S_CLKSOURCE_HSI (RCC_CCIPR_I2S23SEL_0 | RCC_CCIPR_I2S23SEL_1) /*!< HSI clock used as I2S clock source */
  369. /**
  370. * @}
  371. */
  372. #if defined(FDCAN1)
  373. /** @defgroup RCC_LL_EC_FDCAN_CLKSOURCE Peripheral FDCAN clock source selection
  374. * @{
  375. */
  376. #define LL_RCC_FDCAN_CLKSOURCE_HSE 0x00000000U /*!< HSE clock used as FDCAN clock source */
  377. #define LL_RCC_FDCAN_CLKSOURCE_PLL RCC_CCIPR_FDCANSEL_0 /*!< PLL clock used as FDCAN clock source */
  378. #define LL_RCC_FDCAN_CLKSOURCE_PCLK1 RCC_CCIPR_FDCANSEL_1 /*!< PCLK1 clock used as FDCAN clock source */
  379. /**
  380. * @}
  381. */
  382. #endif /* FDCAN1 */
  383. /** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection
  384. * @{
  385. */
  386. #define LL_RCC_RNG_CLKSOURCE_HSI48 0x00000000U /*!< HSI48 clock used as RNG clock source */
  387. #define LL_RCC_RNG_CLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 /*!< PLL clock used as RNG clock source */
  388. /**
  389. * @}
  390. */
  391. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  392. * @{
  393. */
  394. #define LL_RCC_USB_CLKSOURCE_HSI48 0x00000000U /*!< HSI48 clock used as USB clock source */
  395. #define LL_RCC_USB_CLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 /*!< PLL clock used as USB clock source */
  396. /**
  397. * @}
  398. */
  399. /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC clock source selection
  400. * @{
  401. */
  402. #define LL_RCC_ADC12_CLKSOURCE_NONE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC12SEL_Pos << 16U)) /*!< No clock used as ADC12 clock source */
  403. #define LL_RCC_ADC12_CLKSOURCE_PLL (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC12SEL_Pos << 16U) | (RCC_CCIPR_ADC12SEL_0 >> RCC_CCIPR_ADC12SEL_Pos)) /*!< PLL clock used as ADC12 clock source */
  404. #define LL_RCC_ADC12_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC12SEL_Pos << 16U) | (RCC_CCIPR_ADC12SEL_1 >> RCC_CCIPR_ADC12SEL_Pos)) /*!< SYSCLK clock used as ADC12 clock source */
  405. #if defined(RCC_CCIPR_ADC345SEL)
  406. #define LL_RCC_ADC345_CLKSOURCE_NONE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC345SEL_Pos << 16U)) /*!< No clock used as ADC345 clock source */
  407. #define LL_RCC_ADC345_CLKSOURCE_PLL (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC345SEL_Pos << 16U) | (RCC_CCIPR_ADC345SEL_0 >> RCC_CCIPR_ADC345SEL_Pos)) /*!< PLL clock used as ADC345 clock source */
  408. #define LL_RCC_ADC345_CLKSOURCE_SYSCLK (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC345SEL_Pos << 16U) | (RCC_CCIPR_ADC345SEL_1 >> RCC_CCIPR_ADC345SEL_Pos)) /*!< SYSCLK clock used as ADC345 clock source */
  409. #endif /* RCC_CCIPR_ADC345SEL */
  410. /**
  411. * @}
  412. */
  413. /** @defgroup RCC_LL_EC_QUADSPI Peripheral QUADSPI get clock source
  414. * @{
  415. */
  416. #define LL_RCC_QUADSPI_CLKSOURCE_SYSCLK 0x00000000U /*!< SYSCLK used as QuadSPI clock source */
  417. #define LL_RCC_QUADSPI_CLKSOURCE_HSI RCC_CCIPR2_QSPISEL_0 /*!< HSI used as QuadSPI clock source */
  418. #define LL_RCC_QUADSPI_CLKSOURCE_PLL RCC_CCIPR2_QSPISEL_1 /*!< PLL used as QuadSPI clock source */
  419. /**
  420. * @}
  421. */
  422. /** @defgroup RCC_LL_EC_USARTx Peripheral USART get clock source
  423. * @{
  424. */
  425. #define LL_RCC_USART1_CLKSOURCE RCC_CCIPR_USART1SEL /*!< USART1 Clock source selection */
  426. #define LL_RCC_USART2_CLKSOURCE RCC_CCIPR_USART2SEL /*!< USART2 Clock source selection */
  427. #if defined(RCC_CCIPR_USART3SEL)
  428. #define LL_RCC_USART3_CLKSOURCE RCC_CCIPR_USART3SEL /*!< USART3 Clock source selection */
  429. #endif /* RCC_CCIPR_USART3SEL */
  430. /**
  431. * @}
  432. */
  433. /** @defgroup RCC_LL_EC_UARTx Peripheral UART get clock source
  434. * @{
  435. */
  436. #if defined(RCC_CCIPR_UART4SEL)
  437. #define LL_RCC_UART4_CLKSOURCE RCC_CCIPR_UART4SEL /*!< UART4 Clock source selection */
  438. #endif /* RCC_CCIPR_UART4SEL */
  439. #if defined(RCC_CCIPR_UART5SEL)
  440. #define LL_RCC_UART5_CLKSOURCE RCC_CCIPR_UART5SEL /*!< UART5 Clock source selection */
  441. #endif /* RCC_CCIPR_UART5SEL */
  442. /**
  443. * @}
  444. */
  445. /** @defgroup RCC_LL_EC_LPUART1 Peripheral LPUART get clock source
  446. * @{
  447. */
  448. #define LL_RCC_LPUART1_CLKSOURCE RCC_CCIPR_LPUART1SEL /*!< LPUART1 Clock source selection */
  449. /**
  450. * @}
  451. */
  452. /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source
  453. * @{
  454. */
  455. #define LL_RCC_I2C1_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C1SEL_Pos << 16U) | (RCC_CCIPR_I2C1SEL >> RCC_CCIPR_I2C1SEL_Pos)) /*!< I2C1 Clock source selection */
  456. #define LL_RCC_I2C2_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C2SEL_Pos << 16U) | (RCC_CCIPR_I2C2SEL >> RCC_CCIPR_I2C2SEL_Pos)) /*!< I2C2 Clock source selection */
  457. #if defined(RCC_CCIPR_I2C3SEL)
  458. #define LL_RCC_I2C3_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_I2C3SEL_Pos << 16U) | (RCC_CCIPR_I2C3SEL >> RCC_CCIPR_I2C3SEL_Pos)) /*!< I2C3 Clock source selection */
  459. #endif /* RCC_CCIPR_I2C3SEL */
  460. #if defined(RCC_CCIPR2_I2C4SEL)
  461. #define LL_RCC_I2C4_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR2 << 24U) | ((uint32_t)RCC_CCIPR2_I2C4SEL_Pos << 16U) | (RCC_CCIPR2_I2C4SEL >> RCC_CCIPR2_I2C4SEL_Pos)) /*!< I2C4 Clock source selection */
  462. #endif /* RCC_CCIPR2_I2C4SEL */
  463. /**
  464. * @}
  465. */
  466. /** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source
  467. * @{
  468. */
  469. #define LL_RCC_LPTIM1_CLKSOURCE RCC_CCIPR_LPTIM1SEL /*!< LPTIM1 Clock source selection */
  470. /**
  471. * @}
  472. */
  473. /** @defgroup RCC_LL_EC_SAI1 Peripheral SAI get clock source
  474. * @{
  475. */
  476. #define LL_RCC_SAI1_CLKSOURCE RCC_CCIPR_SAI1SEL /*!< SAI1 Clock source selection */
  477. /**
  478. * @}
  479. */
  480. /** @defgroup RCC_LL_EC_I2S Peripheral I2S get clock source
  481. * @{
  482. */
  483. #define LL_RCC_I2S_CLKSOURCE RCC_CCIPR_I2S23SEL /*!< I2S Clock source selection */
  484. /**
  485. * @}
  486. */
  487. #if defined(FDCAN1)
  488. /** @defgroup RCC_LL_EC_FDCAN Peripheral FDCAN get clock source
  489. * @{
  490. */
  491. #define LL_RCC_FDCAN_CLKSOURCE RCC_CCIPR_FDCANSEL /*!< FDCAN Clock source selection */
  492. #endif /* FDCAN1 */
  493. /**
  494. * @}
  495. */
  496. /** @defgroup RCC_LL_EC_RNG Peripheral RNG get clock source
  497. * @{
  498. */
  499. #define LL_RCC_RNG_CLKSOURCE RCC_CCIPR_CLK48SEL /*!< RNG Clock source selection */
  500. /**
  501. * @}
  502. */
  503. /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
  504. * @{
  505. */
  506. #define LL_RCC_USB_CLKSOURCE RCC_CCIPR_CLK48SEL /*!< USB Clock source selection */
  507. /**
  508. * @}
  509. */
  510. /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source
  511. * @{
  512. */
  513. #define LL_RCC_ADC12_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC12SEL_Pos << 16U) | (RCC_CCIPR_ADC12SEL >> RCC_CCIPR_ADC12SEL_Pos)) /*!< ADC12 Clock source selection */
  514. #if defined(RCC_CCIPR_ADC345SEL_Pos)
  515. #define LL_RCC_ADC345_CLKSOURCE (((uint32_t)RCC_OFFSET_CCIPR << 24U) | ((uint32_t)RCC_CCIPR_ADC345SEL_Pos << 16U) | (RCC_CCIPR_ADC345SEL >> RCC_CCIPR_ADC345SEL_Pos)) /*!< ADC345 Clock source selection */
  516. #endif /* RCC_CCIPR_ADC345SEL_Pos */
  517. /**
  518. * @}
  519. */
  520. /** @defgroup RCC_LL_EC_QUADSPI Peripheral QUADSPI get clock source
  521. * @{
  522. */
  523. #define LL_RCC_QUADSPI_CLKSOURCE RCC_CCIPR2_QSPISEL /*!< QuadSPI Clock source selection */
  524. /**
  525. * @}
  526. */
  527. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
  528. * @{
  529. */
  530. #define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */
  531. #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */
  532. #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */
  533. #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */
  534. /**
  535. * @}
  536. */
  537. /** @defgroup RCC_LL_EC_PLLSOURCE PLL entry clock source
  538. * @{
  539. */
  540. #define LL_RCC_PLLSOURCE_NONE 0x00000000U /*!< No clock */
  541. #define LL_RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI /*!< HSI16 clock selected as PLL entry clock source */
  542. #define LL_RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */
  543. /**
  544. * @}
  545. */
  546. /** @defgroup RCC_LL_EC_PLLM_DIV PLL division factor
  547. * @{
  548. */
  549. #define LL_RCC_PLLM_DIV_1 0x00000000U /*!< PLL division factor by 1 */
  550. #define LL_RCC_PLLM_DIV_2 RCC_PLLCFGR_PLLM_0 /*!< PLL division factor by 2 */
  551. #define LL_RCC_PLLM_DIV_3 RCC_PLLCFGR_PLLM_1 /*!< PLL division factor by 3 */
  552. #define LL_RCC_PLLM_DIV_4 (RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 4 */
  553. #define LL_RCC_PLLM_DIV_5 RCC_PLLCFGR_PLLM_2 /*!< PLL division factor by 5 */
  554. #define LL_RCC_PLLM_DIV_6 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 6 */
  555. #define LL_RCC_PLLM_DIV_7 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL division factor by 7 */
  556. #define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 8 */
  557. #define LL_RCC_PLLM_DIV_9 RCC_PLLCFGR_PLLM_3 /*!< PLL division factor by 9 */
  558. #define LL_RCC_PLLM_DIV_10 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 10 */
  559. #define LL_RCC_PLLM_DIV_11 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL division factor by 11 */
  560. #define LL_RCC_PLLM_DIV_12 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 12 */
  561. #define LL_RCC_PLLM_DIV_13 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL division factor by 13 */
  562. #define LL_RCC_PLLM_DIV_14 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 14 */
  563. #define LL_RCC_PLLM_DIV_15 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL division factor by 15 */
  564. #define LL_RCC_PLLM_DIV_16 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL division factor by 16 */
  565. /**
  566. * @}
  567. */
  568. /** @defgroup RCC_LL_EC_PLLR_DIV PLL division factor (PLLR)
  569. * @{
  570. */
  571. #define LL_RCC_PLLR_DIV_2 0x00000000U /*!< Main PLL division factor for PLLCLK (system clock) by 2 */
  572. #define LL_RCC_PLLR_DIV_4 (RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 4 */
  573. #define LL_RCC_PLLR_DIV_6 (RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 6 */
  574. #define LL_RCC_PLLR_DIV_8 (RCC_PLLCFGR_PLLR) /*!< Main PLL division factor for PLLCLK (system clock) by 8 */
  575. /**
  576. * @}
  577. */
  578. /** @defgroup RCC_LL_EC_PLLP_DIV PLL division factor (PLLP)
  579. * @{
  580. */
  581. #define LL_RCC_PLLP_DIV_2 (RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 2 */
  582. #define LL_RCC_PLLP_DIV_3 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 3 */
  583. #define LL_RCC_PLLP_DIV_4 (RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 4 */
  584. #define LL_RCC_PLLP_DIV_5 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 5 */
  585. #define LL_RCC_PLLP_DIV_6 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 6 */
  586. #define LL_RCC_PLLP_DIV_7 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 7 */
  587. #define LL_RCC_PLLP_DIV_8 (RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 8 */
  588. #define LL_RCC_PLLP_DIV_9 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 9 */
  589. #define LL_RCC_PLLP_DIV_10 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 10 */
  590. #define LL_RCC_PLLP_DIV_11 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 11 */
  591. #define LL_RCC_PLLP_DIV_12 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 12 */
  592. #define LL_RCC_PLLP_DIV_13 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 13 */
  593. #define LL_RCC_PLLP_DIV_14 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 14 */
  594. #define LL_RCC_PLLP_DIV_15 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 15 */
  595. #define LL_RCC_PLLP_DIV_16 (RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 16 */
  596. #define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 17 */
  597. #define LL_RCC_PLLP_DIV_18 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 18 */
  598. #define LL_RCC_PLLP_DIV_19 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 19 */
  599. #define LL_RCC_PLLP_DIV_20 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 20 */
  600. #define LL_RCC_PLLP_DIV_21 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 21 */
  601. #define LL_RCC_PLLP_DIV_22 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 22 */
  602. #define LL_RCC_PLLP_DIV_23 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 23 */
  603. #define LL_RCC_PLLP_DIV_24 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 24 */
  604. #define LL_RCC_PLLP_DIV_25 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 25 */
  605. #define LL_RCC_PLLP_DIV_26 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 26 */
  606. #define LL_RCC_PLLP_DIV_27 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 27 */
  607. #define LL_RCC_PLLP_DIV_28 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 28 */
  608. #define LL_RCC_PLLP_DIV_29 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 29 */
  609. #define LL_RCC_PLLP_DIV_30 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 30 */
  610. #define LL_RCC_PLLP_DIV_31 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 31 */
  611. /**
  612. * @}
  613. */
  614. /** @defgroup RCC_LL_EC_PLLQ_DIV PLL division factor (PLLQ)
  615. * @{
  616. */
  617. #define LL_RCC_PLLQ_DIV_2 0x00000000U /*!< Main PLL division factor for PLLQ output by 2 */
  618. #define LL_RCC_PLLQ_DIV_4 (RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 4 */
  619. #define LL_RCC_PLLQ_DIV_6 (RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 6 */
  620. #define LL_RCC_PLLQ_DIV_8 (RCC_PLLCFGR_PLLQ) /*!< Main PLL division factor for PLLQ output by 8 */
  621. /**
  622. * @}
  623. */
  624. /**
  625. * @}
  626. */
  627. /* Exported macro ------------------------------------------------------------*/
  628. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  629. * @{
  630. */
  631. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  632. * @{
  633. */
  634. /**
  635. * @brief Write a value in RCC register
  636. * @param __REG__ Register to be written
  637. * @param __VALUE__ Value to be written in the register
  638. * @retval None
  639. */
  640. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, __VALUE__)
  641. /**
  642. * @brief Read a value in RCC register
  643. * @param __REG__ Register to be read
  644. * @retval Register value
  645. */
  646. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  647. /**
  648. * @}
  649. */
  650. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  651. * @{
  652. */
  653. /**
  654. * @brief Helper macro to calculate the PLLCLK frequency on system domain
  655. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (),
  656. * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ());
  657. * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI)
  658. * @param __PLLM__ This parameter can be one of the following values:
  659. * @arg @ref LL_RCC_PLLM_DIV_1
  660. * @arg @ref LL_RCC_PLLM_DIV_2
  661. * @arg @ref LL_RCC_PLLM_DIV_3
  662. * @arg @ref LL_RCC_PLLM_DIV_4
  663. * @arg @ref LL_RCC_PLLM_DIV_5
  664. * @arg @ref LL_RCC_PLLM_DIV_6
  665. * @arg @ref LL_RCC_PLLM_DIV_7
  666. * @arg @ref LL_RCC_PLLM_DIV_8
  667. * @arg @ref LL_RCC_PLLM_DIV_9
  668. * @arg @ref LL_RCC_PLLM_DIV_10
  669. * @arg @ref LL_RCC_PLLM_DIV_11
  670. * @arg @ref LL_RCC_PLLM_DIV_12
  671. * @arg @ref LL_RCC_PLLM_DIV_13
  672. * @arg @ref LL_RCC_PLLM_DIV_14
  673. * @arg @ref LL_RCC_PLLM_DIV_15
  674. * @arg @ref LL_RCC_PLLM_DIV_16
  675. * @param __PLLN__ Between Min_Data = 8 and Max_Data = 127
  676. * @param __PLLR__ This parameter can be one of the following values:
  677. * @arg @ref LL_RCC_PLLR_DIV_2
  678. * @arg @ref LL_RCC_PLLR_DIV_4
  679. * @arg @ref LL_RCC_PLLR_DIV_6
  680. * @arg @ref LL_RCC_PLLR_DIV_8
  681. * @retval PLL clock frequency (in Hz)
  682. */
  683. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) * (__PLLN__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) / \
  684. ((((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos) + 1U) * 2U))
  685. /**
  686. * @brief Helper macro to calculate the PLLCLK frequency used on ADC domain
  687. * @note ex: @ref __LL_RCC_CALC_PLLCLK_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (),
  688. * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ());
  689. * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI)
  690. * @param __PLLM__ This parameter can be one of the following values:
  691. * @arg @ref LL_RCC_PLLM_DIV_1
  692. * @arg @ref LL_RCC_PLLM_DIV_2
  693. * @arg @ref LL_RCC_PLLM_DIV_3
  694. * @arg @ref LL_RCC_PLLM_DIV_4
  695. * @arg @ref LL_RCC_PLLM_DIV_5
  696. * @arg @ref LL_RCC_PLLM_DIV_6
  697. * @arg @ref LL_RCC_PLLM_DIV_7
  698. * @arg @ref LL_RCC_PLLM_DIV_8
  699. * @arg @ref LL_RCC_PLLM_DIV_9
  700. * @arg @ref LL_RCC_PLLM_DIV_10
  701. * @arg @ref LL_RCC_PLLM_DIV_11
  702. * @arg @ref LL_RCC_PLLM_DIV_12
  703. * @arg @ref LL_RCC_PLLM_DIV_13
  704. * @arg @ref LL_RCC_PLLM_DIV_14
  705. * @arg @ref LL_RCC_PLLM_DIV_15
  706. * @arg @ref LL_RCC_PLLM_DIV_16
  707. * @param __PLLN__ Between Min_Data = 8 and Max_Data = 127
  708. * @param __PLLP__ This parameter can be one of the following values:
  709. * @arg @ref LL_RCC_PLLP_DIV_2
  710. * @arg @ref LL_RCC_PLLP_DIV_3
  711. * @arg @ref LL_RCC_PLLP_DIV_4
  712. * @arg @ref LL_RCC_PLLP_DIV_5
  713. * @arg @ref LL_RCC_PLLP_DIV_6
  714. * @arg @ref LL_RCC_PLLP_DIV_7
  715. * @arg @ref LL_RCC_PLLP_DIV_8
  716. * @arg @ref LL_RCC_PLLP_DIV_9
  717. * @arg @ref LL_RCC_PLLP_DIV_10
  718. * @arg @ref LL_RCC_PLLP_DIV_11
  719. * @arg @ref LL_RCC_PLLP_DIV_12
  720. * @arg @ref LL_RCC_PLLP_DIV_13
  721. * @arg @ref LL_RCC_PLLP_DIV_14
  722. * @arg @ref LL_RCC_PLLP_DIV_15
  723. * @arg @ref LL_RCC_PLLP_DIV_16
  724. * @arg @ref LL_RCC_PLLP_DIV_17
  725. * @arg @ref LL_RCC_PLLP_DIV_18
  726. * @arg @ref LL_RCC_PLLP_DIV_19
  727. * @arg @ref LL_RCC_PLLP_DIV_20
  728. * @arg @ref LL_RCC_PLLP_DIV_21
  729. * @arg @ref LL_RCC_PLLP_DIV_22
  730. * @arg @ref LL_RCC_PLLP_DIV_23
  731. * @arg @ref LL_RCC_PLLP_DIV_24
  732. * @arg @ref LL_RCC_PLLP_DIV_25
  733. * @arg @ref LL_RCC_PLLP_DIV_26
  734. * @arg @ref LL_RCC_PLLP_DIV_27
  735. * @arg @ref LL_RCC_PLLP_DIV_28
  736. * @arg @ref LL_RCC_PLLP_DIV_29
  737. * @arg @ref LL_RCC_PLLP_DIV_30
  738. * @arg @ref LL_RCC_PLLP_DIV_31
  739. * @retval PLL clock frequency (in Hz)
  740. */
  741. #define __LL_RCC_CALC_PLLCLK_ADC_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) * (__PLLN__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) / \
  742. ((__PLLP__) >> RCC_PLLCFGR_PLLPDIV_Pos))
  743. /**
  744. * @brief Helper macro to calculate the PLLCLK frequency used on 48M domain
  745. * @note ex: @ref __LL_RCC_CALC_PLLCLK_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (),
  746. * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetQ ());
  747. * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI)
  748. * @param __PLLM__ This parameter can be one of the following values:
  749. * @arg @ref LL_RCC_PLLM_DIV_1
  750. * @arg @ref LL_RCC_PLLM_DIV_2
  751. * @arg @ref LL_RCC_PLLM_DIV_3
  752. * @arg @ref LL_RCC_PLLM_DIV_4
  753. * @arg @ref LL_RCC_PLLM_DIV_5
  754. * @arg @ref LL_RCC_PLLM_DIV_6
  755. * @arg @ref LL_RCC_PLLM_DIV_7
  756. * @arg @ref LL_RCC_PLLM_DIV_8
  757. * @arg @ref LL_RCC_PLLM_DIV_9
  758. * @arg @ref LL_RCC_PLLM_DIV_10
  759. * @arg @ref LL_RCC_PLLM_DIV_11
  760. * @arg @ref LL_RCC_PLLM_DIV_12
  761. * @arg @ref LL_RCC_PLLM_DIV_13
  762. * @arg @ref LL_RCC_PLLM_DIV_14
  763. * @arg @ref LL_RCC_PLLM_DIV_15
  764. * @arg @ref LL_RCC_PLLM_DIV_16
  765. * @param __PLLN__ Between Min_Data = 8 and Max_Data = 127
  766. * @param __PLLQ__ This parameter can be one of the following values:
  767. * @arg @ref LL_RCC_PLLQ_DIV_2
  768. * @arg @ref LL_RCC_PLLQ_DIV_4
  769. * @arg @ref LL_RCC_PLLQ_DIV_6
  770. * @arg @ref LL_RCC_PLLQ_DIV_8
  771. * @retval PLL clock frequency (in Hz)
  772. */
  773. #define __LL_RCC_CALC_PLLCLK_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((__INPUTFREQ__) * (__PLLN__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) / \
  774. ((((__PLLQ__) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U))
  775. /**
  776. * @brief Helper macro to calculate the HCLK frequency
  777. * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
  778. * @param __AHBPRESCALER__ This parameter can be one of the following values:
  779. * @arg @ref LL_RCC_SYSCLK_DIV_1
  780. * @arg @ref LL_RCC_SYSCLK_DIV_2
  781. * @arg @ref LL_RCC_SYSCLK_DIV_4
  782. * @arg @ref LL_RCC_SYSCLK_DIV_8
  783. * @arg @ref LL_RCC_SYSCLK_DIV_16
  784. * @arg @ref LL_RCC_SYSCLK_DIV_64
  785. * @arg @ref LL_RCC_SYSCLK_DIV_128
  786. * @arg @ref LL_RCC_SYSCLK_DIV_256
  787. * @arg @ref LL_RCC_SYSCLK_DIV_512
  788. * @retval HCLK clock frequency (in Hz)
  789. */
  790. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__,__AHBPRESCALER__) ((__SYSCLKFREQ__) >> (AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos] & 0x1FU))
  791. /**
  792. * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
  793. * @param __HCLKFREQ__ HCLK frequency
  794. * @param __APB1PRESCALER__ This parameter can be one of the following values:
  795. * @arg @ref LL_RCC_APB1_DIV_1
  796. * @arg @ref LL_RCC_APB1_DIV_2
  797. * @arg @ref LL_RCC_APB1_DIV_4
  798. * @arg @ref LL_RCC_APB1_DIV_8
  799. * @arg @ref LL_RCC_APB1_DIV_16
  800. * @retval PCLK1 clock frequency (in Hz)
  801. */
  802. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> (APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos] & 0x1FU))
  803. /**
  804. * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
  805. * @param __HCLKFREQ__ HCLK frequency
  806. * @param __APB2PRESCALER__ This parameter can be one of the following values:
  807. * @arg @ref LL_RCC_APB2_DIV_1
  808. * @arg @ref LL_RCC_APB2_DIV_2
  809. * @arg @ref LL_RCC_APB2_DIV_4
  810. * @arg @ref LL_RCC_APB2_DIV_8
  811. * @arg @ref LL_RCC_APB2_DIV_16
  812. * @retval PCLK2 clock frequency (in Hz)
  813. */
  814. #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> (APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos] & 0x1FU))
  815. /**
  816. * @}
  817. */
  818. /**
  819. * @}
  820. */
  821. /* Exported functions --------------------------------------------------------*/
  822. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  823. * @{
  824. */
  825. /** @defgroup RCC_LL_EF_HSE HSE
  826. * @{
  827. */
  828. /**
  829. * @brief Enable the Clock Security System.
  830. * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS
  831. * @retval None
  832. */
  833. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  834. {
  835. SET_BIT(RCC->CR, RCC_CR_CSSON);
  836. }
  837. /**
  838. * @brief Enable HSE external oscillator (HSE Bypass)
  839. * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
  840. * @retval None
  841. */
  842. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  843. {
  844. SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  845. }
  846. /**
  847. * @brief Disable HSE external oscillator (HSE Bypass)
  848. * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
  849. * @retval None
  850. */
  851. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  852. {
  853. CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  854. }
  855. /**
  856. * @brief Enable HSE crystal oscillator (HSE ON)
  857. * @rmtoll CR HSEON LL_RCC_HSE_Enable
  858. * @retval None
  859. */
  860. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  861. {
  862. SET_BIT(RCC->CR, RCC_CR_HSEON);
  863. }
  864. /**
  865. * @brief Disable HSE crystal oscillator (HSE ON)
  866. * @rmtoll CR HSEON LL_RCC_HSE_Disable
  867. * @retval None
  868. */
  869. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  870. {
  871. CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  872. }
  873. /**
  874. * @brief Check if HSE oscillator Ready
  875. * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
  876. * @retval State of bit (1 or 0).
  877. */
  878. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  879. {
  880. return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)) ? 1UL : 0UL);
  881. }
  882. /**
  883. * @}
  884. */
  885. /** @defgroup RCC_LL_EF_HSI HSI
  886. * @{
  887. */
  888. /**
  889. * @brief Enable HSI even in stop mode
  890. * @note HSI oscillator is forced ON even in Stop mode
  891. * @rmtoll CR HSIKERON LL_RCC_HSI_EnableInStopMode
  892. * @retval None
  893. */
  894. __STATIC_INLINE void LL_RCC_HSI_EnableInStopMode(void)
  895. {
  896. SET_BIT(RCC->CR, RCC_CR_HSIKERON);
  897. }
  898. /**
  899. * @brief Disable HSI in stop mode
  900. * @rmtoll CR HSIKERON LL_RCC_HSI_DisableInStopMode
  901. * @retval None
  902. */
  903. __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void)
  904. {
  905. CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON);
  906. }
  907. /**
  908. * @brief Enable HSI oscillator
  909. * @rmtoll CR HSION LL_RCC_HSI_Enable
  910. * @retval None
  911. */
  912. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  913. {
  914. SET_BIT(RCC->CR, RCC_CR_HSION);
  915. }
  916. /**
  917. * @brief Disable HSI oscillator
  918. * @rmtoll CR HSION LL_RCC_HSI_Disable
  919. * @retval None
  920. */
  921. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  922. {
  923. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  924. }
  925. /**
  926. * @brief Check if HSI clock is ready
  927. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  928. * @retval State of bit (1 or 0).
  929. */
  930. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  931. {
  932. return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)) ? 1UL : 0UL);
  933. }
  934. /**
  935. * @brief Get HSI Calibration value
  936. * @note When HSITRIM is written, HSICAL is updated with the sum of
  937. * HSITRIM and the factory trim value
  938. * @rmtoll ICSCR HSICAL LL_RCC_HSI_GetCalibration
  939. * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  940. */
  941. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  942. {
  943. return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSICAL) >> RCC_ICSCR_HSICAL_Pos);
  944. }
  945. /**
  946. * @brief Set HSI Calibration trimming
  947. * @note user-programmable trimming value that is added to the HSICAL
  948. * @note Default value is 16, which, when added to the HSICAL value,
  949. * should trim the HSI to 16 MHz +/- 1 %
  950. * @rmtoll ICSCR HSITRIM LL_RCC_HSI_SetCalibTrimming
  951. * @param Value Between Min_Data = 0 and Max_Data = 127
  952. * @retval None
  953. */
  954. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  955. {
  956. MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_ICSCR_HSITRIM_Pos);
  957. }
  958. /**
  959. * @brief Get HSI Calibration trimming
  960. * @rmtoll ICSCR HSITRIM LL_RCC_HSI_GetCalibTrimming
  961. * @retval Between Min_Data = 0 and Max_Data = 127
  962. */
  963. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  964. {
  965. return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos);
  966. }
  967. /**
  968. * @}
  969. */
  970. /** @defgroup RCC_LL_EF_HSI48 HSI48
  971. * @{
  972. */
  973. /**
  974. * @brief Enable HSI48
  975. * @rmtoll CRRCR HSI48ON LL_RCC_HSI48_Enable
  976. * @retval None
  977. */
  978. __STATIC_INLINE void LL_RCC_HSI48_Enable(void)
  979. {
  980. SET_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
  981. }
  982. /**
  983. * @brief Disable HSI48
  984. * @rmtoll CRRCR HSI48ON LL_RCC_HSI48_Disable
  985. * @retval None
  986. */
  987. __STATIC_INLINE void LL_RCC_HSI48_Disable(void)
  988. {
  989. CLEAR_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
  990. }
  991. /**
  992. * @brief Check if HSI48 oscillator Ready
  993. * @rmtoll CRRCR HSI48RDY LL_RCC_HSI48_IsReady
  994. * @retval State of bit (1 or 0).
  995. */
  996. __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void)
  997. {
  998. return ((READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48RDY) == (RCC_CRRCR_HSI48RDY)) ? 1UL : 0UL);
  999. }
  1000. /**
  1001. * @brief Get HSI48 Calibration value
  1002. * @rmtoll CRRCR HSI48CAL LL_RCC_HSI48_GetCalibration
  1003. * @retval Between Min_Data = 0x00 and Max_Data = 0x1FF
  1004. */
  1005. __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void)
  1006. {
  1007. return (uint32_t)(READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48CAL) >> RCC_CRRCR_HSI48CAL_Pos);
  1008. }
  1009. /**
  1010. * @}
  1011. */
  1012. /** @defgroup RCC_LL_EF_LSE LSE
  1013. * @{
  1014. */
  1015. /**
  1016. * @brief Enable Low Speed External (LSE) crystal.
  1017. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  1018. * @retval None
  1019. */
  1020. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  1021. {
  1022. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  1023. }
  1024. /**
  1025. * @brief Disable Low Speed External (LSE) crystal.
  1026. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  1027. * @retval None
  1028. */
  1029. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  1030. {
  1031. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  1032. }
  1033. /**
  1034. * @brief Enable external clock source (LSE bypass).
  1035. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  1036. * @retval None
  1037. */
  1038. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  1039. {
  1040. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  1041. }
  1042. /**
  1043. * @brief Disable external clock source (LSE bypass).
  1044. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  1045. * @retval None
  1046. */
  1047. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  1048. {
  1049. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  1050. }
  1051. /**
  1052. * @brief Set LSE oscillator drive capability
  1053. * @note The oscillator is in Xtal mode when it is not in bypass mode.
  1054. * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability
  1055. * @param LSEDrive This parameter can be one of the following values:
  1056. * @arg @ref LL_RCC_LSEDRIVE_LOW
  1057. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1058. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1059. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  1060. * @retval None
  1061. */
  1062. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  1063. {
  1064. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
  1065. }
  1066. /**
  1067. * @brief Get LSE oscillator drive capability
  1068. * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability
  1069. * @retval Returned value can be one of the following values:
  1070. * @arg @ref LL_RCC_LSEDRIVE_LOW
  1071. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1072. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1073. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  1074. */
  1075. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  1076. {
  1077. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
  1078. }
  1079. /**
  1080. * @brief Enable Clock security system on LSE.
  1081. * @rmtoll BDCR LSECSSON LL_RCC_LSE_EnableCSS
  1082. * @retval None
  1083. */
  1084. __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
  1085. {
  1086. SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
  1087. }
  1088. /**
  1089. * @brief Disable Clock security system on LSE.
  1090. * @note Clock security system can be disabled only after a LSE
  1091. * failure detection. In that case it MUST be disabled by software.
  1092. * @rmtoll BDCR LSECSSON LL_RCC_LSE_DisableCSS
  1093. * @retval None
  1094. */
  1095. __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void)
  1096. {
  1097. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
  1098. }
  1099. /**
  1100. * @brief Check if LSE oscillator Ready
  1101. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  1102. * @retval State of bit (1 or 0).
  1103. */
  1104. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  1105. {
  1106. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)) ? 1UL : 0UL);
  1107. }
  1108. /**
  1109. * @brief Check if CSS on LSE failure Detection
  1110. * @rmtoll BDCR LSECSSD LL_RCC_LSE_IsCSSDetected
  1111. * @retval State of bit (1 or 0).
  1112. */
  1113. __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
  1114. {
  1115. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD)) ? 1UL : 0UL);
  1116. }
  1117. /**
  1118. * @}
  1119. */
  1120. /** @defgroup RCC_LL_EF_LSI LSI
  1121. * @{
  1122. */
  1123. /**
  1124. * @brief Enable LSI Oscillator
  1125. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  1126. * @retval None
  1127. */
  1128. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  1129. {
  1130. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  1131. }
  1132. /**
  1133. * @brief Disable LSI Oscillator
  1134. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  1135. * @retval None
  1136. */
  1137. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  1138. {
  1139. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  1140. }
  1141. /**
  1142. * @brief Check if LSI is Ready
  1143. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  1144. * @retval State of bit (1 or 0).
  1145. */
  1146. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  1147. {
  1148. return ((READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY)) ? 1UL : 0UL);
  1149. }
  1150. /**
  1151. * @}
  1152. */
  1153. /** @defgroup RCC_LL_EF_LSCO LSCO
  1154. * @{
  1155. */
  1156. /**
  1157. * @brief Enable Low speed clock
  1158. * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Enable
  1159. * @retval None
  1160. */
  1161. __STATIC_INLINE void LL_RCC_LSCO_Enable(void)
  1162. {
  1163. SET_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
  1164. }
  1165. /**
  1166. * @brief Disable Low speed clock
  1167. * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Disable
  1168. * @retval None
  1169. */
  1170. __STATIC_INLINE void LL_RCC_LSCO_Disable(void)
  1171. {
  1172. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
  1173. }
  1174. /**
  1175. * @brief Configure Low speed clock selection
  1176. * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_SetSource
  1177. * @param Source This parameter can be one of the following values:
  1178. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
  1179. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
  1180. * @retval None
  1181. */
  1182. __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
  1183. {
  1184. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL, Source);
  1185. }
  1186. /**
  1187. * @brief Get Low speed clock selection
  1188. * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_GetSource
  1189. * @retval Returned value can be one of the following values:
  1190. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
  1191. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
  1192. */
  1193. __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
  1194. {
  1195. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSCOSEL));
  1196. }
  1197. /**
  1198. * @}
  1199. */
  1200. /** @defgroup RCC_LL_EF_System System
  1201. * @{
  1202. */
  1203. /**
  1204. * @brief Configure the system clock source
  1205. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  1206. * @param Source This parameter can be one of the following values:
  1207. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  1208. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  1209. * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
  1210. * @retval None
  1211. */
  1212. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  1213. {
  1214. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  1215. }
  1216. /**
  1217. * @brief Get the system clock source
  1218. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  1219. * @retval Returned value can be one of the following values:
  1220. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  1221. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  1222. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
  1223. */
  1224. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  1225. {
  1226. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  1227. }
  1228. /**
  1229. * @brief Set AHB prescaler
  1230. * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
  1231. * @param Prescaler This parameter can be one of the following values:
  1232. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1233. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1234. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1235. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1236. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1237. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1238. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1239. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1240. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1241. * @retval None
  1242. */
  1243. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  1244. {
  1245. MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  1246. }
  1247. /**
  1248. * @brief Set APB1 prescaler
  1249. * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler
  1250. * @param Prescaler This parameter can be one of the following values:
  1251. * @arg @ref LL_RCC_APB1_DIV_1
  1252. * @arg @ref LL_RCC_APB1_DIV_2
  1253. * @arg @ref LL_RCC_APB1_DIV_4
  1254. * @arg @ref LL_RCC_APB1_DIV_8
  1255. * @arg @ref LL_RCC_APB1_DIV_16
  1256. * @retval None
  1257. */
  1258. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  1259. {
  1260. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
  1261. }
  1262. /**
  1263. * @brief Set APB2 prescaler
  1264. * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler
  1265. * @param Prescaler This parameter can be one of the following values:
  1266. * @arg @ref LL_RCC_APB2_DIV_1
  1267. * @arg @ref LL_RCC_APB2_DIV_2
  1268. * @arg @ref LL_RCC_APB2_DIV_4
  1269. * @arg @ref LL_RCC_APB2_DIV_8
  1270. * @arg @ref LL_RCC_APB2_DIV_16
  1271. * @retval None
  1272. */
  1273. __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
  1274. {
  1275. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
  1276. }
  1277. /**
  1278. * @brief Get AHB prescaler
  1279. * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
  1280. * @retval Returned value can be one of the following values:
  1281. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1282. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1283. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1284. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1285. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1286. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1287. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1288. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1289. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1290. */
  1291. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  1292. {
  1293. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  1294. }
  1295. /**
  1296. * @brief Get APB1 prescaler
  1297. * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler
  1298. * @retval Returned value can be one of the following values:
  1299. * @arg @ref LL_RCC_APB1_DIV_1
  1300. * @arg @ref LL_RCC_APB1_DIV_2
  1301. * @arg @ref LL_RCC_APB1_DIV_4
  1302. * @arg @ref LL_RCC_APB1_DIV_8
  1303. * @arg @ref LL_RCC_APB1_DIV_16
  1304. */
  1305. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  1306. {
  1307. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
  1308. }
  1309. /**
  1310. * @brief Get APB2 prescaler
  1311. * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler
  1312. * @retval Returned value can be one of the following values:
  1313. * @arg @ref LL_RCC_APB2_DIV_1
  1314. * @arg @ref LL_RCC_APB2_DIV_2
  1315. * @arg @ref LL_RCC_APB2_DIV_4
  1316. * @arg @ref LL_RCC_APB2_DIV_8
  1317. * @arg @ref LL_RCC_APB2_DIV_16
  1318. */
  1319. __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
  1320. {
  1321. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
  1322. }
  1323. /**
  1324. * @}
  1325. */
  1326. /** @defgroup RCC_LL_EF_MCO MCO
  1327. * @{
  1328. */
  1329. /**
  1330. * @brief Configure MCOx
  1331. * @rmtoll CFGR MCOSEL LL_RCC_ConfigMCO\n
  1332. * CFGR MCOPRE LL_RCC_ConfigMCO
  1333. * @param MCOxSource This parameter can be one of the following values:
  1334. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  1335. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  1336. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  1337. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  1338. * @arg @ref LL_RCC_MCO1SOURCE_HSI48
  1339. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK
  1340. * @arg @ref LL_RCC_MCO1SOURCE_LSI
  1341. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  1342. *
  1343. * (*) value not defined in all devices.
  1344. * @param MCOxPrescaler This parameter can be one of the following values:
  1345. * @arg @ref LL_RCC_MCO1_DIV_1
  1346. * @arg @ref LL_RCC_MCO1_DIV_2
  1347. * @arg @ref LL_RCC_MCO1_DIV_4
  1348. * @arg @ref LL_RCC_MCO1_DIV_8
  1349. * @arg @ref LL_RCC_MCO1_DIV_16
  1350. * @retval None
  1351. */
  1352. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  1353. {
  1354. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
  1355. }
  1356. /**
  1357. * @}
  1358. */
  1359. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1360. * @{
  1361. */
  1362. /**
  1363. * @brief Configure USARTx clock source
  1364. * @rmtoll CCIPR USARTxSEL LL_RCC_SetUSARTClockSource
  1365. * @param USARTxSource This parameter can be one of the following values:
  1366. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
  1367. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1368. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1369. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1370. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
  1371. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
  1372. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
  1373. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
  1374. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1
  1375. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK
  1376. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI
  1377. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE
  1378. * @retval None
  1379. */
  1380. __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
  1381. {
  1382. MODIFY_REG(RCC->CCIPR, (USARTxSource >> 16U), (USARTxSource & 0x0000FFFFU));
  1383. }
  1384. #if defined(UART4)
  1385. /**
  1386. * @brief Configure UARTx clock source
  1387. * @rmtoll CCIPR UARTxSEL LL_RCC_SetUARTClockSource
  1388. * @param UARTxSource This parameter can be one of the following values:
  1389. * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1 (*)
  1390. * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK (*)
  1391. * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI (*)
  1392. * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE (*)
  1393. * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1 (*)
  1394. * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK (*)
  1395. * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI (*)
  1396. * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE (*)
  1397. *
  1398. * (*) value not defined in all devices.
  1399. * @retval None
  1400. */
  1401. __STATIC_INLINE void LL_RCC_SetUARTClockSource(uint32_t UARTxSource)
  1402. {
  1403. MODIFY_REG(RCC->CCIPR, (UARTxSource >> 16U), (UARTxSource & 0x0000FFFFU));
  1404. }
  1405. #endif /* UART4 */
  1406. /**
  1407. * @brief Configure LPUART1x clock source
  1408. * @rmtoll CCIPR LPUART1SEL LL_RCC_SetLPUARTClockSource
  1409. * @param LPUARTxSource This parameter can be one of the following values:
  1410. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
  1411. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
  1412. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
  1413. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
  1414. * @retval None
  1415. */
  1416. __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)
  1417. {
  1418. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, LPUARTxSource);
  1419. }
  1420. /**
  1421. * @brief Configure I2Cx clock source
  1422. * @rmtoll CCIPR I2CxSEL LL_RCC_SetI2CClockSource
  1423. * @param I2CxSource This parameter can be one of the following values:
  1424. * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
  1425. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1426. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1427. * @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1
  1428. * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK
  1429. * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI
  1430. * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
  1431. * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
  1432. * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
  1433. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK1 (*)
  1434. * @arg @ref LL_RCC_I2C4_CLKSOURCE_SYSCLK (*)
  1435. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI (*)
  1436. *
  1437. * (*) value not defined in all devices.
  1438. * @retval None
  1439. */
  1440. __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
  1441. {
  1442. __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2CxSource >> 24U));
  1443. MODIFY_REG(*reg, 3UL << ((I2CxSource & 0x001F0000U) >> 16U), ((I2CxSource & 0x000000FFU) << ((I2CxSource & 0x001F0000U) >> 16U)));
  1444. }
  1445. /**
  1446. * @brief Configure LPTIMx clock source
  1447. * @rmtoll CCIPR LPTIM1SEL LL_RCC_SetLPTIMClockSource
  1448. * @param LPTIMxSource This parameter can be one of the following values:
  1449. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  1450. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  1451. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
  1452. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  1453. * @retval None
  1454. */
  1455. __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)
  1456. {
  1457. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL, LPTIMxSource);
  1458. }
  1459. #if defined(SAI1)
  1460. /**
  1461. * @brief Configure SAIx clock source
  1462. * @rmtoll CCIPR SAI1SEL LL_RCC_SetSAIClockSource
  1463. * @param SAIxSource This parameter can be one of the following values:
  1464. * @arg @ref LL_RCC_SAI1_CLKSOURCE_SYSCLK
  1465. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL
  1466. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN
  1467. * @arg @ref LL_RCC_SAI1_CLKSOURCE_HSI
  1468. *
  1469. * (*) value not defined in all devices.
  1470. * @retval None
  1471. */
  1472. __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource)
  1473. {
  1474. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI1SEL, SAIxSource);
  1475. }
  1476. #endif /* SAI1 */
  1477. #if defined(SPI_I2S_SUPPORT)
  1478. /**
  1479. * @brief Configure I2S clock source
  1480. * @rmtoll CCIPR I2S23SEL LL_RCC_SetI2SClockSource
  1481. * @param I2SxSource This parameter can be one of the following values:
  1482. * @arg @ref LL_RCC_I2S_CLKSOURCE_SYSCLK
  1483. * @arg @ref LL_RCC_I2S_CLKSOURCE_PLL
  1484. * @arg @ref LL_RCC_I2S_CLKSOURCE_PIN
  1485. * @arg @ref LL_RCC_I2S_CLKSOURCE_HSI
  1486. * @retval None
  1487. */
  1488. __STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t I2SxSource)
  1489. {
  1490. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2S23SEL, I2SxSource);
  1491. }
  1492. #endif /* SPI_I2S_SUPPORT */
  1493. #if defined(FDCAN1)
  1494. /**
  1495. * @brief Configure FDCAN clock source
  1496. * @rmtoll CCIPR FDCANSEL LL_RCC_SetFDCANClockSource
  1497. * @param FDCANxSource This parameter can be one of the following values:
  1498. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_HSE
  1499. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL
  1500. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PCLK1
  1501. * @retval None
  1502. */
  1503. __STATIC_INLINE void LL_RCC_SetFDCANClockSource(uint32_t FDCANxSource)
  1504. {
  1505. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_FDCANSEL, FDCANxSource);
  1506. }
  1507. #endif /* FDCAN1 */
  1508. /**
  1509. * @brief Configure RNG clock source
  1510. * @rmtoll CCIPR CLK48SEL LL_RCC_SetRNGClockSource
  1511. * @param RNGxSource This parameter can be one of the following values:
  1512. * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48
  1513. * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL
  1514. * @retval None
  1515. */
  1516. __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource)
  1517. {
  1518. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, RNGxSource);
  1519. }
  1520. /**
  1521. * @brief Configure USB clock source
  1522. * @rmtoll CCIPR CLK48SEL LL_RCC_SetUSBClockSource
  1523. * @param USBxSource This parameter can be one of the following values:
  1524. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
  1525. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1526. * @retval None
  1527. */
  1528. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
  1529. {
  1530. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, USBxSource);
  1531. }
  1532. /**
  1533. * @brief Configure ADC clock source
  1534. * @rmtoll CCIPR ADC12SEL LL_RCC_SetADCClockSource\n
  1535. * CCIPR ADC345SEL LL_RCC_SetADCClockSource
  1536. * @param ADCxSource This parameter can be one of the following values:
  1537. * @arg @ref LL_RCC_ADC12_CLKSOURCE_NONE
  1538. * @arg @ref LL_RCC_ADC12_CLKSOURCE_PLL
  1539. * @arg @ref LL_RCC_ADC12_CLKSOURCE_SYSCLK
  1540. * @arg @ref LL_RCC_ADC345_CLKSOURCE_NONE (*)
  1541. * @arg @ref LL_RCC_ADC345_CLKSOURCE_PLL (*)
  1542. * @arg @ref LL_RCC_ADC345_CLKSOURCE_SYSCLK (*)
  1543. *
  1544. * (*) value not defined in all devices.
  1545. * @retval None
  1546. */
  1547. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
  1548. {
  1549. MODIFY_REG(RCC->CCIPR, 3U << ((ADCxSource & 0x001F0000U) >> 16U), ((ADCxSource & 0x000000FFU) << ((ADCxSource & 0x001F0000U) >> 16U)));
  1550. }
  1551. #if defined(QUADSPI)
  1552. /**
  1553. * @brief Configure QUADSPI clock source
  1554. * @rmtoll CCIPR2 QSPISEL LL_RCC_SetQUADSPIClockSource
  1555. * @param Source This parameter can be one of the following values:
  1556. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_SYSCLK
  1557. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_HSI
  1558. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_PLL
  1559. * @retval None
  1560. */
  1561. __STATIC_INLINE void LL_RCC_SetQUADSPIClockSource(uint32_t Source)
  1562. {
  1563. MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_QSPISEL, Source);
  1564. }
  1565. #endif /* QUADSPI */
  1566. /**
  1567. * @brief Get USARTx clock source
  1568. * @rmtoll CCIPR USARTxSEL LL_RCC_GetUSARTClockSource
  1569. * @param USARTx This parameter can be one of the following values:
  1570. * @arg @ref LL_RCC_USART1_CLKSOURCE
  1571. * @arg @ref LL_RCC_USART2_CLKSOURCE
  1572. * @arg @ref LL_RCC_USART3_CLKSOURCE
  1573. * @retval Returned value can be one of the following values:
  1574. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
  1575. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1576. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1577. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1578. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
  1579. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
  1580. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
  1581. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
  1582. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1
  1583. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK
  1584. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI
  1585. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE
  1586. */
  1587. __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
  1588. {
  1589. return (uint32_t)(READ_BIT(RCC->CCIPR, USARTx) | (USARTx << 16U));
  1590. }
  1591. #if defined(UART4)
  1592. /**
  1593. * @brief Get UARTx clock source
  1594. * @rmtoll CCIPR UARTxSEL LL_RCC_GetUARTClockSource
  1595. * @param UARTx This parameter can be one of the following values:
  1596. * @arg @ref LL_RCC_UART4_CLKSOURCE (*)
  1597. * @arg @ref LL_RCC_UART5_CLKSOURCE (*)
  1598. * @retval Returned value can be one of the following values:
  1599. * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1 (*)
  1600. * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK (*)
  1601. * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI (*)
  1602. * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE (*)
  1603. * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1 (*)
  1604. * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK (*)
  1605. * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI (*)
  1606. * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE (*)
  1607. *
  1608. * (*) value not defined in all devices.
  1609. */
  1610. __STATIC_INLINE uint32_t LL_RCC_GetUARTClockSource(uint32_t UARTx)
  1611. {
  1612. return (uint32_t)(READ_BIT(RCC->CCIPR, UARTx) | (UARTx << 16U));
  1613. }
  1614. #endif /* UART4 */
  1615. /**
  1616. * @brief Get LPUARTx clock source
  1617. * @rmtoll CCIPR LPUART1SEL LL_RCC_GetLPUARTClockSource
  1618. * @param LPUARTx This parameter can be one of the following values:
  1619. * @arg @ref LL_RCC_LPUART1_CLKSOURCE
  1620. * @retval Returned value can be one of the following values:
  1621. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
  1622. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
  1623. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
  1624. * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
  1625. */
  1626. __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)
  1627. {
  1628. return (uint32_t)(READ_BIT(RCC->CCIPR, LPUARTx));
  1629. }
  1630. /**
  1631. * @brief Get I2Cx clock source
  1632. * @rmtoll CCIPR I2CxSEL LL_RCC_GetI2CClockSource
  1633. * @param I2Cx This parameter can be one of the following values:
  1634. * @arg @ref LL_RCC_I2C1_CLKSOURCE
  1635. * @arg @ref LL_RCC_I2C2_CLKSOURCE
  1636. * @arg @ref LL_RCC_I2C3_CLKSOURCE
  1637. * @arg @ref LL_RCC_I2C4_CLKSOURCE (*)
  1638. *
  1639. * (*) value not defined in all devices.
  1640. * @retval Returned value can be one of the following values:
  1641. * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
  1642. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1643. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1644. * @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1
  1645. * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK
  1646. * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI
  1647. * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
  1648. * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
  1649. * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
  1650. * @arg @ref LL_RCC_I2C4_CLKSOURCE_PCLK1 (*)
  1651. * @arg @ref LL_RCC_I2C4_CLKSOURCE_SYSCLK (*)
  1652. * @arg @ref LL_RCC_I2C4_CLKSOURCE_HSI (*)
  1653. *
  1654. * (*) value not defined in all devices.
  1655. */
  1656. __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
  1657. {
  1658. __IO const uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2Cx >> 24U));
  1659. return (uint32_t)((READ_BIT(*reg, 3UL << ((I2Cx & 0x001F0000U) >> 16U)) >> ((I2Cx & 0x001F0000U) >> 16U)) | (I2Cx & 0xFFFF0000U));
  1660. }
  1661. /**
  1662. * @brief Get LPTIMx clock source
  1663. * @rmtoll CCIPR LPTIMxSEL LL_RCC_GetLPTIMClockSource
  1664. * @param LPTIMx This parameter can be one of the following values:
  1665. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE
  1666. * @retval Returned value can be one of the following values:
  1667. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  1668. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  1669. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
  1670. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  1671. */
  1672. __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)
  1673. {
  1674. return (uint32_t)(READ_BIT(RCC->CCIPR, LPTIMx));
  1675. }
  1676. /**
  1677. * @brief Get SAIx clock source
  1678. * @rmtoll CCIPR SAI1SEL LL_RCC_GetSAIClockSource
  1679. * @param SAIx This parameter can be one of the following values:
  1680. * @arg @ref LL_RCC_SAI1_CLKSOURCE
  1681. *
  1682. * (*) value not defined in all devices.
  1683. * @retval Returned value can be one of the following values:
  1684. * @arg @ref LL_RCC_SAI1_CLKSOURCE_SYSCLK
  1685. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL
  1686. * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN
  1687. * @arg @ref LL_RCC_SAI1_CLKSOURCE_HSI
  1688. *
  1689. * (*) value not defined in all devices.
  1690. */
  1691. __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx)
  1692. {
  1693. return (uint32_t)(READ_BIT(RCC->CCIPR, SAIx));
  1694. }
  1695. /**
  1696. * @brief Get I2Sx clock source
  1697. * @rmtoll CCIPR I2S23SEL LL_RCC_GetI2SClockSource
  1698. * @param I2Sx This parameter can be one of the following values:
  1699. * @arg @ref LL_RCC_I2S_CLKSOURCE
  1700. * @retval Returned value can be one of the following values:
  1701. * @arg @ref LL_RCC_I2S_CLKSOURCE_SYSCLK
  1702. * @arg @ref LL_RCC_I2S_CLKSOURCE_PLL
  1703. * @arg @ref LL_RCC_I2S_CLKSOURCE_PIN
  1704. * @arg @ref LL_RCC_I2S_CLKSOURCE_HSI
  1705. */
  1706. __STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx)
  1707. {
  1708. return (uint32_t)(READ_BIT(RCC->CCIPR, I2Sx));
  1709. }
  1710. #if defined(FDCAN1)
  1711. /**
  1712. * @brief Get FDCANx clock source
  1713. * @rmtoll CCIPR FDCANSEL LL_RCC_GetFDCANClockSource
  1714. * @param FDCANx This parameter can be one of the following values:
  1715. * @arg @ref LL_RCC_FDCAN_CLKSOURCE
  1716. * @retval Returned value can be one of the following values:
  1717. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_HSE
  1718. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PLL
  1719. * @arg @ref LL_RCC_FDCAN_CLKSOURCE_PCLK1
  1720. * @retval None
  1721. */
  1722. __STATIC_INLINE uint32_t LL_RCC_GetFDCANClockSource(uint32_t FDCANx)
  1723. {
  1724. return (uint32_t)(READ_BIT(RCC->CCIPR, FDCANx));
  1725. }
  1726. #endif /* FDCAN1 */
  1727. /**
  1728. * @brief Get RNGx clock source
  1729. * @rmtoll CCIPR CLK48SEL LL_RCC_GetRNGClockSource
  1730. * @param RNGx This parameter can be one of the following values:
  1731. * @arg @ref LL_RCC_RNG_CLKSOURCE
  1732. * @retval Returned value can be one of the following values:
  1733. * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48
  1734. * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL
  1735. */
  1736. __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx)
  1737. {
  1738. return (uint32_t)(READ_BIT(RCC->CCIPR, RNGx));
  1739. }
  1740. /**
  1741. * @brief Get USBx clock source
  1742. * @rmtoll CCIPR CLK48SEL LL_RCC_GetUSBClockSource
  1743. * @param USBx This parameter can be one of the following values:
  1744. * @arg @ref LL_RCC_USB_CLKSOURCE
  1745. * @retval Returned value can be one of the following values:
  1746. * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
  1747. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1748. */
  1749. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
  1750. {
  1751. return (uint32_t)(READ_BIT(RCC->CCIPR, USBx));
  1752. }
  1753. /**
  1754. * @brief Get ADCx clock source
  1755. * @rmtoll CCIPR ADCSEL LL_RCC_GetADCClockSource
  1756. * @param ADCx This parameter can be one of the following values:
  1757. * @arg @ref LL_RCC_ADC12_CLKSOURCE
  1758. * @arg @ref LL_RCC_ADC345_CLKSOURCE (*)
  1759. * @retval Returned value can be one of the following values:
  1760. * @arg @ref LL_RCC_ADC12_CLKSOURCE_NONE
  1761. * @arg @ref LL_RCC_ADC12_CLKSOURCE_PLL
  1762. * @arg @ref LL_RCC_ADC12_CLKSOURCE_SYSCLK
  1763. * @arg @ref LL_RCC_ADC345_CLKSOURCE_NONE (*)
  1764. * @arg @ref LL_RCC_ADC345_CLKSOURCE_PLL (*)
  1765. * @arg @ref LL_RCC_ADC345_CLKSOURCE_SYSCLK (*)
  1766. *
  1767. * (*) value not defined in all devices.
  1768. */
  1769. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
  1770. {
  1771. return (uint32_t)((READ_BIT(RCC->CCIPR, 3UL << ((ADCx & 0x001F0000U) >> 16U)) >> ((ADCx & 0x001F0000U) >> 16U)) | (ADCx & 0xFFFF0000U));
  1772. }
  1773. #if defined(QUADSPI)
  1774. /**
  1775. * @brief Get QUADSPI clock source
  1776. * @rmtoll CCIPR2 QSPISEL LL_RCC_GetQUADSPIClockSource
  1777. * @param QUADSPIx This parameter can be one of the following values:
  1778. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE
  1779. * @retval Returned value can be one of the following values:
  1780. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_SYSCLK
  1781. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_HSI
  1782. * @arg @ref LL_RCC_QUADSPI_CLKSOURCE_PLL
  1783. */
  1784. __STATIC_INLINE uint32_t LL_RCC_GetQUADSPIClockSource(uint32_t QUADSPIx)
  1785. {
  1786. return (uint32_t)(READ_BIT(RCC->CCIPR2, QUADSPIx));
  1787. }
  1788. #endif /* QUADSPI */
  1789. /**
  1790. * @}
  1791. */
  1792. /** @defgroup RCC_LL_EF_RTC RTC
  1793. * @{
  1794. */
  1795. /**
  1796. * @brief Set RTC Clock Source
  1797. * @note Once the RTC clock source has been selected, it cannot be changed anymore unless
  1798. * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
  1799. * set). The BDRST bit can be used to reset them.
  1800. * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource
  1801. * @param Source This parameter can be one of the following values:
  1802. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1803. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1804. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1805. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1806. * @retval None
  1807. */
  1808. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  1809. {
  1810. MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  1811. }
  1812. /**
  1813. * @brief Get RTC Clock Source
  1814. * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource
  1815. * @retval Returned value can be one of the following values:
  1816. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1817. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1818. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1819. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1820. */
  1821. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  1822. {
  1823. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  1824. }
  1825. /**
  1826. * @brief Enable RTC
  1827. * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
  1828. * @retval None
  1829. */
  1830. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  1831. {
  1832. SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1833. }
  1834. /**
  1835. * @brief Disable RTC
  1836. * @rmtoll BDCR RTCEN LL_RCC_DisableRTC
  1837. * @retval None
  1838. */
  1839. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  1840. {
  1841. CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1842. }
  1843. /**
  1844. * @brief Check if RTC has been enabled or not
  1845. * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC
  1846. * @retval State of bit (1 or 0).
  1847. */
  1848. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  1849. {
  1850. return ((READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN)) ? 1UL : 0UL);
  1851. }
  1852. /**
  1853. * @brief Force the Backup domain reset
  1854. * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset
  1855. * @retval None
  1856. */
  1857. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  1858. {
  1859. SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1860. }
  1861. /**
  1862. * @brief Release the Backup domain reset
  1863. * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset
  1864. * @retval None
  1865. */
  1866. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  1867. {
  1868. CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1869. }
  1870. /**
  1871. * @}
  1872. */
  1873. /** @defgroup RCC_LL_EF_PLL PLL
  1874. * @{
  1875. */
  1876. /**
  1877. * @brief Enable PLL
  1878. * @rmtoll CR PLLON LL_RCC_PLL_Enable
  1879. * @retval None
  1880. */
  1881. __STATIC_INLINE void LL_RCC_PLL_Enable(void)
  1882. {
  1883. SET_BIT(RCC->CR, RCC_CR_PLLON);
  1884. }
  1885. /**
  1886. * @brief Disable PLL
  1887. * @note Cannot be disabled if the PLL clock is used as the system clock
  1888. * @rmtoll CR PLLON LL_RCC_PLL_Disable
  1889. * @retval None
  1890. */
  1891. __STATIC_INLINE void LL_RCC_PLL_Disable(void)
  1892. {
  1893. CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
  1894. }
  1895. /**
  1896. * @brief Check if PLL Ready
  1897. * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
  1898. * @retval State of bit (1 or 0).
  1899. */
  1900. __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
  1901. {
  1902. return ((READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)) ? 1UL : 0UL);
  1903. }
  1904. /**
  1905. * @brief Configure PLL used for SYSCLK Domain
  1906. * @note PLL Source and PLLM Divider can be written only when PLL
  1907. * is disabled.
  1908. * @note PLLN/PLLR can be written only when PLL is disabled.
  1909. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  1910. * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SYS\n
  1911. * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SYS\n
  1912. * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SYS
  1913. * @param Source This parameter can be one of the following values:
  1914. * @arg @ref LL_RCC_PLLSOURCE_NONE
  1915. * @arg @ref LL_RCC_PLLSOURCE_HSI
  1916. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1917. * @param PLLM This parameter can be one of the following values:
  1918. * @arg @ref LL_RCC_PLLM_DIV_1
  1919. * @arg @ref LL_RCC_PLLM_DIV_2
  1920. * @arg @ref LL_RCC_PLLM_DIV_3
  1921. * @arg @ref LL_RCC_PLLM_DIV_4
  1922. * @arg @ref LL_RCC_PLLM_DIV_5
  1923. * @arg @ref LL_RCC_PLLM_DIV_6
  1924. * @arg @ref LL_RCC_PLLM_DIV_7
  1925. * @arg @ref LL_RCC_PLLM_DIV_8
  1926. * @arg @ref LL_RCC_PLLM_DIV_9
  1927. * @arg @ref LL_RCC_PLLM_DIV_10
  1928. * @arg @ref LL_RCC_PLLM_DIV_11
  1929. * @arg @ref LL_RCC_PLLM_DIV_12
  1930. * @arg @ref LL_RCC_PLLM_DIV_13
  1931. * @arg @ref LL_RCC_PLLM_DIV_14
  1932. * @arg @ref LL_RCC_PLLM_DIV_15
  1933. * @arg @ref LL_RCC_PLLM_DIV_16
  1934. * @param PLLN Between Min_Data = 8 and Max_Data = 127
  1935. * @param PLLR This parameter can be one of the following values:
  1936. * @arg @ref LL_RCC_PLLR_DIV_2
  1937. * @arg @ref LL_RCC_PLLR_DIV_4
  1938. * @arg @ref LL_RCC_PLLR_DIV_6
  1939. * @arg @ref LL_RCC_PLLR_DIV_8
  1940. * @retval None
  1941. */
  1942. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
  1943. {
  1944. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR,
  1945. Source | PLLM | (PLLN << RCC_PLLCFGR_PLLN_Pos) | PLLR);
  1946. }
  1947. /**
  1948. * @brief Configure PLL used for ADC domain clock
  1949. * @note PLL Source and PLLM Divider can be written only when PLL
  1950. * is disabled.
  1951. * @note PLLN/PLLP can be written only when PLL is disabled.
  1952. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_ADC\n
  1953. * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_ADC\n
  1954. * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_ADC\n
  1955. * PLLCFGR PLLPDIV LL_RCC_PLL_ConfigDomain_ADC
  1956. * @param Source This parameter can be one of the following values:
  1957. * @arg @ref LL_RCC_PLLSOURCE_NONE
  1958. * @arg @ref LL_RCC_PLLSOURCE_HSI
  1959. * @arg @ref LL_RCC_PLLSOURCE_HSE
  1960. * @param PLLM This parameter can be one of the following values:
  1961. * @arg @ref LL_RCC_PLLM_DIV_1
  1962. * @arg @ref LL_RCC_PLLM_DIV_2
  1963. * @arg @ref LL_RCC_PLLM_DIV_3
  1964. * @arg @ref LL_RCC_PLLM_DIV_4
  1965. * @arg @ref LL_RCC_PLLM_DIV_5
  1966. * @arg @ref LL_RCC_PLLM_DIV_6
  1967. * @arg @ref LL_RCC_PLLM_DIV_7
  1968. * @arg @ref LL_RCC_PLLM_DIV_8
  1969. * @arg @ref LL_RCC_PLLM_DIV_9
  1970. * @arg @ref LL_RCC_PLLM_DIV_10
  1971. * @arg @ref LL_RCC_PLLM_DIV_11
  1972. * @arg @ref LL_RCC_PLLM_DIV_12
  1973. * @arg @ref LL_RCC_PLLM_DIV_13
  1974. * @arg @ref LL_RCC_PLLM_DIV_14
  1975. * @arg @ref LL_RCC_PLLM_DIV_15
  1976. * @arg @ref LL_RCC_PLLM_DIV_16
  1977. * @param PLLN Between Min_Data = 8 and Max_Data = 127
  1978. * @param PLLP This parameter can be one of the following values:
  1979. * @arg @ref LL_RCC_PLLP_DIV_2
  1980. * @arg @ref LL_RCC_PLLP_DIV_3
  1981. * @arg @ref LL_RCC_PLLP_DIV_4
  1982. * @arg @ref LL_RCC_PLLP_DIV_5
  1983. * @arg @ref LL_RCC_PLLP_DIV_6
  1984. * @arg @ref LL_RCC_PLLP_DIV_7
  1985. * @arg @ref LL_RCC_PLLP_DIV_8
  1986. * @arg @ref LL_RCC_PLLP_DIV_9
  1987. * @arg @ref LL_RCC_PLLP_DIV_10
  1988. * @arg @ref LL_RCC_PLLP_DIV_11
  1989. * @arg @ref LL_RCC_PLLP_DIV_12
  1990. * @arg @ref LL_RCC_PLLP_DIV_13
  1991. * @arg @ref LL_RCC_PLLP_DIV_14
  1992. * @arg @ref LL_RCC_PLLP_DIV_15
  1993. * @arg @ref LL_RCC_PLLP_DIV_16
  1994. * @arg @ref LL_RCC_PLLP_DIV_17
  1995. * @arg @ref LL_RCC_PLLP_DIV_18
  1996. * @arg @ref LL_RCC_PLLP_DIV_19
  1997. * @arg @ref LL_RCC_PLLP_DIV_20
  1998. * @arg @ref LL_RCC_PLLP_DIV_21
  1999. * @arg @ref LL_RCC_PLLP_DIV_22
  2000. * @arg @ref LL_RCC_PLLP_DIV_23
  2001. * @arg @ref LL_RCC_PLLP_DIV_24
  2002. * @arg @ref LL_RCC_PLLP_DIV_25
  2003. * @arg @ref LL_RCC_PLLP_DIV_26
  2004. * @arg @ref LL_RCC_PLLP_DIV_27
  2005. * @arg @ref LL_RCC_PLLP_DIV_28
  2006. * @arg @ref LL_RCC_PLLP_DIV_29
  2007. * @arg @ref LL_RCC_PLLP_DIV_30
  2008. * @arg @ref LL_RCC_PLLP_DIV_31
  2009. * @retval None
  2010. */
  2011. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
  2012. {
  2013. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLPDIV,
  2014. Source | PLLM | (PLLN << RCC_PLLCFGR_PLLN_Pos) | PLLP);
  2015. }
  2016. /**
  2017. * @brief Configure PLL used for 48Mhz domain clock
  2018. * @note PLL Source and PLLM Divider can be written only when PLL,
  2019. * is disabled.
  2020. * @note PLLN/PLLQ can be written only when PLL is disabled.
  2021. * @note This can be selected for USB, RNG
  2022. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_48M\n
  2023. * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_48M\n
  2024. * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_48M\n
  2025. * PLLCFGR PLLQ LL_RCC_PLL_ConfigDomain_48M
  2026. * @param Source This parameter can be one of the following values:
  2027. * @arg @ref LL_RCC_PLLSOURCE_NONE
  2028. * @arg @ref LL_RCC_PLLSOURCE_HSI
  2029. * @arg @ref LL_RCC_PLLSOURCE_HSE
  2030. * @param PLLM This parameter can be one of the following values:
  2031. * @arg @ref LL_RCC_PLLM_DIV_1
  2032. * @arg @ref LL_RCC_PLLM_DIV_2
  2033. * @arg @ref LL_RCC_PLLM_DIV_3
  2034. * @arg @ref LL_RCC_PLLM_DIV_4
  2035. * @arg @ref LL_RCC_PLLM_DIV_5
  2036. * @arg @ref LL_RCC_PLLM_DIV_6
  2037. * @arg @ref LL_RCC_PLLM_DIV_7
  2038. * @arg @ref LL_RCC_PLLM_DIV_8
  2039. * @arg @ref LL_RCC_PLLM_DIV_9
  2040. * @arg @ref LL_RCC_PLLM_DIV_10
  2041. * @arg @ref LL_RCC_PLLM_DIV_11
  2042. * @arg @ref LL_RCC_PLLM_DIV_12
  2043. * @arg @ref LL_RCC_PLLM_DIV_13
  2044. * @arg @ref LL_RCC_PLLM_DIV_14
  2045. * @arg @ref LL_RCC_PLLM_DIV_15
  2046. * @arg @ref LL_RCC_PLLM_DIV_16
  2047. * @param PLLN Between Min_Data = 8 and Max_Data = 127
  2048. * @param PLLQ This parameter can be one of the following values:
  2049. * @arg @ref LL_RCC_PLLQ_DIV_2
  2050. * @arg @ref LL_RCC_PLLQ_DIV_4
  2051. * @arg @ref LL_RCC_PLLQ_DIV_6
  2052. * @arg @ref LL_RCC_PLLQ_DIV_8
  2053. * @retval None
  2054. */
  2055. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ)
  2056. {
  2057. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ,
  2058. Source | PLLM | (PLLN << RCC_PLLCFGR_PLLN_Pos) | PLLQ);
  2059. }
  2060. /**
  2061. * @brief Configure PLL clock source
  2062. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_SetMainSource
  2063. * @param PLLSource This parameter can be one of the following values:
  2064. * @arg @ref LL_RCC_PLLSOURCE_NONE
  2065. * @arg @ref LL_RCC_PLLSOURCE_HSI
  2066. * @arg @ref LL_RCC_PLLSOURCE_HSE
  2067. * @retval None
  2068. */
  2069. __STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource)
  2070. {
  2071. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PLLSource);
  2072. }
  2073. /**
  2074. * @brief Get the oscillator used as PLL clock source.
  2075. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource
  2076. * @retval Returned value can be one of the following values:
  2077. * @arg @ref LL_RCC_PLLSOURCE_NONE
  2078. * @arg @ref LL_RCC_PLLSOURCE_HSI
  2079. * @arg @ref LL_RCC_PLLSOURCE_HSE
  2080. */
  2081. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
  2082. {
  2083. return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC));
  2084. }
  2085. /**
  2086. * @brief Get Main PLL multiplication factor for VCO
  2087. * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN
  2088. * @retval Between Min_Data = 8 and Max_Data = 127
  2089. */
  2090. __STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void)
  2091. {
  2092. return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
  2093. }
  2094. /**
  2095. * @brief Get Main PLL division factor for PLLP
  2096. * @note Used for PLLADCCLK (ADC clock)
  2097. * @rmtoll PLLCFGR PLLPDIV LL_RCC_PLL_GetP\n
  2098. * @rmtoll PLLCFGR PLLP LL_RCC_PLL_GetP
  2099. * @retval Returned value can be one of the following values:
  2100. * @arg @ref LL_RCC_PLLP_DIV_2
  2101. * @arg @ref LL_RCC_PLLP_DIV_3
  2102. * @arg @ref LL_RCC_PLLP_DIV_4
  2103. * @arg @ref LL_RCC_PLLP_DIV_5
  2104. * @arg @ref LL_RCC_PLLP_DIV_6
  2105. * @arg @ref LL_RCC_PLLP_DIV_7
  2106. * @arg @ref LL_RCC_PLLP_DIV_8
  2107. * @arg @ref LL_RCC_PLLP_DIV_9
  2108. * @arg @ref LL_RCC_PLLP_DIV_10
  2109. * @arg @ref LL_RCC_PLLP_DIV_11
  2110. * @arg @ref LL_RCC_PLLP_DIV_12
  2111. * @arg @ref LL_RCC_PLLP_DIV_13
  2112. * @arg @ref LL_RCC_PLLP_DIV_14
  2113. * @arg @ref LL_RCC_PLLP_DIV_15
  2114. * @arg @ref LL_RCC_PLLP_DIV_16
  2115. * @arg @ref LL_RCC_PLLP_DIV_17
  2116. * @arg @ref LL_RCC_PLLP_DIV_18
  2117. * @arg @ref LL_RCC_PLLP_DIV_19
  2118. * @arg @ref LL_RCC_PLLP_DIV_20
  2119. * @arg @ref LL_RCC_PLLP_DIV_21
  2120. * @arg @ref LL_RCC_PLLP_DIV_22
  2121. * @arg @ref LL_RCC_PLLP_DIV_23
  2122. * @arg @ref LL_RCC_PLLP_DIV_24
  2123. * @arg @ref LL_RCC_PLLP_DIV_25
  2124. * @arg @ref LL_RCC_PLLP_DIV_26
  2125. * @arg @ref LL_RCC_PLLP_DIV_27
  2126. * @arg @ref LL_RCC_PLLP_DIV_28
  2127. * @arg @ref LL_RCC_PLLP_DIV_29
  2128. * @arg @ref LL_RCC_PLLP_DIV_30
  2129. * @arg @ref LL_RCC_PLLP_DIV_31
  2130. */
  2131. __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void)
  2132. {
  2133. return (uint32_t) ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) != 0U) ? READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) : ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP) == RCC_PLLCFGR_PLLP) ? LL_RCC_PLLP_DIV_17 : LL_RCC_PLLP_DIV_7) );
  2134. }
  2135. /**
  2136. * @brief Get Main PLL division factor for PLLQ
  2137. * @note Used for PLL48M1CLK selected for USB, RNG (48 MHz clock)
  2138. * @rmtoll PLLCFGR PLLQ LL_RCC_PLL_GetQ
  2139. * @retval Returned value can be one of the following values:
  2140. * @arg @ref LL_RCC_PLLQ_DIV_2
  2141. * @arg @ref LL_RCC_PLLQ_DIV_4
  2142. * @arg @ref LL_RCC_PLLQ_DIV_6
  2143. * @arg @ref LL_RCC_PLLQ_DIV_8
  2144. */
  2145. __STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void)
  2146. {
  2147. return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ));
  2148. }
  2149. /**
  2150. * @brief Get Main PLL division factor for PLLR
  2151. * @note Used for PLLCLK (system clock)
  2152. * @rmtoll PLLCFGR PLLR LL_RCC_PLL_GetR
  2153. * @retval Returned value can be one of the following values:
  2154. * @arg @ref LL_RCC_PLLR_DIV_2
  2155. * @arg @ref LL_RCC_PLLR_DIV_4
  2156. * @arg @ref LL_RCC_PLLR_DIV_6
  2157. * @arg @ref LL_RCC_PLLR_DIV_8
  2158. */
  2159. __STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void)
  2160. {
  2161. return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR));
  2162. }
  2163. /**
  2164. * @brief Get Division factor for the main PLL and other PLL
  2165. * @rmtoll PLLCFGR PLLM LL_RCC_PLL_GetDivider
  2166. * @retval Returned value can be one of the following values:
  2167. * @arg @ref LL_RCC_PLLM_DIV_1
  2168. * @arg @ref LL_RCC_PLLM_DIV_2
  2169. * @arg @ref LL_RCC_PLLM_DIV_3
  2170. * @arg @ref LL_RCC_PLLM_DIV_4
  2171. * @arg @ref LL_RCC_PLLM_DIV_5
  2172. * @arg @ref LL_RCC_PLLM_DIV_6
  2173. * @arg @ref LL_RCC_PLLM_DIV_7
  2174. * @arg @ref LL_RCC_PLLM_DIV_8
  2175. * @arg @ref LL_RCC_PLLM_DIV_9
  2176. * @arg @ref LL_RCC_PLLM_DIV_10
  2177. * @arg @ref LL_RCC_PLLM_DIV_11
  2178. * @arg @ref LL_RCC_PLLM_DIV_12
  2179. * @arg @ref LL_RCC_PLLM_DIV_13
  2180. * @arg @ref LL_RCC_PLLM_DIV_14
  2181. * @arg @ref LL_RCC_PLLM_DIV_15
  2182. * @arg @ref LL_RCC_PLLM_DIV_16
  2183. */
  2184. __STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void)
  2185. {
  2186. return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM));
  2187. }
  2188. /**
  2189. * @brief Enable PLL output mapped on ADC domain clock
  2190. * @rmtoll PLLCFGR PLLPEN LL_RCC_PLL_EnableDomain_ADC
  2191. * @retval None
  2192. */
  2193. __STATIC_INLINE void LL_RCC_PLL_EnableDomain_ADC(void)
  2194. {
  2195. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
  2196. }
  2197. /**
  2198. * @brief Disable PLL output mapped on ADC domain clock
  2199. * @note Cannot be disabled if the PLL clock is used as the system
  2200. * clock
  2201. * @note In order to save power, when the PLLCLK of the PLL is
  2202. * not used, should be 0
  2203. * @rmtoll PLLCFGR PLLPEN LL_RCC_PLL_DisableDomain_ADC
  2204. * @retval None
  2205. */
  2206. __STATIC_INLINE void LL_RCC_PLL_DisableDomain_ADC(void)
  2207. {
  2208. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
  2209. }
  2210. /**
  2211. * @brief Check if PLL output mapped on ADC domain clock is enabled
  2212. * @rmtoll PLLCFGR PLLPEN LL_RCC_PLL_IsEnabledDomain_ADC
  2213. * @retval State of bit (1 or 0).
  2214. */
  2215. __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_ADC(void)
  2216. {
  2217. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN) == (RCC_PLLCFGR_PLLPEN)) ? 1UL : 0UL);
  2218. }
  2219. /**
  2220. * @brief Enable PLL output mapped on 48MHz domain clock
  2221. * @rmtoll PLLCFGR PLLQEN LL_RCC_PLL_EnableDomain_48M
  2222. * @retval None
  2223. */
  2224. __STATIC_INLINE void LL_RCC_PLL_EnableDomain_48M(void)
  2225. {
  2226. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
  2227. }
  2228. /**
  2229. * @brief Disable PLL output mapped on 48MHz domain clock
  2230. * @note Cannot be disabled if the PLL clock is used as the system
  2231. * clock
  2232. * @note In order to save power, when the PLLCLK of the PLL is
  2233. * not used, should be 0
  2234. * @rmtoll PLLCFGR PLLQEN LL_RCC_PLL_DisableDomain_48M
  2235. * @retval None
  2236. */
  2237. __STATIC_INLINE void LL_RCC_PLL_DisableDomain_48M(void)
  2238. {
  2239. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
  2240. }
  2241. /**
  2242. * @brief Check if PLL output mapped on 48MHz domain clock is enabled
  2243. * @rmtoll PLLCFGR PLLQEN LL_RCC_PLL_IsEnabledDomain_48M
  2244. * @retval State of bit (1 or 0).
  2245. */
  2246. __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_48M(void)
  2247. {
  2248. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN) == (RCC_PLLCFGR_PLLQEN)) ? 1UL : 0UL);
  2249. }
  2250. /**
  2251. * @brief Enable PLL output mapped on SYSCLK domain
  2252. * @rmtoll PLLCFGR PLLREN LL_RCC_PLL_EnableDomain_SYS
  2253. * @retval None
  2254. */
  2255. __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SYS(void)
  2256. {
  2257. SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
  2258. }
  2259. /**
  2260. * @brief Disable PLL output mapped on SYSCLK domain
  2261. * @note Cannot be disabled if the PLL clock is used as the system
  2262. * clock
  2263. * @note In order to save power, when the PLLCLK of the PLL is
  2264. * not used, Main PLL should be 0
  2265. * @rmtoll PLLCFGR PLLREN LL_RCC_PLL_DisableDomain_SYS
  2266. * @retval None
  2267. */
  2268. __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SYS(void)
  2269. {
  2270. CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
  2271. }
  2272. /**
  2273. * @brief Check if PLL output mapped on SYSCLK domain clock is enabled
  2274. * @rmtoll PLLCFGR PLLREN LL_RCC_PLL_IsEnabledDomain_SYS
  2275. * @retval State of bit (1 or 0).
  2276. */
  2277. __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_SYS(void)
  2278. {
  2279. return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN) == (RCC_PLLCFGR_PLLREN)) ? 1UL : 0UL);
  2280. }
  2281. /**
  2282. * @}
  2283. */
  2284. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  2285. * @{
  2286. */
  2287. /**
  2288. * @brief Clear LSI ready interrupt flag
  2289. * @rmtoll CICR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  2290. * @retval None
  2291. */
  2292. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  2293. {
  2294. SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC);
  2295. }
  2296. /**
  2297. * @brief Clear LSE ready interrupt flag
  2298. * @rmtoll CICR LSERDYC LL_RCC_ClearFlag_LSERDY
  2299. * @retval None
  2300. */
  2301. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  2302. {
  2303. SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
  2304. }
  2305. /**
  2306. * @brief Clear HSI ready interrupt flag
  2307. * @rmtoll CICR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  2308. * @retval None
  2309. */
  2310. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  2311. {
  2312. SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
  2313. }
  2314. /**
  2315. * @brief Clear HSE ready interrupt flag
  2316. * @rmtoll CICR HSERDYC LL_RCC_ClearFlag_HSERDY
  2317. * @retval None
  2318. */
  2319. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  2320. {
  2321. SET_BIT(RCC->CICR, RCC_CICR_HSERDYC);
  2322. }
  2323. /**
  2324. * @brief Clear PLL ready interrupt flag
  2325. * @rmtoll CICR PLLRDYC LL_RCC_ClearFlag_PLLRDY
  2326. * @retval None
  2327. */
  2328. __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
  2329. {
  2330. SET_BIT(RCC->CICR, RCC_CICR_PLLRDYC);
  2331. }
  2332. /**
  2333. * @brief Clear HSI48 ready interrupt flag
  2334. * @rmtoll CICR HSI48RDYC LL_RCC_ClearFlag_HSI48RDY
  2335. * @retval None
  2336. */
  2337. __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void)
  2338. {
  2339. SET_BIT(RCC->CICR, RCC_CICR_HSI48RDYC);
  2340. }
  2341. /**
  2342. * @brief Clear Clock security system interrupt flag
  2343. * @rmtoll CICR CSSC LL_RCC_ClearFlag_HSECSS
  2344. * @retval None
  2345. */
  2346. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  2347. {
  2348. SET_BIT(RCC->CICR, RCC_CICR_CSSC);
  2349. }
  2350. /**
  2351. * @brief Clear LSE Clock security system interrupt flag
  2352. * @rmtoll CICR LSECSSC LL_RCC_ClearFlag_LSECSS
  2353. * @retval None
  2354. */
  2355. __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
  2356. {
  2357. SET_BIT(RCC->CICR, RCC_CICR_LSECSSC);
  2358. }
  2359. /**
  2360. * @brief Check if LSI ready interrupt occurred or not
  2361. * @rmtoll CIFR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  2362. * @retval State of bit (1 or 0).
  2363. */
  2364. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  2365. {
  2366. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF)) ? 1UL : 0UL);
  2367. }
  2368. /**
  2369. * @brief Check if LSE ready interrupt occurred or not
  2370. * @rmtoll CIFR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  2371. * @retval State of bit (1 or 0).
  2372. */
  2373. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  2374. {
  2375. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF)) ? 1UL : 0UL);
  2376. }
  2377. /**
  2378. * @brief Check if HSI ready interrupt occurred or not
  2379. * @rmtoll CIFR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  2380. * @retval State of bit (1 or 0).
  2381. */
  2382. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  2383. {
  2384. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF)) ? 1UL : 0UL);
  2385. }
  2386. /**
  2387. * @brief Check if HSE ready interrupt occurred or not
  2388. * @rmtoll CIFR HSERDYF LL_RCC_IsActiveFlag_HSERDY
  2389. * @retval State of bit (1 or 0).
  2390. */
  2391. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  2392. {
  2393. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF)) ? 1UL : 0UL);
  2394. }
  2395. /**
  2396. * @brief Check if PLL ready interrupt occurred or not
  2397. * @rmtoll CIFR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY
  2398. * @retval State of bit (1 or 0).
  2399. */
  2400. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
  2401. {
  2402. return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLLRDYF) == (RCC_CIFR_PLLRDYF)) ? 1UL : 0UL);
  2403. }
  2404. /**
  2405. * @brief Check if HSI48 ready interrupt occurred or not
  2406. * @rmtoll CIR HSI48RDYF LL_RCC_IsActiveFlag_HSI48RDY
  2407. * @retval State of bit (1 or 0).
  2408. */
  2409. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void)
  2410. {
  2411. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSI48RDYF) == (RCC_CIFR_HSI48RDYF)) ? 1UL : 0UL);
  2412. }
  2413. /**
  2414. * @brief Check if Clock security system interrupt occurred or not
  2415. * @rmtoll CIFR CSSF LL_RCC_IsActiveFlag_HSECSS
  2416. * @retval State of bit (1 or 0).
  2417. */
  2418. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  2419. {
  2420. return ((READ_BIT(RCC->CIFR, RCC_CIFR_CSSF) == (RCC_CIFR_CSSF)) ? 1UL : 0UL);
  2421. }
  2422. /**
  2423. * @brief Check if LSE Clock security system interrupt occurred or not
  2424. * @rmtoll CIFR LSECSSF LL_RCC_IsActiveFlag_LSECSS
  2425. * @retval State of bit (1 or 0).
  2426. */
  2427. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
  2428. {
  2429. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF)) ? 1UL : 0UL);
  2430. }
  2431. /**
  2432. * @brief Check if RCC flag Independent Watchdog reset is set or not.
  2433. * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
  2434. * @retval State of bit (1 or 0).
  2435. */
  2436. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  2437. {
  2438. return ((READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)) ? 1UL : 0UL);
  2439. }
  2440. /**
  2441. * @brief Check if RCC flag Low Power reset is set or not.
  2442. * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
  2443. * @retval State of bit (1 or 0).
  2444. */
  2445. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  2446. {
  2447. return ((READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF)) ? 1UL : 0UL);
  2448. }
  2449. /**
  2450. * @brief Check if RCC flag Option byte reset is set or not.
  2451. * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
  2452. * @retval State of bit (1 or 0).
  2453. */
  2454. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
  2455. {
  2456. return ((READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF)) ? 1UL : 0UL);
  2457. }
  2458. /**
  2459. * @brief Check if RCC flag Pin reset is set or not.
  2460. * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  2461. * @retval State of bit (1 or 0).
  2462. */
  2463. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  2464. {
  2465. return ((READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)) ? 1UL : 0UL);
  2466. }
  2467. /**
  2468. * @brief Check if RCC flag Software reset is set or not.
  2469. * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
  2470. * @retval State of bit (1 or 0).
  2471. */
  2472. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  2473. {
  2474. return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)) ? 1UL : 0UL);
  2475. }
  2476. /**
  2477. * @brief Check if RCC flag Window Watchdog reset is set or not.
  2478. * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
  2479. * @retval State of bit (1 or 0).
  2480. */
  2481. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
  2482. {
  2483. return ((READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF)) ? 1UL : 0UL);
  2484. }
  2485. /**
  2486. * @brief Check if RCC flag BOR reset is set or not.
  2487. * @rmtoll CSR BORRSTF LL_RCC_IsActiveFlag_BORRST
  2488. * @retval State of bit (1 or 0).
  2489. */
  2490. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void)
  2491. {
  2492. return ((READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == (RCC_CSR_BORRSTF)) ? 1UL : 0UL);
  2493. }
  2494. /**
  2495. * @brief Set RMVF bit to clear the reset flags.
  2496. * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
  2497. * @retval None
  2498. */
  2499. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  2500. {
  2501. SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  2502. }
  2503. /**
  2504. * @}
  2505. */
  2506. /** @defgroup RCC_LL_EF_IT_Management IT Management
  2507. * @{
  2508. */
  2509. /**
  2510. * @brief Enable LSI ready interrupt
  2511. * @rmtoll CIER LSIRDYIE LL_RCC_EnableIT_LSIRDY
  2512. * @retval None
  2513. */
  2514. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  2515. {
  2516. SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  2517. }
  2518. /**
  2519. * @brief Enable LSE ready interrupt
  2520. * @rmtoll CIER LSERDYIE LL_RCC_EnableIT_LSERDY
  2521. * @retval None
  2522. */
  2523. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  2524. {
  2525. SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  2526. }
  2527. /**
  2528. * @brief Enable HSI ready interrupt
  2529. * @rmtoll CIER HSIRDYIE LL_RCC_EnableIT_HSIRDY
  2530. * @retval None
  2531. */
  2532. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  2533. {
  2534. SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  2535. }
  2536. /**
  2537. * @brief Enable HSE ready interrupt
  2538. * @rmtoll CIER HSERDYIE LL_RCC_EnableIT_HSERDY
  2539. * @retval None
  2540. */
  2541. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  2542. {
  2543. SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
  2544. }
  2545. /**
  2546. * @brief Enable PLL ready interrupt
  2547. * @rmtoll CIER PLLRDYIE LL_RCC_EnableIT_PLLRDY
  2548. * @retval None
  2549. */
  2550. __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
  2551. {
  2552. SET_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
  2553. }
  2554. /**
  2555. * @brief Enable HSI48 ready interrupt
  2556. * @rmtoll CIER HSI48RDYIE LL_RCC_EnableIT_HSI48RDY
  2557. * @retval None
  2558. */
  2559. __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void)
  2560. {
  2561. SET_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
  2562. }
  2563. /**
  2564. * @brief Enable LSE clock security system interrupt
  2565. * @rmtoll CIER LSECSSIE LL_RCC_EnableIT_LSECSS
  2566. * @retval None
  2567. */
  2568. __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void)
  2569. {
  2570. SET_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
  2571. }
  2572. /**
  2573. * @brief Disable LSI ready interrupt
  2574. * @rmtoll CIER LSIRDYIE LL_RCC_DisableIT_LSIRDY
  2575. * @retval None
  2576. */
  2577. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  2578. {
  2579. CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  2580. }
  2581. /**
  2582. * @brief Disable LSE ready interrupt
  2583. * @rmtoll CIER LSERDYIE LL_RCC_DisableIT_LSERDY
  2584. * @retval None
  2585. */
  2586. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  2587. {
  2588. CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  2589. }
  2590. /**
  2591. * @brief Disable HSI ready interrupt
  2592. * @rmtoll CIER HSIRDYIE LL_RCC_DisableIT_HSIRDY
  2593. * @retval None
  2594. */
  2595. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  2596. {
  2597. CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  2598. }
  2599. /**
  2600. * @brief Disable HSE ready interrupt
  2601. * @rmtoll CIER HSERDYIE LL_RCC_DisableIT_HSERDY
  2602. * @retval None
  2603. */
  2604. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  2605. {
  2606. CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
  2607. }
  2608. /**
  2609. * @brief Disable PLL ready interrupt
  2610. * @rmtoll CIER PLLRDYIE LL_RCC_DisableIT_PLLRDY
  2611. * @retval None
  2612. */
  2613. __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
  2614. {
  2615. CLEAR_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
  2616. }
  2617. /**
  2618. * @brief Disable HSI48 ready interrupt
  2619. * @rmtoll CIER HSI48RDYIE LL_RCC_DisableIT_HSI48RDY
  2620. * @retval None
  2621. */
  2622. __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void)
  2623. {
  2624. CLEAR_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
  2625. }
  2626. /**
  2627. * @brief Disable LSE clock security system interrupt
  2628. * @rmtoll CIER LSECSSIE LL_RCC_DisableIT_LSECSS
  2629. * @retval None
  2630. */
  2631. __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void)
  2632. {
  2633. CLEAR_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
  2634. }
  2635. /**
  2636. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  2637. * @rmtoll CIER LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
  2638. * @retval State of bit (1 or 0).
  2639. */
  2640. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  2641. {
  2642. return ((READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE)) ? 1UL : 0UL);
  2643. }
  2644. /**
  2645. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  2646. * @rmtoll CIER LSERDYIE LL_RCC_IsEnabledIT_LSERDY
  2647. * @retval State of bit (1 or 0).
  2648. */
  2649. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  2650. {
  2651. return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE)) ? 1UL : 0UL);
  2652. }
  2653. /**
  2654. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  2655. * @rmtoll CIER HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
  2656. * @retval State of bit (1 or 0).
  2657. */
  2658. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  2659. {
  2660. return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE)) ? 1UL : 0UL);
  2661. }
  2662. /**
  2663. * @brief Checks if HSE ready interrupt source is enabled or disabled.
  2664. * @rmtoll CIER HSERDYIE LL_RCC_IsEnabledIT_HSERDY
  2665. * @retval State of bit (1 or 0).
  2666. */
  2667. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
  2668. {
  2669. return ((READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == (RCC_CIER_HSERDYIE)) ? 1UL : 0UL);
  2670. }
  2671. /**
  2672. * @brief Checks if PLL ready interrupt source is enabled or disabled.
  2673. * @rmtoll CIER PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY
  2674. * @retval State of bit (1 or 0).
  2675. */
  2676. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
  2677. {
  2678. return ((READ_BIT(RCC->CIER, RCC_CIER_PLLRDYIE) == (RCC_CIER_PLLRDYIE)) ? 1UL : 0UL);
  2679. }
  2680. /**
  2681. * @brief Checks if HSI48 ready interrupt source is enabled or disabled.
  2682. * @rmtoll CIER HSI48RDYIE LL_RCC_IsEnabledIT_HSI48RDY
  2683. * @retval State of bit (1 or 0).
  2684. */
  2685. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void)
  2686. {
  2687. return ((READ_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE) == (RCC_CIER_HSI48RDYIE)) ? 1UL : 0UL);
  2688. }
  2689. /**
  2690. * @brief Checks if LSECSS interrupt source is enabled or disabled.
  2691. * @rmtoll CIER LSECSSIE LL_RCC_IsEnabledIT_LSECSS
  2692. * @retval State of bit (1 or 0).
  2693. */
  2694. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSECSS(void)
  2695. {
  2696. return ((READ_BIT(RCC->CIER, RCC_CIER_LSECSSIE) == (RCC_CIER_LSECSSIE)) ? 1UL : 0UL);
  2697. }
  2698. /**
  2699. * @}
  2700. */
  2701. #if defined(USE_FULL_LL_DRIVER)
  2702. /** @defgroup RCC_LL_EF_Init De-initialization function
  2703. * @{
  2704. */
  2705. ErrorStatus LL_RCC_DeInit(void);
  2706. /**
  2707. * @}
  2708. */
  2709. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  2710. * @{
  2711. */
  2712. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  2713. uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
  2714. #if defined(UART4)
  2715. uint32_t LL_RCC_GetUARTClockFreq(uint32_t UARTxSource);
  2716. #endif /* UART4 */
  2717. uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
  2718. uint32_t LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource);
  2719. uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource);
  2720. uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource);
  2721. uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource);
  2722. #if defined(FDCAN1)
  2723. uint32_t LL_RCC_GetFDCANClockFreq(uint32_t FDCANxSource);
  2724. #endif /* FDCAN1 */
  2725. uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource);
  2726. uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  2727. uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
  2728. #if defined(QUADSPI)
  2729. uint32_t LL_RCC_GetQUADSPIClockFreq(uint32_t QUADSPIxSource);
  2730. #endif /* QUADSPI */
  2731. /**
  2732. * @}
  2733. */
  2734. #endif /* USE_FULL_LL_DRIVER */
  2735. /**
  2736. * @}
  2737. */
  2738. /**
  2739. * @}
  2740. */
  2741. /**
  2742. * @}
  2743. */
  2744. #ifdef __cplusplus
  2745. }
  2746. #endif
  2747. #endif /* STM32G4xx_LL_RCC_H */