stm32f3xx_ll_rcc.h 114 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834
  1. /**
  2. ******************************************************************************
  3. * @file stm32f3xx_ll_rcc.h
  4. * @author MCD Application Team
  5. * @brief Header file of RCC LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  10. *
  11. * Redistribution and use in source and binary forms, with or without modification,
  12. * are permitted provided that the following conditions are met:
  13. * 1. Redistributions of source code must retain the above copyright notice,
  14. * this list of conditions and the following disclaimer.
  15. * 2. Redistributions in binary form must reproduce the above copyright notice,
  16. * this list of conditions and the following disclaimer in the documentation
  17. * and/or other materials provided with the distribution.
  18. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  19. * may be used to endorse or promote products derived from this software
  20. * without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. *
  33. ******************************************************************************
  34. */
  35. /* Define to prevent recursive inclusion -------------------------------------*/
  36. #ifndef __STM32F3xx_LL_RCC_H
  37. #define __STM32F3xx_LL_RCC_H
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /* Includes ------------------------------------------------------------------*/
  42. #include "stm32f3xx.h"
  43. /** @addtogroup STM32F3xx_LL_Driver
  44. * @{
  45. */
  46. #if defined(RCC)
  47. /** @defgroup RCC_LL RCC
  48. * @{
  49. */
  50. /* Private types -------------------------------------------------------------*/
  51. /* Private variables ---------------------------------------------------------*/
  52. /* Private constants ---------------------------------------------------------*/
  53. /** @defgroup RCC_LL_Private_Constants RCC Private Constants
  54. * @{
  55. */
  56. /* Defines used for the bit position in the register and perform offsets*/
  57. #define RCC_POSITION_HPRE (uint32_t)POSITION_VAL(RCC_CFGR_HPRE) /*!< field position in register RCC_CFGR */
  58. #define RCC_POSITION_PPRE1 (uint32_t)POSITION_VAL(RCC_CFGR_PPRE1) /*!< field position in register RCC_CFGR */
  59. #define RCC_POSITION_PPRE2 (uint32_t)POSITION_VAL(RCC_CFGR_PPRE2) /*!< field position in register RCC_CFGR */
  60. #define RCC_POSITION_HSICAL (uint32_t)POSITION_VAL(RCC_CR_HSICAL) /*!< field position in register RCC_CR */
  61. #define RCC_POSITION_HSITRIM (uint32_t)POSITION_VAL(RCC_CR_HSITRIM) /*!< field position in register RCC_CR */
  62. #define RCC_POSITION_PLLMUL (uint32_t)POSITION_VAL(RCC_CFGR_PLLMUL) /*!< field position in register RCC_CFGR */
  63. #define RCC_POSITION_USART1SW (uint32_t)0U /*!< field position in register RCC_CFGR3 */
  64. #define RCC_POSITION_USART2SW (uint32_t)16U /*!< field position in register RCC_CFGR3 */
  65. #define RCC_POSITION_USART3SW (uint32_t)18U /*!< field position in register RCC_CFGR3 */
  66. #define RCC_POSITION_TIM1SW (uint32_t)8U /*!< field position in register RCC_CFGR3 */
  67. #define RCC_POSITION_TIM8SW (uint32_t)9U /*!< field position in register RCC_CFGR3 */
  68. #define RCC_POSITION_TIM15SW (uint32_t)10U /*!< field position in register RCC_CFGR3 */
  69. #define RCC_POSITION_TIM16SW (uint32_t)11U /*!< field position in register RCC_CFGR3 */
  70. #define RCC_POSITION_TIM17SW (uint32_t)13U /*!< field position in register RCC_CFGR3 */
  71. #define RCC_POSITION_TIM20SW (uint32_t)15U /*!< field position in register RCC_CFGR3 */
  72. #define RCC_POSITION_TIM2SW (uint32_t)24U /*!< field position in register RCC_CFGR3 */
  73. #define RCC_POSITION_TIM34SW (uint32_t)25U /*!< field position in register RCC_CFGR3 */
  74. /**
  75. * @}
  76. */
  77. /* Private macros ------------------------------------------------------------*/
  78. #if defined(USE_FULL_LL_DRIVER)
  79. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  80. * @{
  81. */
  82. /**
  83. * @}
  84. */
  85. #endif /*USE_FULL_LL_DRIVER*/
  86. /* Exported types ------------------------------------------------------------*/
  87. #if defined(USE_FULL_LL_DRIVER)
  88. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  89. * @{
  90. */
  91. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  92. * @{
  93. */
  94. /**
  95. * @brief RCC Clocks Frequency Structure
  96. */
  97. typedef struct
  98. {
  99. uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
  100. uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
  101. uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
  102. uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */
  103. } LL_RCC_ClocksTypeDef;
  104. /**
  105. * @}
  106. */
  107. /**
  108. * @}
  109. */
  110. #endif /* USE_FULL_LL_DRIVER */
  111. /* Exported constants --------------------------------------------------------*/
  112. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  113. * @{
  114. */
  115. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  116. * @brief Defines used to adapt values of different oscillators
  117. * @note These values could be modified in the user environment according to
  118. * HW set-up.
  119. * @{
  120. */
  121. #if !defined (HSE_VALUE)
  122. #define HSE_VALUE 8000000U /*!< Value of the HSE oscillator in Hz */
  123. #endif /* HSE_VALUE */
  124. #if !defined (HSI_VALUE)
  125. #define HSI_VALUE 8000000U /*!< Value of the HSI oscillator in Hz */
  126. #endif /* HSI_VALUE */
  127. #if !defined (LSE_VALUE)
  128. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  129. #endif /* LSE_VALUE */
  130. #if !defined (LSI_VALUE)
  131. #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */
  132. #endif /* LSI_VALUE */
  133. /**
  134. * @}
  135. */
  136. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  137. * @brief Flags defines which can be used with LL_RCC_WriteReg function
  138. * @{
  139. */
  140. #define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */
  141. #define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */
  142. #define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */
  143. #define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */
  144. #define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */
  145. #define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */
  146. /**
  147. * @}
  148. */
  149. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  150. * @brief Flags defines which can be used with LL_RCC_ReadReg function
  151. * @{
  152. */
  153. #define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */
  154. #define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */
  155. #define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */
  156. #define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */
  157. #define LL_RCC_CFGR_MCOF RCC_CFGR_MCOF /*!< MCO flag */
  158. #define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */
  159. #define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */
  160. #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */
  161. #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
  162. #define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */
  163. #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
  164. #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
  165. #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
  166. #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */
  167. #if defined(RCC_CSR_V18PWRRSTF)
  168. #define LL_RCC_CSR_V18PWRRSTF RCC_CSR_V18PWRRSTF /*!< Reset flag of the 1.8 V domain. */
  169. #endif /* RCC_CSR_V18PWRRSTF */
  170. /**
  171. * @}
  172. */
  173. /** @defgroup RCC_LL_EC_IT IT Defines
  174. * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
  175. * @{
  176. */
  177. #define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */
  178. #define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */
  179. #define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */
  180. #define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */
  181. #define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */
  182. /**
  183. * @}
  184. */
  185. /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
  186. * @{
  187. */
  188. #define LL_RCC_LSEDRIVE_LOW ((uint32_t)0x00000000U) /*!< Xtal mode lower driving capability */
  189. #define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */
  190. #define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */
  191. #define LL_RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */
  192. /**
  193. * @}
  194. */
  195. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  196. * @{
  197. */
  198. #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */
  199. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */
  200. #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */
  201. /**
  202. * @}
  203. */
  204. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  205. * @{
  206. */
  207. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
  208. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
  209. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */
  210. /**
  211. * @}
  212. */
  213. /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
  214. * @{
  215. */
  216. #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */
  217. #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */
  218. #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */
  219. #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */
  220. #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */
  221. #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */
  222. #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
  223. #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
  224. #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
  225. /**
  226. * @}
  227. */
  228. /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
  229. * @{
  230. */
  231. #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */
  232. #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */
  233. #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */
  234. #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */
  235. #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
  236. /**
  237. * @}
  238. */
  239. /** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2)
  240. * @{
  241. */
  242. #define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */
  243. #define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */
  244. #define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */
  245. #define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */
  246. #define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
  247. /**
  248. * @}
  249. */
  250. /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
  251. * @{
  252. */
  253. #define LL_RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCOSEL_NOCLOCK /*!< MCO output disabled, no clock on MCO */
  254. #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_SYSCLK /*!< SYSCLK selection as MCO source */
  255. #define LL_RCC_MCO1SOURCE_HSI RCC_CFGR_MCOSEL_HSI /*!< HSI selection as MCO source */
  256. #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_HSE /*!< HSE selection as MCO source */
  257. #define LL_RCC_MCO1SOURCE_LSI RCC_CFGR_MCOSEL_LSI /*!< LSI selection as MCO source */
  258. #define LL_RCC_MCO1SOURCE_LSE RCC_CFGR_MCOSEL_LSE /*!< LSE selection as MCO source */
  259. #define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2 RCC_CFGR_MCOSEL_PLL_DIV2 /*!< PLL clock divided by 2*/
  260. #if defined(RCC_CFGR_PLLNODIV)
  261. #define LL_RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCOSEL_PLL_DIV2 | RCC_CFGR_PLLNODIV) /*!< PLL clock selected*/
  262. #endif /* RCC_CFGR_PLLNODIV */
  263. /**
  264. * @}
  265. */
  266. /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
  267. * @{
  268. */
  269. #define LL_RCC_MCO1_DIV_1 ((uint32_t)0x00000000U)/*!< MCO Clock divided by 1 */
  270. #if defined(RCC_CFGR_MCOPRE)
  271. #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO Clock divided by 2 */
  272. #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO Clock divided by 4 */
  273. #define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO Clock divided by 8 */
  274. #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO Clock divided by 16 */
  275. #define LL_RCC_MCO1_DIV_32 RCC_CFGR_MCOPRE_DIV32 /*!< MCO Clock divided by 32 */
  276. #define LL_RCC_MCO1_DIV_64 RCC_CFGR_MCOPRE_DIV64 /*!< MCO Clock divided by 64 */
  277. #define LL_RCC_MCO1_DIV_128 RCC_CFGR_MCOPRE_DIV128 /*!< MCO Clock divided by 128 */
  278. #endif /* RCC_CFGR_MCOPRE */
  279. /**
  280. * @}
  281. */
  282. #if defined(USE_FULL_LL_DRIVER)
  283. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  284. * @{
  285. */
  286. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  287. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  288. /**
  289. * @}
  290. */
  291. #endif /* USE_FULL_LL_DRIVER */
  292. /** @defgroup RCC_LL_EC_USART1_CLKSOURCE Peripheral USART clock source selection
  293. * @{
  294. */
  295. #if defined(RCC_CFGR3_USART1SW_PCLK1)
  296. #define LL_RCC_USART1_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART1SW << 24U) | RCC_CFGR3_USART1SW_PCLK1) /*!< PCLK1 clock used as USART1 clock source */
  297. #else
  298. #define LL_RCC_USART1_CLKSOURCE_PCLK2 (uint32_t)((RCC_POSITION_USART1SW << 24U) | RCC_CFGR3_USART1SW_PCLK2) /*!< PCLK2 clock used as USART1 clock source */
  299. #endif /*RCC_CFGR3_USART1SW_PCLK1*/
  300. #define LL_RCC_USART1_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART1SW << 24U) | RCC_CFGR3_USART1SW_SYSCLK) /*!< System clock selected as USART1 clock source */
  301. #define LL_RCC_USART1_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART1SW << 24U) | RCC_CFGR3_USART1SW_LSE) /*!< LSE oscillator clock used as USART1 clock source */
  302. #define LL_RCC_USART1_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART1SW << 24U) | RCC_CFGR3_USART1SW_HSI) /*!< HSI oscillator clock used as USART1 clock source */
  303. #if defined(RCC_CFGR3_USART2SW)
  304. #define LL_RCC_USART2_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART2SW << 24U) | RCC_CFGR3_USART2SW_PCLK) /*!< PCLK1 clock used as USART2 clock source */
  305. #define LL_RCC_USART2_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART2SW << 24U) | RCC_CFGR3_USART2SW_SYSCLK) /*!< System clock selected as USART2 clock source */
  306. #define LL_RCC_USART2_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART2SW << 24U) | RCC_CFGR3_USART2SW_LSE) /*!< LSE oscillator clock used as USART2 clock source */
  307. #define LL_RCC_USART2_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART2SW << 24U) | RCC_CFGR3_USART2SW_HSI) /*!< HSI oscillator clock used as USART2 clock source */
  308. #endif /* RCC_CFGR3_USART2SW */
  309. #if defined(RCC_CFGR3_USART3SW)
  310. #define LL_RCC_USART3_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART3SW << 24U) | RCC_CFGR3_USART3SW_PCLK) /*!< PCLK1 clock used as USART3 clock source */
  311. #define LL_RCC_USART3_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART3SW << 24U) | RCC_CFGR3_USART3SW_SYSCLK) /*!< System clock selected as USART3 clock source */
  312. #define LL_RCC_USART3_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART3SW << 24U) | RCC_CFGR3_USART3SW_LSE) /*!< LSE oscillator clock used as USART3 clock source */
  313. #define LL_RCC_USART3_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART3SW << 24U) | RCC_CFGR3_USART3SW_HSI) /*!< HSI oscillator clock used as USART3 clock source */
  314. #endif /* RCC_CFGR3_USART3SW */
  315. /**
  316. * @}
  317. */
  318. #if defined(RCC_CFGR3_UART4SW) || defined(RCC_CFGR3_UART5SW)
  319. /** @defgroup RCC_LL_EC_UART4_CLKSOURCE Peripheral UART clock source selection
  320. * @{
  321. */
  322. #define LL_RCC_UART4_CLKSOURCE_PCLK1 (uint32_t)((RCC_CFGR3_UART4SW >> 8U) | RCC_CFGR3_UART4SW_PCLK) /*!< PCLK1 clock used as UART4 clock source */
  323. #define LL_RCC_UART4_CLKSOURCE_SYSCLK (uint32_t)((RCC_CFGR3_UART4SW >> 8U) | RCC_CFGR3_UART4SW_SYSCLK) /*!< System clock selected as UART4 clock source */
  324. #define LL_RCC_UART4_CLKSOURCE_LSE (uint32_t)((RCC_CFGR3_UART4SW >> 8U) | RCC_CFGR3_UART4SW_LSE) /*!< LSE oscillator clock used as UART4 clock source */
  325. #define LL_RCC_UART4_CLKSOURCE_HSI (uint32_t)((RCC_CFGR3_UART4SW >> 8U) | RCC_CFGR3_UART4SW_HSI) /*!< HSI oscillator clock used as UART4 clock source */
  326. #define LL_RCC_UART5_CLKSOURCE_PCLK1 (uint32_t)((RCC_CFGR3_UART5SW >> 8U) | RCC_CFGR3_UART5SW_PCLK) /*!< PCLK1 clock used as UART5 clock source */
  327. #define LL_RCC_UART5_CLKSOURCE_SYSCLK (uint32_t)((RCC_CFGR3_UART5SW >> 8U) | RCC_CFGR3_UART5SW_SYSCLK) /*!< System clock selected as UART5 clock source */
  328. #define LL_RCC_UART5_CLKSOURCE_LSE (uint32_t)((RCC_CFGR3_UART5SW >> 8U) | RCC_CFGR3_UART5SW_LSE) /*!< LSE oscillator clock used as UART5 clock source */
  329. #define LL_RCC_UART5_CLKSOURCE_HSI (uint32_t)((RCC_CFGR3_UART5SW >> 8U) | RCC_CFGR3_UART5SW_HSI) /*!< HSI oscillator clock used as UART5 clock source */
  330. /**
  331. * @}
  332. */
  333. #endif /* RCC_CFGR3_UART4SW || RCC_CFGR3_UART5SW */
  334. /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE Peripheral I2C clock source selection
  335. * @{
  336. */
  337. #define LL_RCC_I2C1_CLKSOURCE_HSI (uint32_t)((RCC_CFGR3_I2C1SW << 24U) | RCC_CFGR3_I2C1SW_HSI) /*!< HSI oscillator clock used as I2C1 clock source */
  338. #define LL_RCC_I2C1_CLKSOURCE_SYSCLK (uint32_t)((RCC_CFGR3_I2C1SW << 24U) | RCC_CFGR3_I2C1SW_SYSCLK) /*!< System clock selected as I2C1 clock source */
  339. #if defined(RCC_CFGR3_I2C2SW)
  340. #define LL_RCC_I2C2_CLKSOURCE_HSI (uint32_t)((RCC_CFGR3_I2C2SW << 24U) | RCC_CFGR3_I2C2SW_HSI) /*!< HSI oscillator clock used as I2C2 clock source */
  341. #define LL_RCC_I2C2_CLKSOURCE_SYSCLK (uint32_t)((RCC_CFGR3_I2C2SW << 24U) | RCC_CFGR3_I2C2SW_SYSCLK) /*!< System clock selected as I2C2 clock source */
  342. #endif /*RCC_CFGR3_I2C2SW*/
  343. #if defined(RCC_CFGR3_I2C3SW)
  344. #define LL_RCC_I2C3_CLKSOURCE_HSI (uint32_t)((RCC_CFGR3_I2C3SW << 24U) | RCC_CFGR3_I2C3SW_HSI) /*!< HSI oscillator clock used as I2C3 clock source */
  345. #define LL_RCC_I2C3_CLKSOURCE_SYSCLK (uint32_t)((RCC_CFGR3_I2C3SW << 24U) | RCC_CFGR3_I2C3SW_SYSCLK) /*!< System clock selected as I2C3 clock source */
  346. #endif /*RCC_CFGR3_I2C3SW*/
  347. /**
  348. * @}
  349. */
  350. #if defined(RCC_CFGR_I2SSRC)
  351. /** @defgroup RCC_LL_EC_I2S_CLKSOURCE Peripheral I2S clock source selection
  352. * @{
  353. */
  354. #define LL_RCC_I2S_CLKSOURCE_SYSCLK RCC_CFGR_I2SSRC_SYSCLK /*!< System clock selected as I2S clock source */
  355. #define LL_RCC_I2S_CLKSOURCE_PIN RCC_CFGR_I2SSRC_EXT /*!< External clock selected as I2S clock source */
  356. /**
  357. * @}
  358. */
  359. #endif /* RCC_CFGR_I2SSRC */
  360. #if defined(RCC_CFGR3_TIMSW)
  361. /** @defgroup RCC_LL_EC_TIM1_CLKSOURCE Peripheral TIM clock source selection
  362. * @{
  363. */
  364. #define LL_RCC_TIM1_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM1SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM1SW_PCLK2) /*!< PCLK2 used as TIM1 clock source */
  365. #define LL_RCC_TIM1_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM1SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM1SW_PLL) /*!< PLL clock used as TIM1 clock source */
  366. #if defined(RCC_CFGR3_TIM8SW)
  367. #define LL_RCC_TIM8_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM8SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM8SW_PCLK2) /*!< PCLK2 used as TIM8 clock source */
  368. #define LL_RCC_TIM8_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM8SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM8SW_PLL) /*!< PLL clock used as TIM8 clock source */
  369. #endif /*RCC_CFGR3_TIM8SW*/
  370. #if defined(RCC_CFGR3_TIM15SW)
  371. #define LL_RCC_TIM15_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM15SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM15SW_PCLK2) /*!< PCLK2 used as TIM15 clock source */
  372. #define LL_RCC_TIM15_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM15SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM15SW_PLL) /*!< PLL clock used as TIM15 clock source */
  373. #endif /*RCC_CFGR3_TIM15SW*/
  374. #if defined(RCC_CFGR3_TIM16SW)
  375. #define LL_RCC_TIM16_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM16SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM16SW_PCLK2) /*!< PCLK2 used as TIM16 clock source */
  376. #define LL_RCC_TIM16_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM16SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM16SW_PLL) /*!< PLL clock used as TIM16 clock source */
  377. #endif /*RCC_CFGR3_TIM16SW*/
  378. #if defined(RCC_CFGR3_TIM17SW)
  379. #define LL_RCC_TIM17_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM17SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM17SW_PCLK2) /*!< PCLK2 used as TIM17 clock source */
  380. #define LL_RCC_TIM17_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM17SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM17SW_PLL) /*!< PLL clock used as TIM17 clock source */
  381. #endif /*RCC_CFGR3_TIM17SW*/
  382. #if defined(RCC_CFGR3_TIM20SW)
  383. #define LL_RCC_TIM20_CLKSOURCE_PCLK2 (uint32_t)(((RCC_POSITION_TIM20SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM20SW_PCLK2) /*!< PCLK2 used as TIM20 clock source */
  384. #define LL_RCC_TIM20_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM20SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM20SW_PLL) /*!< PLL clock used as TIM20 clock source */
  385. #endif /*RCC_CFGR3_TIM20SW*/
  386. #if defined(RCC_CFGR3_TIM2SW)
  387. #define LL_RCC_TIM2_CLKSOURCE_PCLK1 (uint32_t)(((RCC_POSITION_TIM2SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM2SW_PCLK1) /*!< PCLK1 used as TIM2 clock source */
  388. #define LL_RCC_TIM2_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM2SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM2SW_PLL) /*!< PLL clock used as TIM2 clock source */
  389. #endif /*RCC_CFGR3_TIM2SW*/
  390. #if defined(RCC_CFGR3_TIM34SW)
  391. #define LL_RCC_TIM34_CLKSOURCE_PCLK1 (uint32_t)(((RCC_POSITION_TIM34SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM34SW_PCLK1) /*!< PCLK1 used as TIM3/4 clock source */
  392. #define LL_RCC_TIM34_CLKSOURCE_PLL (uint32_t)(((RCC_POSITION_TIM34SW - RCC_POSITION_TIM1SW) << 27U) | RCC_CFGR3_TIM34SW_PLL) /*!< PLL clock used as TIM3/4 clock source */
  393. #endif /*RCC_CFGR3_TIM34SW*/
  394. /**
  395. * @}
  396. */
  397. #endif /* RCC_CFGR3_TIMSW */
  398. #if defined(HRTIM1)
  399. /** @defgroup RCC_LL_EC_HRTIM1_CLKSOURCE Peripheral HRTIM1 clock source selection
  400. * @{
  401. */
  402. #define LL_RCC_HRTIM1_CLKSOURCE_PCLK2 RCC_CFGR3_HRTIM1SW_PCLK2 /*!< PCLK2 used as HRTIM1 clock source */
  403. #define LL_RCC_HRTIM1_CLKSOURCE_PLL RCC_CFGR3_HRTIM1SW_PLL /*!< PLL clock used as HRTIM1 clock source */
  404. /**
  405. * @}
  406. */
  407. #endif /* HRTIM1 */
  408. #if defined(CEC)
  409. /** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection
  410. * @{
  411. */
  412. #define LL_RCC_CEC_CLKSOURCE_HSI_DIV244 RCC_CFGR3_CECSW_HSI_DIV244 /*!< HSI clock divided by 244 selected as HDMI CEC entry clock source */
  413. #define LL_RCC_CEC_CLKSOURCE_LSE RCC_CFGR3_CECSW_LSE /*!< LSE clock selected as HDMI CEC entry clock source */
  414. /**
  415. * @}
  416. */
  417. #endif /* CEC */
  418. #if defined(USB)
  419. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  420. * @{
  421. */
  422. #define LL_RCC_USB_CLKSOURCE_PLL RCC_CFGR_USBPRE_DIV1 /*!< USB prescaler is PLL clock divided by 1 */
  423. #define LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 RCC_CFGR_USBPRE_DIV1_5 /*!< USB prescaler is PLL clock divided by 1.5 */
  424. /**
  425. * @}
  426. */
  427. #endif /* USB */
  428. #if defined(RCC_CFGR_ADCPRE)
  429. /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC clock source selection
  430. * @{
  431. */
  432. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_2 RCC_CFGR_ADCPRE_DIV2 /*!< ADC prescaler PCLK divided by 2 */
  433. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_4 RCC_CFGR_ADCPRE_DIV4 /*!< ADC prescaler PCLK divided by 4 */
  434. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_6 RCC_CFGR_ADCPRE_DIV6 /*!< ADC prescaler PCLK divided by 6 */
  435. #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_8 RCC_CFGR_ADCPRE_DIV8 /*!< ADC prescaler PCLK divided by 8 */
  436. /**
  437. * @}
  438. */
  439. #elif defined(RCC_CFGR2_ADC1PRES)
  440. /** @defgroup RCC_LL_EC_ADC1_CLKSOURCE Peripheral ADC clock source selection
  441. * @{
  442. */
  443. #define LL_RCC_ADC1_CLKSRC_HCLK RCC_CFGR2_ADC1PRES_NO /*!< ADC1 clock disabled, ADC1 can use AHB clock */
  444. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_1 RCC_CFGR2_ADC1PRES_DIV1 /*!< ADC1 PLL clock divided by 1 */
  445. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_2 RCC_CFGR2_ADC1PRES_DIV2 /*!< ADC1 PLL clock divided by 2 */
  446. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_4 RCC_CFGR2_ADC1PRES_DIV4 /*!< ADC1 PLL clock divided by 4 */
  447. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_6 RCC_CFGR2_ADC1PRES_DIV6 /*!< ADC1 PLL clock divided by 6 */
  448. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_8 RCC_CFGR2_ADC1PRES_DIV8 /*!< ADC1 PLL clock divided by 8 */
  449. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_10 RCC_CFGR2_ADC1PRES_DIV10 /*!< ADC1 PLL clock divided by 10 */
  450. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_12 RCC_CFGR2_ADC1PRES_DIV12 /*!< ADC1 PLL clock divided by 12 */
  451. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_16 RCC_CFGR2_ADC1PRES_DIV16 /*!< ADC1 PLL clock divided by 16 */
  452. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_32 RCC_CFGR2_ADC1PRES_DIV32 /*!< ADC1 PLL clock divided by 32 */
  453. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_64 RCC_CFGR2_ADC1PRES_DIV64 /*!< ADC1 PLL clock divided by 64 */
  454. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_128 RCC_CFGR2_ADC1PRES_DIV128 /*!< ADC1 PLL clock divided by 128 */
  455. #define LL_RCC_ADC1_CLKSRC_PLL_DIV_256 RCC_CFGR2_ADC1PRES_DIV256 /*!< ADC1 PLL clock divided by 256 */
  456. /**
  457. * @}
  458. */
  459. #elif defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34)
  460. #if defined(RCC_CFGR2_ADCPRE12) && defined(RCC_CFGR2_ADCPRE34)
  461. /** @defgroup RCC_LL_EC_ADC12_CLKSOURCE Peripheral ADC12 clock source selection
  462. * @{
  463. */
  464. #define LL_RCC_ADC12_CLKSRC_HCLK (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_NO) /*!< ADC12 clock disabled, ADC12 can use AHB clock */
  465. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_1 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV1) /*!< ADC12 PLL clock divided by 1 */
  466. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_2 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV2) /*!< ADC12 PLL clock divided by 2 */
  467. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_4 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV4) /*!< ADC12 PLL clock divided by 4 */
  468. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_6 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV6) /*!< ADC12 PLL clock divided by 6 */
  469. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_8 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV8) /*!< ADC12 PLL clock divided by 8 */
  470. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_10 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV10) /*!< ADC12 PLL clock divided by 10 */
  471. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_12 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV12) /*!< ADC12 PLL clock divided by 12 */
  472. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_16 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV16) /*!< ADC12 PLL clock divided by 16 */
  473. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_32 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV32) /*!< ADC12 PLL clock divided by 32 */
  474. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_64 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV64) /*!< ADC12 PLL clock divided by 64 */
  475. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_128 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV128) /*!< ADC12 PLL clock divided by 128 */
  476. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_256 (uint32_t)((RCC_CFGR2_ADCPRE12 << 16U) | RCC_CFGR2_ADCPRE12_DIV256) /*!< ADC12 PLL clock divided by 256 */
  477. /**
  478. * @}
  479. */
  480. /** @defgroup RCC_LL_EC_ADC34_CLKSOURCE Peripheral ADC34 clock source selection
  481. * @{
  482. */
  483. #define LL_RCC_ADC34_CLKSRC_HCLK (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_NO) /*!< ADC34 clock disabled, ADC34 can use AHB clock */
  484. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_1 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV1) /*!< ADC34 PLL clock divided by 1 */
  485. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_2 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV2) /*!< ADC34 PLL clock divided by 2 */
  486. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_4 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV4) /*!< ADC34 PLL clock divided by 4 */
  487. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_6 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV6) /*!< ADC34 PLL clock divided by 6 */
  488. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_8 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV8) /*!< ADC34 PLL clock divided by 8 */
  489. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_10 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV10) /*!< ADC34 PLL clock divided by 10 */
  490. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_12 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV12) /*!< ADC34 PLL clock divided by 12 */
  491. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_16 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV16) /*!< ADC34 PLL clock divided by 16 */
  492. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_32 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV32) /*!< ADC34 PLL clock divided by 32 */
  493. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_64 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV64) /*!< ADC34 PLL clock divided by 64 */
  494. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_128 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV128) /*!< ADC34 PLL clock divided by 128 */
  495. #define LL_RCC_ADC34_CLKSRC_PLL_DIV_256 (uint32_t)((RCC_CFGR2_ADCPRE34 << 16U) | RCC_CFGR2_ADCPRE34_DIV256) /*!< ADC34 PLL clock divided by 256 */
  496. /**
  497. * @}
  498. */
  499. #else
  500. /** @defgroup RCC_LL_EC_ADC12_CLKSOURCE Peripheral ADC clock source selection
  501. * @{
  502. */
  503. #define LL_RCC_ADC12_CLKSRC_HCLK RCC_CFGR2_ADCPRE12_NO /*!< ADC12 clock disabled, ADC12 can use AHB clock */
  504. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_1 RCC_CFGR2_ADCPRE12_DIV1 /*!< ADC12 PLL clock divided by 1 */
  505. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_2 RCC_CFGR2_ADCPRE12_DIV2 /*!< ADC12 PLL clock divided by 2 */
  506. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_4 RCC_CFGR2_ADCPRE12_DIV4 /*!< ADC12 PLL clock divided by 4 */
  507. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_6 RCC_CFGR2_ADCPRE12_DIV6 /*!< ADC12 PLL clock divided by 6 */
  508. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_8 RCC_CFGR2_ADCPRE12_DIV8 /*!< ADC12 PLL clock divided by 8 */
  509. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_10 RCC_CFGR2_ADCPRE12_DIV10 /*!< ADC12 PLL clock divided by 10 */
  510. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_12 RCC_CFGR2_ADCPRE12_DIV12 /*!< ADC12 PLL clock divided by 12 */
  511. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_16 RCC_CFGR2_ADCPRE12_DIV16 /*!< ADC12 PLL clock divided by 16 */
  512. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_32 RCC_CFGR2_ADCPRE12_DIV32 /*!< ADC12 PLL clock divided by 32 */
  513. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_64 RCC_CFGR2_ADCPRE12_DIV64 /*!< ADC12 PLL clock divided by 64 */
  514. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_128 RCC_CFGR2_ADCPRE12_DIV128 /*!< ADC12 PLL clock divided by 128 */
  515. #define LL_RCC_ADC12_CLKSRC_PLL_DIV_256 RCC_CFGR2_ADCPRE12_DIV256 /*!< ADC12 PLL clock divided by 256 */
  516. /**
  517. * @}
  518. */
  519. #endif /* RCC_CFGR2_ADCPRE12 && RCC_CFGR2_ADCPRE34 */
  520. #endif /* RCC_CFGR_ADCPRE */
  521. #if defined(RCC_CFGR_SDPRE)
  522. /** @defgroup RCC_LL_EC_SDADC_CLKSOURCE_SYSCLK Peripheral SDADC clock source selection
  523. * @{
  524. */
  525. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_1 RCC_CFGR_SDPRE_DIV1 /*!< SDADC CLK not divided */
  526. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_2 RCC_CFGR_SDPRE_DIV2 /*!< SDADC CLK divided by 2 */
  527. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_4 RCC_CFGR_SDPRE_DIV4 /*!< SDADC CLK divided by 4 */
  528. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_6 RCC_CFGR_SDPRE_DIV6 /*!< SDADC CLK divided by 6 */
  529. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_8 RCC_CFGR_SDPRE_DIV8 /*!< SDADC CLK divided by 8 */
  530. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_10 RCC_CFGR_SDPRE_DIV10 /*!< SDADC CLK divided by 10 */
  531. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_12 RCC_CFGR_SDPRE_DIV12 /*!< SDADC CLK divided by 12 */
  532. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_14 RCC_CFGR_SDPRE_DIV14 /*!< SDADC CLK divided by 14 */
  533. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_16 RCC_CFGR_SDPRE_DIV16 /*!< SDADC CLK divided by 16 */
  534. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_20 RCC_CFGR_SDPRE_DIV20 /*!< SDADC CLK divided by 20 */
  535. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_24 RCC_CFGR_SDPRE_DIV24 /*!< SDADC CLK divided by 24 */
  536. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_28 RCC_CFGR_SDPRE_DIV28 /*!< SDADC CLK divided by 28 */
  537. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_32 RCC_CFGR_SDPRE_DIV32 /*!< SDADC CLK divided by 32 */
  538. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_36 RCC_CFGR_SDPRE_DIV36 /*!< SDADC CLK divided by 36 */
  539. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_40 RCC_CFGR_SDPRE_DIV40 /*!< SDADC CLK divided by 40 */
  540. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_44 RCC_CFGR_SDPRE_DIV44 /*!< SDADC CLK divided by 44 */
  541. #define LL_RCC_SDADC_CLKSRC_SYS_DIV_48 RCC_CFGR_SDPRE_DIV48 /*!< SDADC CLK divided by 48 */
  542. /**
  543. * @}
  544. */
  545. #endif /* RCC_CFGR_SDPRE */
  546. /** @defgroup RCC_LL_EC_USART Peripheral USART get clock source
  547. * @{
  548. */
  549. #define LL_RCC_USART1_CLKSOURCE RCC_POSITION_USART1SW /*!< USART1 Clock source selection */
  550. #if defined(RCC_CFGR3_USART2SW)
  551. #define LL_RCC_USART2_CLKSOURCE RCC_POSITION_USART2SW /*!< USART2 Clock source selection */
  552. #endif /* RCC_CFGR3_USART2SW */
  553. #if defined(RCC_CFGR3_USART3SW)
  554. #define LL_RCC_USART3_CLKSOURCE RCC_POSITION_USART3SW /*!< USART3 Clock source selection */
  555. #endif /* RCC_CFGR3_USART3SW */
  556. /**
  557. * @}
  558. */
  559. #if defined(RCC_CFGR3_UART4SW) || defined(RCC_CFGR3_UART5SW)
  560. /** @defgroup RCC_LL_EC_UART Peripheral UART get clock source
  561. * @{
  562. */
  563. #define LL_RCC_UART4_CLKSOURCE RCC_CFGR3_UART4SW /*!< UART4 Clock source selection */
  564. #define LL_RCC_UART5_CLKSOURCE RCC_CFGR3_UART5SW /*!< UART5 Clock source selection */
  565. /**
  566. * @}
  567. */
  568. #endif /* RCC_CFGR3_UART4SW || RCC_CFGR3_UART5SW */
  569. /** @defgroup RCC_LL_EC_I2C Peripheral I2C get clock source
  570. * @{
  571. */
  572. #define LL_RCC_I2C1_CLKSOURCE RCC_CFGR3_I2C1SW /*!< I2C1 Clock source selection */
  573. #if defined(RCC_CFGR3_I2C2SW)
  574. #define LL_RCC_I2C2_CLKSOURCE RCC_CFGR3_I2C2SW /*!< I2C2 Clock source selection */
  575. #endif /*RCC_CFGR3_I2C2SW*/
  576. #if defined(RCC_CFGR3_I2C3SW)
  577. #define LL_RCC_I2C3_CLKSOURCE RCC_CFGR3_I2C3SW /*!< I2C3 Clock source selection */
  578. #endif /*RCC_CFGR3_I2C3SW*/
  579. /**
  580. * @}
  581. */
  582. #if defined(RCC_CFGR_I2SSRC)
  583. /** @defgroup RCC_LL_EC_I2S Peripheral I2S get clock source
  584. * @{
  585. */
  586. #define LL_RCC_I2S_CLKSOURCE RCC_CFGR_I2SSRC /*!< I2S Clock source selection */
  587. /**
  588. * @}
  589. */
  590. #endif /* RCC_CFGR_I2SSRC */
  591. #if defined(RCC_CFGR3_TIMSW)
  592. /** @defgroup RCC_LL_EC_TIM TIMx Peripheral TIM get clock source
  593. * @{
  594. */
  595. #define LL_RCC_TIM1_CLKSOURCE (RCC_POSITION_TIM1SW - RCC_POSITION_TIM1SW) /*!< TIM1 Clock source selection */
  596. #if defined(RCC_CFGR3_TIM2SW)
  597. #define LL_RCC_TIM2_CLKSOURCE (RCC_POSITION_TIM2SW - RCC_POSITION_TIM1SW) /*!< TIM2 Clock source selection */
  598. #endif /*RCC_CFGR3_TIM2SW*/
  599. #if defined(RCC_CFGR3_TIM8SW)
  600. #define LL_RCC_TIM8_CLKSOURCE (RCC_POSITION_TIM8SW - RCC_POSITION_TIM1SW) /*!< TIM8 Clock source selection */
  601. #endif /*RCC_CFGR3_TIM8SW*/
  602. #if defined(RCC_CFGR3_TIM15SW)
  603. #define LL_RCC_TIM15_CLKSOURCE (RCC_POSITION_TIM15SW - RCC_POSITION_TIM1SW) /*!< TIM15 Clock source selection */
  604. #endif /*RCC_CFGR3_TIM15SW*/
  605. #if defined(RCC_CFGR3_TIM16SW)
  606. #define LL_RCC_TIM16_CLKSOURCE (RCC_POSITION_TIM16SW - RCC_POSITION_TIM1SW) /*!< TIM16 Clock source selection */
  607. #endif /*RCC_CFGR3_TIM16SW*/
  608. #if defined(RCC_CFGR3_TIM17SW)
  609. #define LL_RCC_TIM17_CLKSOURCE (RCC_POSITION_TIM17SW - RCC_POSITION_TIM1SW) /*!< TIM17 Clock source selection */
  610. #endif /*RCC_CFGR3_TIM17SW*/
  611. #if defined(RCC_CFGR3_TIM20SW)
  612. #define LL_RCC_TIM20_CLKSOURCE (RCC_POSITION_TIM20SW - RCC_POSITION_TIM1SW) /*!< TIM20 Clock source selection */
  613. #endif /*RCC_CFGR3_TIM20SW*/
  614. #if defined(RCC_CFGR3_TIM34SW)
  615. #define LL_RCC_TIM34_CLKSOURCE (RCC_POSITION_TIM34SW - RCC_POSITION_TIM1SW) /*!< TIM3/4 Clock source selection */
  616. #endif /*RCC_CFGR3_TIM34SW*/
  617. /**
  618. * @}
  619. */
  620. #endif /* RCC_CFGR3_TIMSW */
  621. #if defined(HRTIM1)
  622. /** @defgroup RCC_LL_EC_HRTIM1 Peripheral HRTIM1 get clock source
  623. * @{
  624. */
  625. #define LL_RCC_HRTIM1_CLKSOURCE RCC_CFGR3_HRTIM1SW /*!< HRTIM1 Clock source selection */
  626. /**
  627. * @}
  628. */
  629. #endif /* HRTIM1 */
  630. #if defined(CEC)
  631. /** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source
  632. * @{
  633. */
  634. #define LL_RCC_CEC_CLKSOURCE RCC_CFGR3_CECSW /*!< CEC Clock source selection */
  635. /**
  636. * @}
  637. */
  638. #endif /* CEC */
  639. #if defined(USB)
  640. /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
  641. * @{
  642. */
  643. #define LL_RCC_USB_CLKSOURCE RCC_CFGR_USBPRE /*!< USB Clock source selection */
  644. /**
  645. * @}
  646. */
  647. #endif /* USB */
  648. #if defined(RCC_CFGR_ADCPRE)
  649. /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source
  650. * @{
  651. */
  652. #define LL_RCC_ADC_CLKSOURCE RCC_CFGR_ADCPRE /*!< ADC Clock source selection */
  653. /**
  654. * @}
  655. */
  656. #endif /* RCC_CFGR_ADCPRE */
  657. #if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34)
  658. /** @defgroup RCC_LL_EC_ADCXX Peripheral ADC get clock source
  659. * @{
  660. */
  661. #if defined(RCC_CFGR2_ADC1PRES)
  662. #define LL_RCC_ADC1_CLKSOURCE RCC_CFGR2_ADC1PRES /*!< ADC1 Clock source selection */
  663. #else
  664. #define LL_RCC_ADC12_CLKSOURCE RCC_CFGR2_ADCPRE12 /*!< ADC12 Clock source selection */
  665. #if defined(RCC_CFGR2_ADCPRE34)
  666. #define LL_RCC_ADC34_CLKSOURCE RCC_CFGR2_ADCPRE34 /*!< ADC34 Clock source selection */
  667. #endif /*RCC_CFGR2_ADCPRE34*/
  668. #endif /*RCC_CFGR2_ADC1PRES*/
  669. /**
  670. * @}
  671. */
  672. #endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRE12 || RCC_CFGR2_ADCPRE34 */
  673. #if defined(RCC_CFGR_SDPRE)
  674. /** @defgroup RCC_LL_EC_SDADC Peripheral SDADC get clock source
  675. * @{
  676. */
  677. #define LL_RCC_SDADC_CLKSOURCE RCC_CFGR_SDPRE /*!< SDADC Clock source selection */
  678. /**
  679. * @}
  680. */
  681. #endif /* RCC_CFGR_SDPRE */
  682. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
  683. * @{
  684. */
  685. #define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */
  686. #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */
  687. #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */
  688. #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */
  689. /**
  690. * @}
  691. */
  692. /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
  693. * @{
  694. */
  695. #define LL_RCC_PLL_MUL_2 RCC_CFGR_PLLMUL2 /*!< PLL input clock*2 */
  696. #define LL_RCC_PLL_MUL_3 RCC_CFGR_PLLMUL3 /*!< PLL input clock*3 */
  697. #define LL_RCC_PLL_MUL_4 RCC_CFGR_PLLMUL4 /*!< PLL input clock*4 */
  698. #define LL_RCC_PLL_MUL_5 RCC_CFGR_PLLMUL5 /*!< PLL input clock*5 */
  699. #define LL_RCC_PLL_MUL_6 RCC_CFGR_PLLMUL6 /*!< PLL input clock*6 */
  700. #define LL_RCC_PLL_MUL_7 RCC_CFGR_PLLMUL7 /*!< PLL input clock*7 */
  701. #define LL_RCC_PLL_MUL_8 RCC_CFGR_PLLMUL8 /*!< PLL input clock*8 */
  702. #define LL_RCC_PLL_MUL_9 RCC_CFGR_PLLMUL9 /*!< PLL input clock*9 */
  703. #define LL_RCC_PLL_MUL_10 RCC_CFGR_PLLMUL10 /*!< PLL input clock*10 */
  704. #define LL_RCC_PLL_MUL_11 RCC_CFGR_PLLMUL11 /*!< PLL input clock*11 */
  705. #define LL_RCC_PLL_MUL_12 RCC_CFGR_PLLMUL12 /*!< PLL input clock*12 */
  706. #define LL_RCC_PLL_MUL_13 RCC_CFGR_PLLMUL13 /*!< PLL input clock*13 */
  707. #define LL_RCC_PLL_MUL_14 RCC_CFGR_PLLMUL14 /*!< PLL input clock*14 */
  708. #define LL_RCC_PLL_MUL_15 RCC_CFGR_PLLMUL15 /*!< PLL input clock*15 */
  709. #define LL_RCC_PLL_MUL_16 RCC_CFGR_PLLMUL16 /*!< PLL input clock*16 */
  710. /**
  711. * @}
  712. */
  713. /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
  714. * @{
  715. */
  716. #define LL_RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE_PREDIV /*!< HSE/PREDIV clock selected as PLL entry clock source */
  717. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  718. #define LL_RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV /*!< HSI/PREDIV clock selected as PLL entry clock source */
  719. #else
  720. #define LL_RCC_PLLSOURCE_HSI_DIV_2 RCC_CFGR_PLLSRC_HSI_DIV2 /*!< HSI clock divided by 2 selected as PLL entry clock source */
  721. #define LL_RCC_PLLSOURCE_HSE_DIV_1 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV1) /*!< HSE clock selected as PLL entry clock source */
  722. #define LL_RCC_PLLSOURCE_HSE_DIV_2 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV2) /*!< HSE/2 clock selected as PLL entry clock source */
  723. #define LL_RCC_PLLSOURCE_HSE_DIV_3 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV3) /*!< HSE/3 clock selected as PLL entry clock source */
  724. #define LL_RCC_PLLSOURCE_HSE_DIV_4 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV4) /*!< HSE/4 clock selected as PLL entry clock source */
  725. #define LL_RCC_PLLSOURCE_HSE_DIV_5 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV5) /*!< HSE/5 clock selected as PLL entry clock source */
  726. #define LL_RCC_PLLSOURCE_HSE_DIV_6 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV6) /*!< HSE/6 clock selected as PLL entry clock source */
  727. #define LL_RCC_PLLSOURCE_HSE_DIV_7 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV7) /*!< HSE/7 clock selected as PLL entry clock source */
  728. #define LL_RCC_PLLSOURCE_HSE_DIV_8 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV8) /*!< HSE/8 clock selected as PLL entry clock source */
  729. #define LL_RCC_PLLSOURCE_HSE_DIV_9 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV9) /*!< HSE/9 clock selected as PLL entry clock source */
  730. #define LL_RCC_PLLSOURCE_HSE_DIV_10 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV10) /*!< HSE/10 clock selected as PLL entry clock source */
  731. #define LL_RCC_PLLSOURCE_HSE_DIV_11 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV11) /*!< HSE/11 clock selected as PLL entry clock source */
  732. #define LL_RCC_PLLSOURCE_HSE_DIV_12 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV12) /*!< HSE/12 clock selected as PLL entry clock source */
  733. #define LL_RCC_PLLSOURCE_HSE_DIV_13 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV13) /*!< HSE/13 clock selected as PLL entry clock source */
  734. #define LL_RCC_PLLSOURCE_HSE_DIV_14 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV14) /*!< HSE/14 clock selected as PLL entry clock source */
  735. #define LL_RCC_PLLSOURCE_HSE_DIV_15 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV15) /*!< HSE/15 clock selected as PLL entry clock source */
  736. #define LL_RCC_PLLSOURCE_HSE_DIV_16 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV16) /*!< HSE/16 clock selected as PLL entry clock source */
  737. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  738. /**
  739. * @}
  740. */
  741. /** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor
  742. * @{
  743. */
  744. #define LL_RCC_PREDIV_DIV_1 RCC_CFGR2_PREDIV_DIV1 /*!< PREDIV input clock not divided */
  745. #define LL_RCC_PREDIV_DIV_2 RCC_CFGR2_PREDIV_DIV2 /*!< PREDIV input clock divided by 2 */
  746. #define LL_RCC_PREDIV_DIV_3 RCC_CFGR2_PREDIV_DIV3 /*!< PREDIV input clock divided by 3 */
  747. #define LL_RCC_PREDIV_DIV_4 RCC_CFGR2_PREDIV_DIV4 /*!< PREDIV input clock divided by 4 */
  748. #define LL_RCC_PREDIV_DIV_5 RCC_CFGR2_PREDIV_DIV5 /*!< PREDIV input clock divided by 5 */
  749. #define LL_RCC_PREDIV_DIV_6 RCC_CFGR2_PREDIV_DIV6 /*!< PREDIV input clock divided by 6 */
  750. #define LL_RCC_PREDIV_DIV_7 RCC_CFGR2_PREDIV_DIV7 /*!< PREDIV input clock divided by 7 */
  751. #define LL_RCC_PREDIV_DIV_8 RCC_CFGR2_PREDIV_DIV8 /*!< PREDIV input clock divided by 8 */
  752. #define LL_RCC_PREDIV_DIV_9 RCC_CFGR2_PREDIV_DIV9 /*!< PREDIV input clock divided by 9 */
  753. #define LL_RCC_PREDIV_DIV_10 RCC_CFGR2_PREDIV_DIV10 /*!< PREDIV input clock divided by 10 */
  754. #define LL_RCC_PREDIV_DIV_11 RCC_CFGR2_PREDIV_DIV11 /*!< PREDIV input clock divided by 11 */
  755. #define LL_RCC_PREDIV_DIV_12 RCC_CFGR2_PREDIV_DIV12 /*!< PREDIV input clock divided by 12 */
  756. #define LL_RCC_PREDIV_DIV_13 RCC_CFGR2_PREDIV_DIV13 /*!< PREDIV input clock divided by 13 */
  757. #define LL_RCC_PREDIV_DIV_14 RCC_CFGR2_PREDIV_DIV14 /*!< PREDIV input clock divided by 14 */
  758. #define LL_RCC_PREDIV_DIV_15 RCC_CFGR2_PREDIV_DIV15 /*!< PREDIV input clock divided by 15 */
  759. #define LL_RCC_PREDIV_DIV_16 RCC_CFGR2_PREDIV_DIV16 /*!< PREDIV input clock divided by 16 */
  760. /**
  761. * @}
  762. */
  763. /**
  764. * @}
  765. */
  766. /* Exported macro ------------------------------------------------------------*/
  767. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  768. * @{
  769. */
  770. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  771. * @{
  772. */
  773. /**
  774. * @brief Write a value in RCC register
  775. * @param __REG__ Register to be written
  776. * @param __VALUE__ Value to be written in the register
  777. * @retval None
  778. */
  779. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
  780. /**
  781. * @brief Read a value in RCC register
  782. * @param __REG__ Register to be read
  783. * @retval Register value
  784. */
  785. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  786. /**
  787. * @}
  788. */
  789. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  790. * @{
  791. */
  792. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  793. /**
  794. * @brief Helper macro to calculate the PLLCLK frequency
  795. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetMultiplicator()
  796. * , @ref LL_RCC_PLL_GetPrediv());
  797. * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI)
  798. * @param __PLLMUL__ This parameter can be one of the following values:
  799. * @arg @ref LL_RCC_PLL_MUL_2
  800. * @arg @ref LL_RCC_PLL_MUL_3
  801. * @arg @ref LL_RCC_PLL_MUL_4
  802. * @arg @ref LL_RCC_PLL_MUL_5
  803. * @arg @ref LL_RCC_PLL_MUL_6
  804. * @arg @ref LL_RCC_PLL_MUL_7
  805. * @arg @ref LL_RCC_PLL_MUL_8
  806. * @arg @ref LL_RCC_PLL_MUL_9
  807. * @arg @ref LL_RCC_PLL_MUL_10
  808. * @arg @ref LL_RCC_PLL_MUL_11
  809. * @arg @ref LL_RCC_PLL_MUL_12
  810. * @arg @ref LL_RCC_PLL_MUL_13
  811. * @arg @ref LL_RCC_PLL_MUL_14
  812. * @arg @ref LL_RCC_PLL_MUL_15
  813. * @arg @ref LL_RCC_PLL_MUL_16
  814. * @param __PLLPREDIV__ This parameter can be one of the following values:
  815. * @arg @ref LL_RCC_PREDIV_DIV_1
  816. * @arg @ref LL_RCC_PREDIV_DIV_2
  817. * @arg @ref LL_RCC_PREDIV_DIV_3
  818. * @arg @ref LL_RCC_PREDIV_DIV_4
  819. * @arg @ref LL_RCC_PREDIV_DIV_5
  820. * @arg @ref LL_RCC_PREDIV_DIV_6
  821. * @arg @ref LL_RCC_PREDIV_DIV_7
  822. * @arg @ref LL_RCC_PREDIV_DIV_8
  823. * @arg @ref LL_RCC_PREDIV_DIV_9
  824. * @arg @ref LL_RCC_PREDIV_DIV_10
  825. * @arg @ref LL_RCC_PREDIV_DIV_11
  826. * @arg @ref LL_RCC_PREDIV_DIV_12
  827. * @arg @ref LL_RCC_PREDIV_DIV_13
  828. * @arg @ref LL_RCC_PREDIV_DIV_14
  829. * @arg @ref LL_RCC_PREDIV_DIV_15
  830. * @arg @ref LL_RCC_PREDIV_DIV_16
  831. * @retval PLL clock frequency (in Hz)
  832. */
  833. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__, __PLLPREDIV__) \
  834. (((__INPUTFREQ__) / ((((__PLLPREDIV__) & RCC_CFGR2_PREDIV) + 1U))) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  835. #else
  836. /**
  837. * @brief Helper macro to calculate the PLLCLK frequency
  838. * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator());
  839. * @param __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv / HSI div 2)
  840. * @param __PLLMUL__ This parameter can be one of the following values:
  841. * @arg @ref LL_RCC_PLL_MUL_2
  842. * @arg @ref LL_RCC_PLL_MUL_3
  843. * @arg @ref LL_RCC_PLL_MUL_4
  844. * @arg @ref LL_RCC_PLL_MUL_5
  845. * @arg @ref LL_RCC_PLL_MUL_6
  846. * @arg @ref LL_RCC_PLL_MUL_7
  847. * @arg @ref LL_RCC_PLL_MUL_8
  848. * @arg @ref LL_RCC_PLL_MUL_9
  849. * @arg @ref LL_RCC_PLL_MUL_10
  850. * @arg @ref LL_RCC_PLL_MUL_11
  851. * @arg @ref LL_RCC_PLL_MUL_12
  852. * @arg @ref LL_RCC_PLL_MUL_13
  853. * @arg @ref LL_RCC_PLL_MUL_14
  854. * @arg @ref LL_RCC_PLL_MUL_15
  855. * @arg @ref LL_RCC_PLL_MUL_16
  856. * @retval PLL clock frequency (in Hz)
  857. */
  858. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \
  859. ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  860. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  861. /**
  862. * @brief Helper macro to calculate the HCLK frequency
  863. * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
  864. * ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
  865. * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
  866. * @param __AHBPRESCALER__ This parameter can be one of the following values:
  867. * @arg @ref LL_RCC_SYSCLK_DIV_1
  868. * @arg @ref LL_RCC_SYSCLK_DIV_2
  869. * @arg @ref LL_RCC_SYSCLK_DIV_4
  870. * @arg @ref LL_RCC_SYSCLK_DIV_8
  871. * @arg @ref LL_RCC_SYSCLK_DIV_16
  872. * @arg @ref LL_RCC_SYSCLK_DIV_64
  873. * @arg @ref LL_RCC_SYSCLK_DIV_128
  874. * @arg @ref LL_RCC_SYSCLK_DIV_256
  875. * @arg @ref LL_RCC_SYSCLK_DIV_512
  876. * @retval HCLK clock frequency (in Hz)
  877. */
  878. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos])
  879. /**
  880. * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
  881. * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
  882. * ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
  883. * @param __HCLKFREQ__ HCLK frequency
  884. * @param __APB1PRESCALER__: This parameter can be one of the following values:
  885. * @arg @ref LL_RCC_APB1_DIV_1
  886. * @arg @ref LL_RCC_APB1_DIV_2
  887. * @arg @ref LL_RCC_APB1_DIV_4
  888. * @arg @ref LL_RCC_APB1_DIV_8
  889. * @arg @ref LL_RCC_APB1_DIV_16
  890. * @retval PCLK1 clock frequency (in Hz)
  891. */
  892. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos])
  893. /**
  894. * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
  895. * @note: __APB2PRESCALER__ be retrieved by @ref LL_RCC_GetAPB2Prescaler
  896. * ex: __LL_RCC_CALC_PCLK2_FREQ(LL_RCC_GetAPB2Prescaler())
  897. * @param __HCLKFREQ__ HCLK frequency
  898. * @param __APB2PRESCALER__: This parameter can be one of the following values:
  899. * @arg @ref LL_RCC_APB2_DIV_1
  900. * @arg @ref LL_RCC_APB2_DIV_2
  901. * @arg @ref LL_RCC_APB2_DIV_4
  902. * @arg @ref LL_RCC_APB2_DIV_8
  903. * @arg @ref LL_RCC_APB2_DIV_16
  904. * @retval PCLK2 clock frequency (in Hz)
  905. */
  906. #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos])
  907. /**
  908. * @}
  909. */
  910. /**
  911. * @}
  912. */
  913. /* Exported functions --------------------------------------------------------*/
  914. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  915. * @{
  916. */
  917. /** @defgroup RCC_LL_EF_HSE HSE
  918. * @{
  919. */
  920. /**
  921. * @brief Enable the Clock Security System.
  922. * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS
  923. * @retval None
  924. */
  925. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  926. {
  927. SET_BIT(RCC->CR, RCC_CR_CSSON);
  928. }
  929. /**
  930. * @brief Disable the Clock Security System.
  931. * @note Cannot be disabled in HSE is ready (only by hardware)
  932. * @rmtoll CR CSSON LL_RCC_HSE_DisableCSS
  933. * @retval None
  934. */
  935. __STATIC_INLINE void LL_RCC_HSE_DisableCSS(void)
  936. {
  937. CLEAR_BIT(RCC->CR, RCC_CR_CSSON);
  938. }
  939. /**
  940. * @brief Enable HSE external oscillator (HSE Bypass)
  941. * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
  942. * @retval None
  943. */
  944. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  945. {
  946. SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  947. }
  948. /**
  949. * @brief Disable HSE external oscillator (HSE Bypass)
  950. * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
  951. * @retval None
  952. */
  953. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  954. {
  955. CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  956. }
  957. /**
  958. * @brief Enable HSE crystal oscillator (HSE ON)
  959. * @rmtoll CR HSEON LL_RCC_HSE_Enable
  960. * @retval None
  961. */
  962. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  963. {
  964. SET_BIT(RCC->CR, RCC_CR_HSEON);
  965. }
  966. /**
  967. * @brief Disable HSE crystal oscillator (HSE ON)
  968. * @rmtoll CR HSEON LL_RCC_HSE_Disable
  969. * @retval None
  970. */
  971. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  972. {
  973. CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  974. }
  975. /**
  976. * @brief Check if HSE oscillator Ready
  977. * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
  978. * @retval State of bit (1 or 0).
  979. */
  980. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  981. {
  982. return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
  983. }
  984. /**
  985. * @}
  986. */
  987. /** @defgroup RCC_LL_EF_HSI HSI
  988. * @{
  989. */
  990. /**
  991. * @brief Enable HSI oscillator
  992. * @rmtoll CR HSION LL_RCC_HSI_Enable
  993. * @retval None
  994. */
  995. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  996. {
  997. SET_BIT(RCC->CR, RCC_CR_HSION);
  998. }
  999. /**
  1000. * @brief Disable HSI oscillator
  1001. * @rmtoll CR HSION LL_RCC_HSI_Disable
  1002. * @retval None
  1003. */
  1004. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  1005. {
  1006. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  1007. }
  1008. /**
  1009. * @brief Check if HSI clock is ready
  1010. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  1011. * @retval State of bit (1 or 0).
  1012. */
  1013. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  1014. {
  1015. return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
  1016. }
  1017. /**
  1018. * @brief Get HSI Calibration value
  1019. * @note When HSITRIM is written, HSICAL is updated with the sum of
  1020. * HSITRIM and the factory trim value
  1021. * @rmtoll CR HSICAL LL_RCC_HSI_GetCalibration
  1022. * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  1023. */
  1024. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  1025. {
  1026. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos);
  1027. }
  1028. /**
  1029. * @brief Set HSI Calibration trimming
  1030. * @note user-programmable trimming value that is added to the HSICAL
  1031. * @note Default value is 16, which, when added to the HSICAL value,
  1032. * should trim the HSI to 16 MHz +/- 1 %
  1033. * @rmtoll CR HSITRIM LL_RCC_HSI_SetCalibTrimming
  1034. * @param Value between Min_Data = 0x00 and Max_Data = 0x1F
  1035. * @retval None
  1036. */
  1037. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  1038. {
  1039. MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos);
  1040. }
  1041. /**
  1042. * @brief Get HSI Calibration trimming
  1043. * @rmtoll CR HSITRIM LL_RCC_HSI_GetCalibTrimming
  1044. * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  1045. */
  1046. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  1047. {
  1048. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
  1049. }
  1050. /**
  1051. * @}
  1052. */
  1053. /** @defgroup RCC_LL_EF_LSE LSE
  1054. * @{
  1055. */
  1056. /**
  1057. * @brief Enable Low Speed External (LSE) crystal.
  1058. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  1059. * @retval None
  1060. */
  1061. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  1062. {
  1063. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  1064. }
  1065. /**
  1066. * @brief Disable Low Speed External (LSE) crystal.
  1067. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  1068. * @retval None
  1069. */
  1070. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  1071. {
  1072. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  1073. }
  1074. /**
  1075. * @brief Enable external clock source (LSE bypass).
  1076. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  1077. * @retval None
  1078. */
  1079. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  1080. {
  1081. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  1082. }
  1083. /**
  1084. * @brief Disable external clock source (LSE bypass).
  1085. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  1086. * @retval None
  1087. */
  1088. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  1089. {
  1090. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  1091. }
  1092. /**
  1093. * @brief Set LSE oscillator drive capability
  1094. * @note The oscillator is in Xtal mode when it is not in bypass mode.
  1095. * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability
  1096. * @param LSEDrive This parameter can be one of the following values:
  1097. * @arg @ref LL_RCC_LSEDRIVE_LOW
  1098. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1099. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1100. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  1101. * @retval None
  1102. */
  1103. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  1104. {
  1105. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
  1106. }
  1107. /**
  1108. * @brief Get LSE oscillator drive capability
  1109. * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability
  1110. * @retval Returned value can be one of the following values:
  1111. * @arg @ref LL_RCC_LSEDRIVE_LOW
  1112. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1113. * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1114. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  1115. */
  1116. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  1117. {
  1118. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
  1119. }
  1120. /**
  1121. * @brief Check if LSE oscillator Ready
  1122. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  1123. * @retval State of bit (1 or 0).
  1124. */
  1125. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  1126. {
  1127. return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
  1128. }
  1129. /**
  1130. * @}
  1131. */
  1132. /** @defgroup RCC_LL_EF_LSI LSI
  1133. * @{
  1134. */
  1135. /**
  1136. * @brief Enable LSI Oscillator
  1137. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  1138. * @retval None
  1139. */
  1140. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  1141. {
  1142. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  1143. }
  1144. /**
  1145. * @brief Disable LSI Oscillator
  1146. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  1147. * @retval None
  1148. */
  1149. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  1150. {
  1151. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  1152. }
  1153. /**
  1154. * @brief Check if LSI is Ready
  1155. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  1156. * @retval State of bit (1 or 0).
  1157. */
  1158. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  1159. {
  1160. return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
  1161. }
  1162. /**
  1163. * @}
  1164. */
  1165. /** @defgroup RCC_LL_EF_System System
  1166. * @{
  1167. */
  1168. /**
  1169. * @brief Configure the system clock source
  1170. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  1171. * @param Source This parameter can be one of the following values:
  1172. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  1173. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  1174. * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
  1175. * @retval None
  1176. */
  1177. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  1178. {
  1179. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  1180. }
  1181. /**
  1182. * @brief Get the system clock source
  1183. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  1184. * @retval Returned value can be one of the following values:
  1185. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  1186. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  1187. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
  1188. */
  1189. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  1190. {
  1191. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  1192. }
  1193. /**
  1194. * @brief Set AHB prescaler
  1195. * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
  1196. * @param Prescaler This parameter can be one of the following values:
  1197. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1198. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1199. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1200. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1201. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1202. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1203. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1204. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1205. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1206. * @retval None
  1207. */
  1208. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  1209. {
  1210. MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  1211. }
  1212. /**
  1213. * @brief Set APB1 prescaler
  1214. * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler
  1215. * @param Prescaler This parameter can be one of the following values:
  1216. * @arg @ref LL_RCC_APB1_DIV_1
  1217. * @arg @ref LL_RCC_APB1_DIV_2
  1218. * @arg @ref LL_RCC_APB1_DIV_4
  1219. * @arg @ref LL_RCC_APB1_DIV_8
  1220. * @arg @ref LL_RCC_APB1_DIV_16
  1221. * @retval None
  1222. */
  1223. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  1224. {
  1225. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
  1226. }
  1227. /**
  1228. * @brief Set APB2 prescaler
  1229. * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler
  1230. * @param Prescaler This parameter can be one of the following values:
  1231. * @arg @ref LL_RCC_APB2_DIV_1
  1232. * @arg @ref LL_RCC_APB2_DIV_2
  1233. * @arg @ref LL_RCC_APB2_DIV_4
  1234. * @arg @ref LL_RCC_APB2_DIV_8
  1235. * @arg @ref LL_RCC_APB2_DIV_16
  1236. * @retval None
  1237. */
  1238. __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
  1239. {
  1240. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
  1241. }
  1242. /**
  1243. * @brief Get AHB prescaler
  1244. * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
  1245. * @retval Returned value can be one of the following values:
  1246. * @arg @ref LL_RCC_SYSCLK_DIV_1
  1247. * @arg @ref LL_RCC_SYSCLK_DIV_2
  1248. * @arg @ref LL_RCC_SYSCLK_DIV_4
  1249. * @arg @ref LL_RCC_SYSCLK_DIV_8
  1250. * @arg @ref LL_RCC_SYSCLK_DIV_16
  1251. * @arg @ref LL_RCC_SYSCLK_DIV_64
  1252. * @arg @ref LL_RCC_SYSCLK_DIV_128
  1253. * @arg @ref LL_RCC_SYSCLK_DIV_256
  1254. * @arg @ref LL_RCC_SYSCLK_DIV_512
  1255. */
  1256. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  1257. {
  1258. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  1259. }
  1260. /**
  1261. * @brief Get APB1 prescaler
  1262. * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler
  1263. * @retval Returned value can be one of the following values:
  1264. * @arg @ref LL_RCC_APB1_DIV_1
  1265. * @arg @ref LL_RCC_APB1_DIV_2
  1266. * @arg @ref LL_RCC_APB1_DIV_4
  1267. * @arg @ref LL_RCC_APB1_DIV_8
  1268. * @arg @ref LL_RCC_APB1_DIV_16
  1269. */
  1270. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  1271. {
  1272. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
  1273. }
  1274. /**
  1275. * @brief Get APB2 prescaler
  1276. * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler
  1277. * @retval Returned value can be one of the following values:
  1278. * @arg @ref LL_RCC_APB2_DIV_1
  1279. * @arg @ref LL_RCC_APB2_DIV_2
  1280. * @arg @ref LL_RCC_APB2_DIV_4
  1281. * @arg @ref LL_RCC_APB2_DIV_8
  1282. * @arg @ref LL_RCC_APB2_DIV_16
  1283. */
  1284. __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
  1285. {
  1286. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
  1287. }
  1288. /**
  1289. * @}
  1290. */
  1291. /** @defgroup RCC_LL_EF_MCO MCO
  1292. * @{
  1293. */
  1294. /**
  1295. * @brief Configure MCOx
  1296. * @rmtoll CFGR MCO LL_RCC_ConfigMCO\n
  1297. * CFGR MCOPRE LL_RCC_ConfigMCO\n
  1298. * CFGR PLLNODIV LL_RCC_ConfigMCO
  1299. * @param MCOxSource This parameter can be one of the following values:
  1300. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  1301. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  1302. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  1303. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  1304. * @arg @ref LL_RCC_MCO1SOURCE_LSI
  1305. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  1306. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK (*)
  1307. * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2
  1308. *
  1309. * (*) value not defined in all devices
  1310. * @param MCOxPrescaler This parameter can be one of the following values:
  1311. * @arg @ref LL_RCC_MCO1_DIV_1
  1312. * @arg @ref LL_RCC_MCO1_DIV_2 (*)
  1313. * @arg @ref LL_RCC_MCO1_DIV_4 (*)
  1314. * @arg @ref LL_RCC_MCO1_DIV_8 (*)
  1315. * @arg @ref LL_RCC_MCO1_DIV_16 (*)
  1316. * @arg @ref LL_RCC_MCO1_DIV_32 (*)
  1317. * @arg @ref LL_RCC_MCO1_DIV_64 (*)
  1318. * @arg @ref LL_RCC_MCO1_DIV_128 (*)
  1319. *
  1320. * (*) value not defined in all devices
  1321. * @retval None
  1322. */
  1323. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  1324. {
  1325. #if defined(RCC_CFGR_MCOPRE)
  1326. #if defined(RCC_CFGR_PLLNODIV)
  1327. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE | RCC_CFGR_PLLNODIV, MCOxSource | MCOxPrescaler);
  1328. #else
  1329. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
  1330. #endif /* RCC_CFGR_PLLNODIV */
  1331. #else
  1332. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource);
  1333. #endif /* RCC_CFGR_MCOPRE */
  1334. }
  1335. /**
  1336. * @}
  1337. */
  1338. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1339. * @{
  1340. */
  1341. /**
  1342. * @brief Configure USARTx clock source
  1343. * @rmtoll CFGR3 USART1SW LL_RCC_SetUSARTClockSource\n
  1344. * CFGR3 USART2SW LL_RCC_SetUSARTClockSource\n
  1345. * CFGR3 USART3SW LL_RCC_SetUSARTClockSource
  1346. * @param USARTxSource This parameter can be one of the following values:
  1347. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1 (*)
  1348. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2 (*)
  1349. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1350. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1351. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1352. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1353. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1354. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1355. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1356. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1357. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1358. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1359. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1360. *
  1361. * (*) value not defined in all devices.
  1362. * @retval None
  1363. */
  1364. __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
  1365. {
  1366. MODIFY_REG(RCC->CFGR3, (RCC_CFGR3_USART1SW << ((USARTxSource & 0xFF000000U) >> 24U)), (USARTxSource & 0x00FFFFFFU));
  1367. }
  1368. #if defined(RCC_CFGR3_UART4SW) || defined(RCC_CFGR3_UART5SW)
  1369. /**
  1370. * @brief Configure UARTx clock source
  1371. * @rmtoll CFGR3 UART4SW LL_RCC_SetUARTClockSource\n
  1372. * CFGR3 UART5SW LL_RCC_SetUARTClockSource
  1373. * @param UARTxSource This parameter can be one of the following values:
  1374. * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1
  1375. * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK
  1376. * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE
  1377. * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI
  1378. * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1
  1379. * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK
  1380. * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE
  1381. * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI
  1382. * @retval None
  1383. */
  1384. __STATIC_INLINE void LL_RCC_SetUARTClockSource(uint32_t UARTxSource)
  1385. {
  1386. MODIFY_REG(RCC->CFGR3, ((UARTxSource & 0x0000FFFFU) << 8U), (UARTxSource & (RCC_CFGR3_UART4SW | RCC_CFGR3_UART5SW)));
  1387. }
  1388. #endif /* RCC_CFGR3_UART4SW || RCC_CFGR3_UART5SW */
  1389. /**
  1390. * @brief Configure I2Cx clock source
  1391. * @rmtoll CFGR3 I2C1SW LL_RCC_SetI2CClockSource\n
  1392. * CFGR3 I2C2SW LL_RCC_SetI2CClockSource\n
  1393. * CFGR3 I2C3SW LL_RCC_SetI2CClockSource
  1394. * @param I2CxSource This parameter can be one of the following values:
  1395. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1396. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1397. * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI (*)
  1398. * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK (*)
  1399. * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI (*)
  1400. * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK (*)
  1401. *
  1402. * (*) value not defined in all devices.
  1403. * @retval None
  1404. */
  1405. __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
  1406. {
  1407. MODIFY_REG(RCC->CFGR3, ((I2CxSource & 0xFF000000U) >> 24U), (I2CxSource & 0x00FFFFFFU));
  1408. }
  1409. #if defined(RCC_CFGR_I2SSRC)
  1410. /**
  1411. * @brief Configure I2Sx clock source
  1412. * @rmtoll CFGR I2SSRC LL_RCC_SetI2SClockSource
  1413. * @param I2SxSource This parameter can be one of the following values:
  1414. * @arg @ref LL_RCC_I2S_CLKSOURCE_SYSCLK
  1415. * @arg @ref LL_RCC_I2S_CLKSOURCE_PIN
  1416. * @retval None
  1417. */
  1418. __STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t I2SxSource)
  1419. {
  1420. MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, I2SxSource);
  1421. }
  1422. #endif /* RCC_CFGR_I2SSRC */
  1423. #if defined(RCC_CFGR3_TIMSW)
  1424. /**
  1425. * @brief Configure TIMx clock source
  1426. * @rmtoll CFGR3 TIM1SW LL_RCC_SetTIMClockSource\n
  1427. * CFGR3 TIM8SW LL_RCC_SetTIMClockSource\n
  1428. * CFGR3 TIM15SW LL_RCC_SetTIMClockSource\n
  1429. * CFGR3 TIM16SW LL_RCC_SetTIMClockSource\n
  1430. * CFGR3 TIM17SW LL_RCC_SetTIMClockSource\n
  1431. * CFGR3 TIM20SW LL_RCC_SetTIMClockSource\n
  1432. * CFGR3 TIM2SW LL_RCC_SetTIMClockSource\n
  1433. * CFGR3 TIM34SW LL_RCC_SetTIMClockSource
  1434. * @param TIMxSource This parameter can be one of the following values:
  1435. * @arg @ref LL_RCC_TIM1_CLKSOURCE_PCLK2
  1436. * @arg @ref LL_RCC_TIM1_CLKSOURCE_PLL
  1437. * @arg @ref LL_RCC_TIM8_CLKSOURCE_PCLK2 (*)
  1438. * @arg @ref LL_RCC_TIM8_CLKSOURCE_PLL (*)
  1439. * @arg @ref LL_RCC_TIM15_CLKSOURCE_PCLK2 (*)
  1440. * @arg @ref LL_RCC_TIM15_CLKSOURCE_PLL (*)
  1441. * @arg @ref LL_RCC_TIM16_CLKSOURCE_PCLK2 (*)
  1442. * @arg @ref LL_RCC_TIM16_CLKSOURCE_PLL (*)
  1443. * @arg @ref LL_RCC_TIM17_CLKSOURCE_PCLK2 (*)
  1444. * @arg @ref LL_RCC_TIM17_CLKSOURCE_PLL (*)
  1445. * @arg @ref LL_RCC_TIM20_CLKSOURCE_PCLK2 (*)
  1446. * @arg @ref LL_RCC_TIM20_CLKSOURCE_PLL (*)
  1447. * @arg @ref LL_RCC_TIM2_CLKSOURCE_PCLK1 (*)
  1448. * @arg @ref LL_RCC_TIM2_CLKSOURCE_PLL (*)
  1449. * @arg @ref LL_RCC_TIM34_CLKSOURCE_PCLK1 (*)
  1450. * @arg @ref LL_RCC_TIM34_CLKSOURCE_PLL (*)
  1451. *
  1452. * (*) value not defined in all devices.
  1453. * @retval None
  1454. */
  1455. __STATIC_INLINE void LL_RCC_SetTIMClockSource(uint32_t TIMxSource)
  1456. {
  1457. MODIFY_REG(RCC->CFGR3, (RCC_CFGR3_TIM1SW << (TIMxSource >> 27U)), (TIMxSource & 0x03FFFFFFU));
  1458. }
  1459. #endif /* RCC_CFGR3_TIMSW */
  1460. #if defined(HRTIM1)
  1461. /**
  1462. * @brief Configure HRTIMx clock source
  1463. * @rmtoll CFGR3 HRTIMSW LL_RCC_SetHRTIMClockSource
  1464. * @param HRTIMxSource This parameter can be one of the following values:
  1465. * @arg @ref LL_RCC_HRTIM1_CLKSOURCE_PCLK2
  1466. * @arg @ref LL_RCC_HRTIM1_CLKSOURCE_PLL
  1467. * @retval None
  1468. */
  1469. __STATIC_INLINE void LL_RCC_SetHRTIMClockSource(uint32_t HRTIMxSource)
  1470. {
  1471. MODIFY_REG(RCC->CFGR3, RCC_CFGR3_HRTIMSW, HRTIMxSource);
  1472. }
  1473. #endif /* HRTIM1 */
  1474. #if defined(CEC)
  1475. /**
  1476. * @brief Configure CEC clock source
  1477. * @rmtoll CFGR3 CECSW LL_RCC_SetCECClockSource
  1478. * @param CECxSource This parameter can be one of the following values:
  1479. * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1480. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1481. * @retval None
  1482. */
  1483. __STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t CECxSource)
  1484. {
  1485. MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, CECxSource);
  1486. }
  1487. #endif /* CEC */
  1488. #if defined(USB)
  1489. /**
  1490. * @brief Configure USB clock source
  1491. * @rmtoll CFGR USBPRE LL_RCC_SetUSBClockSource
  1492. * @param USBxSource This parameter can be one of the following values:
  1493. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1494. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5
  1495. * @retval None
  1496. */
  1497. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
  1498. {
  1499. MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, USBxSource);
  1500. }
  1501. #endif /* USB */
  1502. #if defined(RCC_CFGR_ADCPRE)
  1503. /**
  1504. * @brief Configure ADC clock source
  1505. * @rmtoll CFGR ADCPRE LL_RCC_SetADCClockSource
  1506. * @param ADCxSource This parameter can be one of the following values:
  1507. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
  1508. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
  1509. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
  1510. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
  1511. * @retval None
  1512. */
  1513. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
  1514. {
  1515. MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, ADCxSource);
  1516. }
  1517. #elif defined(RCC_CFGR2_ADC1PRES)
  1518. /**
  1519. * @brief Configure ADC clock source
  1520. * @rmtoll CFGR2 ADC1PRES LL_RCC_SetADCClockSource
  1521. * @param ADCxSource This parameter can be one of the following values:
  1522. * @arg @ref LL_RCC_ADC1_CLKSRC_HCLK
  1523. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_1
  1524. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_2
  1525. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_4
  1526. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_6
  1527. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_8
  1528. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_10
  1529. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_12
  1530. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_16
  1531. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_32
  1532. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_64
  1533. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_128
  1534. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_256
  1535. * @retval None
  1536. */
  1537. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
  1538. {
  1539. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADC1PRES, ADCxSource);
  1540. }
  1541. #elif defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34)
  1542. /**
  1543. * @brief Configure ADC clock source
  1544. * @rmtoll CFGR2 ADCPRE12 LL_RCC_SetADCClockSource\n
  1545. * CFGR2 ADCPRE34 LL_RCC_SetADCClockSource
  1546. * @param ADCxSource This parameter can be one of the following values:
  1547. * @arg @ref LL_RCC_ADC12_CLKSRC_HCLK
  1548. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_1
  1549. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_2
  1550. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_4
  1551. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_6
  1552. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_8
  1553. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_10
  1554. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_12
  1555. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_16
  1556. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_32
  1557. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_64
  1558. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_128
  1559. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_256
  1560. * @arg @ref LL_RCC_ADC34_CLKSRC_HCLK (*)
  1561. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_1 (*)
  1562. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_2 (*)
  1563. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_4 (*)
  1564. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_6 (*)
  1565. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_8 (*)
  1566. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_10 (*)
  1567. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_12 (*)
  1568. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_16 (*)
  1569. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_32 (*)
  1570. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_64 (*)
  1571. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_128 (*)
  1572. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_256 (*)
  1573. *
  1574. * (*) value not defined in all devices.
  1575. * @retval None
  1576. */
  1577. __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
  1578. {
  1579. #if defined(RCC_CFGR2_ADCPRE34)
  1580. MODIFY_REG(RCC->CFGR2, (ADCxSource >> 16U), (ADCxSource & 0x0000FFFFU));
  1581. #else
  1582. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_ADCPRE12, ADCxSource);
  1583. #endif /* RCC_CFGR2_ADCPRE34 */
  1584. }
  1585. #endif /* RCC_CFGR_ADCPRE */
  1586. #if defined(RCC_CFGR_SDPRE)
  1587. /**
  1588. * @brief Configure SDADCx clock source
  1589. * @rmtoll CFGR SDPRE LL_RCC_SetSDADCClockSource
  1590. * @param SDADCxSource This parameter can be one of the following values:
  1591. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_1
  1592. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_2
  1593. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_4
  1594. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_6
  1595. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_8
  1596. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_10
  1597. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_12
  1598. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_14
  1599. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_16
  1600. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_20
  1601. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_24
  1602. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_28
  1603. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_32
  1604. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_36
  1605. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_40
  1606. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_44
  1607. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_48
  1608. * @retval None
  1609. */
  1610. __STATIC_INLINE void LL_RCC_SetSDADCClockSource(uint32_t SDADCxSource)
  1611. {
  1612. MODIFY_REG(RCC->CFGR, RCC_CFGR_SDPRE, SDADCxSource);
  1613. }
  1614. #endif /* RCC_CFGR_SDPRE */
  1615. /**
  1616. * @brief Get USARTx clock source
  1617. * @rmtoll CFGR3 USART1SW LL_RCC_GetUSARTClockSource\n
  1618. * CFGR3 USART2SW LL_RCC_GetUSARTClockSource\n
  1619. * CFGR3 USART3SW LL_RCC_GetUSARTClockSource
  1620. * @param USARTx This parameter can be one of the following values:
  1621. * @arg @ref LL_RCC_USART1_CLKSOURCE
  1622. * @arg @ref LL_RCC_USART2_CLKSOURCE (*)
  1623. * @arg @ref LL_RCC_USART3_CLKSOURCE (*)
  1624. *
  1625. * (*) value not defined in all devices.
  1626. * @retval Returned value can be one of the following values:
  1627. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1 (*)
  1628. * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2 (*)
  1629. * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1630. * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1631. * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1632. * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1633. * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1634. * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1635. * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1636. * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1637. * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1638. * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1639. * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1640. *
  1641. * (*) value not defined in all devices.
  1642. */
  1643. __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
  1644. {
  1645. return (uint32_t)(READ_BIT(RCC->CFGR3, (RCC_CFGR3_USART1SW << USARTx)) | (USARTx << 24U));
  1646. }
  1647. #if defined(RCC_CFGR3_UART4SW) || defined(RCC_CFGR3_UART5SW)
  1648. /**
  1649. * @brief Get UARTx clock source
  1650. * @rmtoll CFGR3 UART4SW LL_RCC_GetUARTClockSource\n
  1651. * CFGR3 UART5SW LL_RCC_GetUARTClockSource
  1652. * @param UARTx This parameter can be one of the following values:
  1653. * @arg @ref LL_RCC_UART4_CLKSOURCE
  1654. * @arg @ref LL_RCC_UART5_CLKSOURCE
  1655. * @retval Returned value can be one of the following values:
  1656. * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1
  1657. * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK
  1658. * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE
  1659. * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI
  1660. * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1
  1661. * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK
  1662. * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE
  1663. * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI
  1664. */
  1665. __STATIC_INLINE uint32_t LL_RCC_GetUARTClockSource(uint32_t UARTx)
  1666. {
  1667. return (uint32_t)(READ_BIT(RCC->CFGR3, UARTx) | (UARTx >> 8U));
  1668. }
  1669. #endif /* RCC_CFGR3_UART4SW || RCC_CFGR3_UART5SW */
  1670. /**
  1671. * @brief Get I2Cx clock source
  1672. * @rmtoll CFGR3 I2C1SW LL_RCC_GetI2CClockSource\n
  1673. * CFGR3 I2C2SW LL_RCC_GetI2CClockSource\n
  1674. * CFGR3 I2C3SW LL_RCC_GetI2CClockSource
  1675. * @param I2Cx This parameter can be one of the following values:
  1676. * @arg @ref LL_RCC_I2C1_CLKSOURCE
  1677. * @arg @ref LL_RCC_I2C2_CLKSOURCE (*)
  1678. * @arg @ref LL_RCC_I2C3_CLKSOURCE (*)
  1679. *
  1680. * (*) value not defined in all devices.
  1681. * @retval Returned value can be one of the following values:
  1682. * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1683. * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1684. * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI (*)
  1685. * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK (*)
  1686. * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI (*)
  1687. * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK (*)
  1688. *
  1689. * (*) value not defined in all devices.
  1690. */
  1691. __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
  1692. {
  1693. return (uint32_t)(READ_BIT(RCC->CFGR3, I2Cx) | (I2Cx << 24U));
  1694. }
  1695. #if defined(RCC_CFGR_I2SSRC)
  1696. /**
  1697. * @brief Get I2Sx clock source
  1698. * @rmtoll CFGR I2SSRC LL_RCC_GetI2SClockSource
  1699. * @param I2Sx This parameter can be one of the following values:
  1700. * @arg @ref LL_RCC_I2S_CLKSOURCE
  1701. * @retval Returned value can be one of the following values:
  1702. * @arg @ref LL_RCC_I2S_CLKSOURCE_SYSCLK
  1703. * @arg @ref LL_RCC_I2S_CLKSOURCE_PIN
  1704. */
  1705. __STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx)
  1706. {
  1707. return (uint32_t)(READ_BIT(RCC->CFGR, I2Sx));
  1708. }
  1709. #endif /* RCC_CFGR_I2SSRC */
  1710. #if defined(RCC_CFGR3_TIMSW)
  1711. /**
  1712. * @brief Get TIMx clock source
  1713. * @rmtoll CFGR3 TIM1SW LL_RCC_GetTIMClockSource\n
  1714. * CFGR3 TIM8SW LL_RCC_GetTIMClockSource\n
  1715. * CFGR3 TIM15SW LL_RCC_GetTIMClockSource\n
  1716. * CFGR3 TIM16SW LL_RCC_GetTIMClockSource\n
  1717. * CFGR3 TIM17SW LL_RCC_GetTIMClockSource\n
  1718. * CFGR3 TIM20SW LL_RCC_GetTIMClockSource\n
  1719. * CFGR3 TIM2SW LL_RCC_GetTIMClockSource\n
  1720. * CFGR3 TIM34SW LL_RCC_GetTIMClockSource
  1721. * @param TIMx This parameter can be one of the following values:
  1722. * @arg @ref LL_RCC_TIM1_CLKSOURCE
  1723. * @arg @ref LL_RCC_TIM2_CLKSOURCE (*)
  1724. * @arg @ref LL_RCC_TIM8_CLKSOURCE (*)
  1725. * @arg @ref LL_RCC_TIM15_CLKSOURCE (*)
  1726. * @arg @ref LL_RCC_TIM16_CLKSOURCE (*)
  1727. * @arg @ref LL_RCC_TIM17_CLKSOURCE (*)
  1728. * @arg @ref LL_RCC_TIM20_CLKSOURCE (*)
  1729. * @arg @ref LL_RCC_TIM34_CLKSOURCE (*)
  1730. *
  1731. * (*) value not defined in all devices.
  1732. * @retval Returned value can be one of the following values:
  1733. * @arg @ref LL_RCC_TIM1_CLKSOURCE_PCLK2
  1734. * @arg @ref LL_RCC_TIM1_CLKSOURCE_PLL
  1735. * @arg @ref LL_RCC_TIM8_CLKSOURCE_PCLK2 (*)
  1736. * @arg @ref LL_RCC_TIM8_CLKSOURCE_PLL (*)
  1737. * @arg @ref LL_RCC_TIM15_CLKSOURCE_PCLK2 (*)
  1738. * @arg @ref LL_RCC_TIM15_CLKSOURCE_PLL (*)
  1739. * @arg @ref LL_RCC_TIM16_CLKSOURCE_PCLK2 (*)
  1740. * @arg @ref LL_RCC_TIM16_CLKSOURCE_PLL (*)
  1741. * @arg @ref LL_RCC_TIM17_CLKSOURCE_PCLK2 (*)
  1742. * @arg @ref LL_RCC_TIM17_CLKSOURCE_PLL (*)
  1743. * @arg @ref LL_RCC_TIM20_CLKSOURCE_PCLK2 (*)
  1744. * @arg @ref LL_RCC_TIM20_CLKSOURCE_PLL (*)
  1745. * @arg @ref LL_RCC_TIM2_CLKSOURCE_PCLK1 (*)
  1746. * @arg @ref LL_RCC_TIM2_CLKSOURCE_PLL (*)
  1747. * @arg @ref LL_RCC_TIM34_CLKSOURCE_PCLK1 (*)
  1748. * @arg @ref LL_RCC_TIM34_CLKSOURCE_PLL (*)
  1749. *
  1750. * (*) value not defined in all devices.
  1751. */
  1752. __STATIC_INLINE uint32_t LL_RCC_GetTIMClockSource(uint32_t TIMx)
  1753. {
  1754. return (uint32_t)(READ_BIT(RCC->CFGR3, (RCC_CFGR3_TIM1SW << TIMx)) | (TIMx << 27U));
  1755. }
  1756. #endif /* RCC_CFGR3_TIMSW */
  1757. #if defined(HRTIM1)
  1758. /**
  1759. * @brief Get HRTIMx clock source
  1760. * @rmtoll CFGR3 HRTIMSW LL_RCC_GetHRTIMClockSource
  1761. * @param HRTIMx This parameter can be one of the following values:
  1762. * @arg @ref LL_RCC_HRTIM1_CLKSOURCE
  1763. * @retval Returned value can be one of the following values:
  1764. * @arg @ref LL_RCC_HRTIM1_CLKSOURCE_PCLK2
  1765. * @arg @ref LL_RCC_HRTIM1_CLKSOURCE_PLL
  1766. */
  1767. __STATIC_INLINE uint32_t LL_RCC_GetHRTIMClockSource(uint32_t HRTIMx)
  1768. {
  1769. return (uint32_t)(READ_BIT(RCC->CFGR3, HRTIMx));
  1770. }
  1771. #endif /* HRTIM1 */
  1772. #if defined(CEC)
  1773. /**
  1774. * @brief Get CEC clock source
  1775. * @rmtoll CFGR3 CECSW LL_RCC_GetCECClockSource
  1776. * @param CECx This parameter can be one of the following values:
  1777. * @arg @ref LL_RCC_CEC_CLKSOURCE
  1778. * @retval Returned value can be one of the following values:
  1779. * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1780. * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1781. */
  1782. __STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx)
  1783. {
  1784. return (uint32_t)(READ_BIT(RCC->CFGR3, CECx));
  1785. }
  1786. #endif /* CEC */
  1787. #if defined(USB)
  1788. /**
  1789. * @brief Get USBx clock source
  1790. * @rmtoll CFGR USBPRE LL_RCC_GetUSBClockSource
  1791. * @param USBx This parameter can be one of the following values:
  1792. * @arg @ref LL_RCC_USB_CLKSOURCE
  1793. * @retval Returned value can be one of the following values:
  1794. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1795. * @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5
  1796. */
  1797. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
  1798. {
  1799. return (uint32_t)(READ_BIT(RCC->CFGR, USBx));
  1800. }
  1801. #endif /* USB */
  1802. #if defined(RCC_CFGR_ADCPRE)
  1803. /**
  1804. * @brief Get ADCx clock source
  1805. * @rmtoll CFGR ADCPRE LL_RCC_GetADCClockSource
  1806. * @param ADCx This parameter can be one of the following values:
  1807. * @arg @ref LL_RCC_ADC_CLKSOURCE
  1808. * @retval Returned value can be one of the following values:
  1809. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
  1810. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
  1811. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
  1812. * @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
  1813. */
  1814. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
  1815. {
  1816. return (uint32_t)(READ_BIT(RCC->CFGR, ADCx));
  1817. }
  1818. #elif defined(RCC_CFGR2_ADC1PRES)
  1819. /**
  1820. * @brief Get ADCx clock source
  1821. * @rmtoll CFGR2 ADC1PRES LL_RCC_GetADCClockSource
  1822. * @param ADCx This parameter can be one of the following values:
  1823. * @arg @ref LL_RCC_ADC1_CLKSOURCE
  1824. * @retval Returned value can be one of the following values:
  1825. * @arg @ref LL_RCC_ADC1_CLKSRC_HCLK
  1826. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_1
  1827. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_2
  1828. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_4
  1829. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_6
  1830. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_8
  1831. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_10
  1832. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_12
  1833. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_16
  1834. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_32
  1835. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_64
  1836. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_128
  1837. * @arg @ref LL_RCC_ADC1_CLKSRC_PLL_DIV_256
  1838. */
  1839. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
  1840. {
  1841. return (uint32_t)(READ_BIT(RCC->CFGR2, ADCx));
  1842. }
  1843. #elif defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34)
  1844. /**
  1845. * @brief Get ADCx clock source
  1846. * @rmtoll CFGR2 ADCPRE12 LL_RCC_GetADCClockSource\n
  1847. * CFGR2 ADCPRE34 LL_RCC_GetADCClockSource
  1848. * @param ADCx This parameter can be one of the following values:
  1849. * @arg @ref LL_RCC_ADC12_CLKSOURCE
  1850. * @arg @ref LL_RCC_ADC34_CLKSOURCE (*)
  1851. *
  1852. * (*) value not defined in all devices.
  1853. * @retval Returned value can be one of the following values:
  1854. * @arg @ref LL_RCC_ADC12_CLKSRC_HCLK
  1855. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_1
  1856. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_2
  1857. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_4
  1858. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_6
  1859. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_8
  1860. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_10
  1861. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_12
  1862. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_16
  1863. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_32
  1864. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_64
  1865. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_128
  1866. * @arg @ref LL_RCC_ADC12_CLKSRC_PLL_DIV_256
  1867. * @arg @ref LL_RCC_ADC34_CLKSRC_HCLK (*)
  1868. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_1 (*)
  1869. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_2 (*)
  1870. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_4 (*)
  1871. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_6 (*)
  1872. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_8 (*)
  1873. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_10 (*)
  1874. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_12 (*)
  1875. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_16 (*)
  1876. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_32 (*)
  1877. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_64 (*)
  1878. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_128 (*)
  1879. * @arg @ref LL_RCC_ADC34_CLKSRC_PLL_DIV_256 (*)
  1880. *
  1881. * (*) value not defined in all devices.
  1882. */
  1883. __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
  1884. {
  1885. #if defined(RCC_CFGR2_ADCPRE34)
  1886. return (uint32_t)(READ_BIT(RCC->CFGR2, ADCx) | (ADCx << 16U));
  1887. #else
  1888. return (uint32_t)(READ_BIT(RCC->CFGR2, ADCx));
  1889. #endif /*RCC_CFGR2_ADCPRE34*/
  1890. }
  1891. #endif /* RCC_CFGR_ADCPRE */
  1892. #if defined(RCC_CFGR_SDPRE)
  1893. /**
  1894. * @brief Get SDADCx clock source
  1895. * @rmtoll CFGR SDPRE LL_RCC_GetSDADCClockSource
  1896. * @param SDADCx This parameter can be one of the following values:
  1897. * @arg @ref LL_RCC_SDADC_CLKSOURCE
  1898. * @retval Returned value can be one of the following values:
  1899. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_1
  1900. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_2
  1901. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_4
  1902. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_6
  1903. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_8
  1904. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_10
  1905. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_12
  1906. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_14
  1907. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_16
  1908. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_20
  1909. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_24
  1910. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_28
  1911. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_32
  1912. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_36
  1913. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_40
  1914. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_44
  1915. * @arg @ref LL_RCC_SDADC_CLKSRC_SYS_DIV_48
  1916. */
  1917. __STATIC_INLINE uint32_t LL_RCC_GetSDADCClockSource(uint32_t SDADCx)
  1918. {
  1919. return (uint32_t)(READ_BIT(RCC->CFGR, SDADCx));
  1920. }
  1921. #endif /* RCC_CFGR_SDPRE */
  1922. /**
  1923. * @}
  1924. */
  1925. /** @defgroup RCC_LL_EF_RTC RTC
  1926. * @{
  1927. */
  1928. /**
  1929. * @brief Set RTC Clock Source
  1930. * @note Once the RTC clock source has been selected, it cannot be changed any more unless
  1931. * the Backup domain is reset. The BDRST bit can be used to reset them.
  1932. * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource
  1933. * @param Source This parameter can be one of the following values:
  1934. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1935. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1936. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1937. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1938. * @retval None
  1939. */
  1940. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  1941. {
  1942. MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  1943. }
  1944. /**
  1945. * @brief Get RTC Clock Source
  1946. * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource
  1947. * @retval Returned value can be one of the following values:
  1948. * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1949. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1950. * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1951. * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1952. */
  1953. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  1954. {
  1955. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  1956. }
  1957. /**
  1958. * @brief Enable RTC
  1959. * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
  1960. * @retval None
  1961. */
  1962. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  1963. {
  1964. SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1965. }
  1966. /**
  1967. * @brief Disable RTC
  1968. * @rmtoll BDCR RTCEN LL_RCC_DisableRTC
  1969. * @retval None
  1970. */
  1971. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  1972. {
  1973. CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1974. }
  1975. /**
  1976. * @brief Check if RTC has been enabled or not
  1977. * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC
  1978. * @retval State of bit (1 or 0).
  1979. */
  1980. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  1981. {
  1982. return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
  1983. }
  1984. /**
  1985. * @brief Force the Backup domain reset
  1986. * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset
  1987. * @retval None
  1988. */
  1989. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  1990. {
  1991. SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1992. }
  1993. /**
  1994. * @brief Release the Backup domain reset
  1995. * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset
  1996. * @retval None
  1997. */
  1998. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  1999. {
  2000. CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  2001. }
  2002. /**
  2003. * @}
  2004. */
  2005. /** @defgroup RCC_LL_EF_PLL PLL
  2006. * @{
  2007. */
  2008. /**
  2009. * @brief Enable PLL
  2010. * @rmtoll CR PLLON LL_RCC_PLL_Enable
  2011. * @retval None
  2012. */
  2013. __STATIC_INLINE void LL_RCC_PLL_Enable(void)
  2014. {
  2015. SET_BIT(RCC->CR, RCC_CR_PLLON);
  2016. }
  2017. /**
  2018. * @brief Disable PLL
  2019. * @note Cannot be disabled if the PLL clock is used as the system clock
  2020. * @rmtoll CR PLLON LL_RCC_PLL_Disable
  2021. * @retval None
  2022. */
  2023. __STATIC_INLINE void LL_RCC_PLL_Disable(void)
  2024. {
  2025. CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
  2026. }
  2027. /**
  2028. * @brief Check if PLL Ready
  2029. * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
  2030. * @retval State of bit (1 or 0).
  2031. */
  2032. __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
  2033. {
  2034. return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
  2035. }
  2036. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  2037. /**
  2038. * @brief Configure PLL used for SYSCLK Domain
  2039. * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  2040. * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n
  2041. * CFGR2 PREDIV LL_RCC_PLL_ConfigDomain_SYS
  2042. * @param Source This parameter can be one of the following values:
  2043. * @arg @ref LL_RCC_PLLSOURCE_HSI
  2044. * @arg @ref LL_RCC_PLLSOURCE_HSE
  2045. * @param PLLMul This parameter can be one of the following values:
  2046. * @arg @ref LL_RCC_PLL_MUL_2
  2047. * @arg @ref LL_RCC_PLL_MUL_3
  2048. * @arg @ref LL_RCC_PLL_MUL_4
  2049. * @arg @ref LL_RCC_PLL_MUL_5
  2050. * @arg @ref LL_RCC_PLL_MUL_6
  2051. * @arg @ref LL_RCC_PLL_MUL_7
  2052. * @arg @ref LL_RCC_PLL_MUL_8
  2053. * @arg @ref LL_RCC_PLL_MUL_9
  2054. * @arg @ref LL_RCC_PLL_MUL_10
  2055. * @arg @ref LL_RCC_PLL_MUL_11
  2056. * @arg @ref LL_RCC_PLL_MUL_12
  2057. * @arg @ref LL_RCC_PLL_MUL_13
  2058. * @arg @ref LL_RCC_PLL_MUL_14
  2059. * @arg @ref LL_RCC_PLL_MUL_15
  2060. * @arg @ref LL_RCC_PLL_MUL_16
  2061. * @param PLLDiv This parameter can be one of the following values:
  2062. * @arg @ref LL_RCC_PREDIV_DIV_1
  2063. * @arg @ref LL_RCC_PREDIV_DIV_2
  2064. * @arg @ref LL_RCC_PREDIV_DIV_3
  2065. * @arg @ref LL_RCC_PREDIV_DIV_4
  2066. * @arg @ref LL_RCC_PREDIV_DIV_5
  2067. * @arg @ref LL_RCC_PREDIV_DIV_6
  2068. * @arg @ref LL_RCC_PREDIV_DIV_7
  2069. * @arg @ref LL_RCC_PREDIV_DIV_8
  2070. * @arg @ref LL_RCC_PREDIV_DIV_9
  2071. * @arg @ref LL_RCC_PREDIV_DIV_10
  2072. * @arg @ref LL_RCC_PREDIV_DIV_11
  2073. * @arg @ref LL_RCC_PREDIV_DIV_12
  2074. * @arg @ref LL_RCC_PREDIV_DIV_13
  2075. * @arg @ref LL_RCC_PREDIV_DIV_14
  2076. * @arg @ref LL_RCC_PREDIV_DIV_15
  2077. * @arg @ref LL_RCC_PREDIV_DIV_16
  2078. * @retval None
  2079. */
  2080. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul, uint32_t PLLDiv)
  2081. {
  2082. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, Source | PLLMul);
  2083. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, PLLDiv);
  2084. }
  2085. #else
  2086. /**
  2087. * @brief Configure PLL used for SYSCLK Domain
  2088. * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
  2089. * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n
  2090. * CFGR2 PREDIV LL_RCC_PLL_ConfigDomain_SYS
  2091. * @param Source This parameter can be one of the following values:
  2092. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  2093. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1
  2094. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2
  2095. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3
  2096. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4
  2097. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5
  2098. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6
  2099. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7
  2100. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8
  2101. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9
  2102. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10
  2103. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11
  2104. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12
  2105. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13
  2106. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14
  2107. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15
  2108. * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16
  2109. * @param PLLMul This parameter can be one of the following values:
  2110. * @arg @ref LL_RCC_PLL_MUL_2
  2111. * @arg @ref LL_RCC_PLL_MUL_3
  2112. * @arg @ref LL_RCC_PLL_MUL_4
  2113. * @arg @ref LL_RCC_PLL_MUL_5
  2114. * @arg @ref LL_RCC_PLL_MUL_6
  2115. * @arg @ref LL_RCC_PLL_MUL_7
  2116. * @arg @ref LL_RCC_PLL_MUL_8
  2117. * @arg @ref LL_RCC_PLL_MUL_9
  2118. * @arg @ref LL_RCC_PLL_MUL_10
  2119. * @arg @ref LL_RCC_PLL_MUL_11
  2120. * @arg @ref LL_RCC_PLL_MUL_12
  2121. * @arg @ref LL_RCC_PLL_MUL_13
  2122. * @arg @ref LL_RCC_PLL_MUL_14
  2123. * @arg @ref LL_RCC_PLL_MUL_15
  2124. * @arg @ref LL_RCC_PLL_MUL_16
  2125. * @retval None
  2126. */
  2127. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul)
  2128. {
  2129. MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, (Source & RCC_CFGR_PLLSRC) | PLLMul);
  2130. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (Source & RCC_CFGR2_PREDIV));
  2131. }
  2132. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  2133. /**
  2134. * @brief Get the oscillator used as PLL clock source.
  2135. * @rmtoll CFGR PLLSRC LL_RCC_PLL_GetMainSource
  2136. * @retval Returned value can be one of the following values:
  2137. * @arg @ref LL_RCC_PLLSOURCE_HSI (*)
  2138. * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*)
  2139. * @arg @ref LL_RCC_PLLSOURCE_HSE
  2140. *
  2141. * (*) value not defined in all devices
  2142. */
  2143. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
  2144. {
  2145. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
  2146. }
  2147. /**
  2148. * @brief Get PLL multiplication Factor
  2149. * @rmtoll CFGR PLLMUL LL_RCC_PLL_GetMultiplicator
  2150. * @retval Returned value can be one of the following values:
  2151. * @arg @ref LL_RCC_PLL_MUL_2
  2152. * @arg @ref LL_RCC_PLL_MUL_3
  2153. * @arg @ref LL_RCC_PLL_MUL_4
  2154. * @arg @ref LL_RCC_PLL_MUL_5
  2155. * @arg @ref LL_RCC_PLL_MUL_6
  2156. * @arg @ref LL_RCC_PLL_MUL_7
  2157. * @arg @ref LL_RCC_PLL_MUL_8
  2158. * @arg @ref LL_RCC_PLL_MUL_9
  2159. * @arg @ref LL_RCC_PLL_MUL_10
  2160. * @arg @ref LL_RCC_PLL_MUL_11
  2161. * @arg @ref LL_RCC_PLL_MUL_12
  2162. * @arg @ref LL_RCC_PLL_MUL_13
  2163. * @arg @ref LL_RCC_PLL_MUL_14
  2164. * @arg @ref LL_RCC_PLL_MUL_15
  2165. * @arg @ref LL_RCC_PLL_MUL_16
  2166. */
  2167. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
  2168. {
  2169. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL));
  2170. }
  2171. /**
  2172. * @brief Get PREDIV division factor for the main PLL
  2173. * @note They can be written only when the PLL is disabled
  2174. * @rmtoll CFGR2 PREDIV LL_RCC_PLL_GetPrediv
  2175. * @retval Returned value can be one of the following values:
  2176. * @arg @ref LL_RCC_PREDIV_DIV_1
  2177. * @arg @ref LL_RCC_PREDIV_DIV_2
  2178. * @arg @ref LL_RCC_PREDIV_DIV_3
  2179. * @arg @ref LL_RCC_PREDIV_DIV_4
  2180. * @arg @ref LL_RCC_PREDIV_DIV_5
  2181. * @arg @ref LL_RCC_PREDIV_DIV_6
  2182. * @arg @ref LL_RCC_PREDIV_DIV_7
  2183. * @arg @ref LL_RCC_PREDIV_DIV_8
  2184. * @arg @ref LL_RCC_PREDIV_DIV_9
  2185. * @arg @ref LL_RCC_PREDIV_DIV_10
  2186. * @arg @ref LL_RCC_PREDIV_DIV_11
  2187. * @arg @ref LL_RCC_PREDIV_DIV_12
  2188. * @arg @ref LL_RCC_PREDIV_DIV_13
  2189. * @arg @ref LL_RCC_PREDIV_DIV_14
  2190. * @arg @ref LL_RCC_PREDIV_DIV_15
  2191. * @arg @ref LL_RCC_PREDIV_DIV_16
  2192. */
  2193. __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void)
  2194. {
  2195. return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV));
  2196. }
  2197. /**
  2198. * @}
  2199. */
  2200. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  2201. * @{
  2202. */
  2203. /**
  2204. * @brief Clear LSI ready interrupt flag
  2205. * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  2206. * @retval None
  2207. */
  2208. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  2209. {
  2210. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
  2211. }
  2212. /**
  2213. * @brief Clear LSE ready interrupt flag
  2214. * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY
  2215. * @retval None
  2216. */
  2217. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  2218. {
  2219. SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
  2220. }
  2221. /**
  2222. * @brief Clear HSI ready interrupt flag
  2223. * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  2224. * @retval None
  2225. */
  2226. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  2227. {
  2228. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
  2229. }
  2230. /**
  2231. * @brief Clear HSE ready interrupt flag
  2232. * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY
  2233. * @retval None
  2234. */
  2235. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  2236. {
  2237. SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
  2238. }
  2239. /**
  2240. * @brief Clear PLL ready interrupt flag
  2241. * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY
  2242. * @retval None
  2243. */
  2244. __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
  2245. {
  2246. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
  2247. }
  2248. /**
  2249. * @brief Clear Clock security system interrupt flag
  2250. * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS
  2251. * @retval None
  2252. */
  2253. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  2254. {
  2255. SET_BIT(RCC->CIR, RCC_CIR_CSSC);
  2256. }
  2257. /**
  2258. * @brief Check if LSI ready interrupt occurred or not
  2259. * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  2260. * @retval State of bit (1 or 0).
  2261. */
  2262. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  2263. {
  2264. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF));
  2265. }
  2266. /**
  2267. * @brief Check if LSE ready interrupt occurred or not
  2268. * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  2269. * @retval State of bit (1 or 0).
  2270. */
  2271. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  2272. {
  2273. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF));
  2274. }
  2275. /**
  2276. * @brief Check if HSI ready interrupt occurred or not
  2277. * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  2278. * @retval State of bit (1 or 0).
  2279. */
  2280. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  2281. {
  2282. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF));
  2283. }
  2284. /**
  2285. * @brief Check if HSE ready interrupt occurred or not
  2286. * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY
  2287. * @retval State of bit (1 or 0).
  2288. */
  2289. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  2290. {
  2291. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF));
  2292. }
  2293. #if defined(RCC_CFGR_MCOF)
  2294. /**
  2295. * @brief Check if switch to new MCO source is effective or not
  2296. * @rmtoll CFGR MCOF LL_RCC_IsActiveFlag_MCO1
  2297. * @retval State of bit (1 or 0).
  2298. */
  2299. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_MCO1(void)
  2300. {
  2301. return (READ_BIT(RCC->CFGR, RCC_CFGR_MCOF) == (RCC_CFGR_MCOF));
  2302. }
  2303. #endif /* RCC_CFGR_MCOF */
  2304. /**
  2305. * @brief Check if PLL ready interrupt occurred or not
  2306. * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY
  2307. * @retval State of bit (1 or 0).
  2308. */
  2309. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
  2310. {
  2311. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF));
  2312. }
  2313. /**
  2314. * @brief Check if Clock security system interrupt occurred or not
  2315. * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS
  2316. * @retval State of bit (1 or 0).
  2317. */
  2318. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  2319. {
  2320. return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF));
  2321. }
  2322. /**
  2323. * @brief Check if RCC flag Independent Watchdog reset is set or not.
  2324. * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
  2325. * @retval State of bit (1 or 0).
  2326. */
  2327. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  2328. {
  2329. return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
  2330. }
  2331. /**
  2332. * @brief Check if RCC flag Low Power reset is set or not.
  2333. * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
  2334. * @retval State of bit (1 or 0).
  2335. */
  2336. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  2337. {
  2338. return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
  2339. }
  2340. /**
  2341. * @brief Check if RCC flag is set or not.
  2342. * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
  2343. * @retval State of bit (1 or 0).
  2344. */
  2345. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
  2346. {
  2347. return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF));
  2348. }
  2349. /**
  2350. * @brief Check if RCC flag Pin reset is set or not.
  2351. * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  2352. * @retval State of bit (1 or 0).
  2353. */
  2354. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  2355. {
  2356. return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
  2357. }
  2358. /**
  2359. * @brief Check if RCC flag POR/PDR reset is set or not.
  2360. * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST
  2361. * @retval State of bit (1 or 0).
  2362. */
  2363. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
  2364. {
  2365. return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF));
  2366. }
  2367. /**
  2368. * @brief Check if RCC flag Software reset is set or not.
  2369. * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
  2370. * @retval State of bit (1 or 0).
  2371. */
  2372. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  2373. {
  2374. return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
  2375. }
  2376. /**
  2377. * @brief Check if RCC flag Window Watchdog reset is set or not.
  2378. * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
  2379. * @retval State of bit (1 or 0).
  2380. */
  2381. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
  2382. {
  2383. return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
  2384. }
  2385. #if defined(RCC_CSR_V18PWRRSTF)
  2386. /**
  2387. * @brief Check if RCC Reset flag of the 1.8 V domain is set or not.
  2388. * @rmtoll CSR V18PWRRSTF LL_RCC_IsActiveFlag_V18PWRRST
  2389. * @retval State of bit (1 or 0).
  2390. */
  2391. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_V18PWRRST(void)
  2392. {
  2393. return (READ_BIT(RCC->CSR, RCC_CSR_V18PWRRSTF) == (RCC_CSR_V18PWRRSTF));
  2394. }
  2395. #endif /* RCC_CSR_V18PWRRSTF */
  2396. /**
  2397. * @brief Set RMVF bit to clear the reset flags.
  2398. * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
  2399. * @retval None
  2400. */
  2401. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  2402. {
  2403. SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  2404. }
  2405. /**
  2406. * @}
  2407. */
  2408. /** @defgroup RCC_LL_EF_IT_Management IT Management
  2409. * @{
  2410. */
  2411. /**
  2412. * @brief Enable LSI ready interrupt
  2413. * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY
  2414. * @retval None
  2415. */
  2416. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  2417. {
  2418. SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  2419. }
  2420. /**
  2421. * @brief Enable LSE ready interrupt
  2422. * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY
  2423. * @retval None
  2424. */
  2425. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  2426. {
  2427. SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  2428. }
  2429. /**
  2430. * @brief Enable HSI ready interrupt
  2431. * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY
  2432. * @retval None
  2433. */
  2434. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  2435. {
  2436. SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  2437. }
  2438. /**
  2439. * @brief Enable HSE ready interrupt
  2440. * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY
  2441. * @retval None
  2442. */
  2443. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  2444. {
  2445. SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  2446. }
  2447. /**
  2448. * @brief Enable PLL ready interrupt
  2449. * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY
  2450. * @retval None
  2451. */
  2452. __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
  2453. {
  2454. SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  2455. }
  2456. /**
  2457. * @brief Disable LSI ready interrupt
  2458. * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY
  2459. * @retval None
  2460. */
  2461. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  2462. {
  2463. CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  2464. }
  2465. /**
  2466. * @brief Disable LSE ready interrupt
  2467. * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY
  2468. * @retval None
  2469. */
  2470. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  2471. {
  2472. CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  2473. }
  2474. /**
  2475. * @brief Disable HSI ready interrupt
  2476. * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY
  2477. * @retval None
  2478. */
  2479. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  2480. {
  2481. CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  2482. }
  2483. /**
  2484. * @brief Disable HSE ready interrupt
  2485. * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY
  2486. * @retval None
  2487. */
  2488. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  2489. {
  2490. CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  2491. }
  2492. /**
  2493. * @brief Disable PLL ready interrupt
  2494. * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY
  2495. * @retval None
  2496. */
  2497. __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
  2498. {
  2499. CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  2500. }
  2501. /**
  2502. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  2503. * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
  2504. * @retval State of bit (1 or 0).
  2505. */
  2506. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  2507. {
  2508. return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE));
  2509. }
  2510. /**
  2511. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  2512. * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY
  2513. * @retval State of bit (1 or 0).
  2514. */
  2515. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  2516. {
  2517. return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE));
  2518. }
  2519. /**
  2520. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  2521. * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
  2522. * @retval State of bit (1 or 0).
  2523. */
  2524. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  2525. {
  2526. return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE));
  2527. }
  2528. /**
  2529. * @brief Checks if HSE ready interrupt source is enabled or disabled.
  2530. * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY
  2531. * @retval State of bit (1 or 0).
  2532. */
  2533. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
  2534. {
  2535. return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE));
  2536. }
  2537. /**
  2538. * @brief Checks if PLL ready interrupt source is enabled or disabled.
  2539. * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY
  2540. * @retval State of bit (1 or 0).
  2541. */
  2542. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
  2543. {
  2544. return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE));
  2545. }
  2546. /**
  2547. * @}
  2548. */
  2549. #if defined(USE_FULL_LL_DRIVER)
  2550. /** @defgroup RCC_LL_EF_Init De-initialization function
  2551. * @{
  2552. */
  2553. ErrorStatus LL_RCC_DeInit(void);
  2554. /**
  2555. * @}
  2556. */
  2557. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  2558. * @{
  2559. */
  2560. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  2561. uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
  2562. #if defined(UART4) || defined(UART5)
  2563. uint32_t LL_RCC_GetUARTClockFreq(uint32_t UARTxSource);
  2564. #endif /* UART4 || UART5 */
  2565. uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
  2566. #if defined(RCC_CFGR_I2SSRC)
  2567. uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource);
  2568. #endif /* RCC_CFGR_I2SSRC */
  2569. #if defined(USB_OTG_FS) || defined(USB)
  2570. uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  2571. #endif /* USB_OTG_FS || USB */
  2572. #if (defined(RCC_CFGR_ADCPRE) || defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34))
  2573. uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
  2574. #endif /*RCC_CFGR_ADCPRE || RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRE12 || RCC_CFGR2_ADCPRE34 */
  2575. #if defined(RCC_CFGR_SDPRE)
  2576. uint32_t LL_RCC_GetSDADCClockFreq(uint32_t SDADCxSource);
  2577. #endif /*RCC_CFGR_SDPRE */
  2578. #if defined(CEC)
  2579. uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource);
  2580. #endif /* CEC */
  2581. #if defined(RCC_CFGR3_TIMSW)
  2582. uint32_t LL_RCC_GetTIMClockFreq(uint32_t TIMxSource);
  2583. #endif /*RCC_CFGR3_TIMSW*/
  2584. uint32_t LL_RCC_GetHRTIMClockFreq(uint32_t HRTIMxSource);
  2585. /**
  2586. * @}
  2587. */
  2588. #endif /* USE_FULL_LL_DRIVER */
  2589. /**
  2590. * @}
  2591. */
  2592. /**
  2593. * @}
  2594. */
  2595. #endif /* RCC */
  2596. /**
  2597. * @}
  2598. */
  2599. #ifdef __cplusplus
  2600. }
  2601. #endif
  2602. #endif /* __STM32F3xx_LL_RCC_H */
  2603. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/