stm32h7xx_hal_rcc_ex.h 210 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475
  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_hal_rcc_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of RCC HAL Extension module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2017 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file in
  13. * the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. ******************************************************************************
  16. */
  17. /* Define to prevent recursive inclusion -------------------------------------*/
  18. #ifndef STM32H7xx_HAL_RCC_EX_H
  19. #define STM32H7xx_HAL_RCC_EX_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32h7xx_hal_def.h"
  25. /** @addtogroup STM32H7xx_HAL_Driver
  26. * @{
  27. */
  28. /** @addtogroup RCCEx
  29. * @{
  30. */
  31. /* Exported types ------------------------------------------------------------*/
  32. /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
  33. * @{
  34. */
  35. /**
  36. * @brief PLL2 Clock structure definition
  37. */
  38. typedef struct
  39. {
  40. uint32_t PLL2M; /*!< PLL2M: Division factor for PLL2 VCO input clock.
  41. This parameter must be a number between Min_Data = 1 and Max_Data = 63 */
  42. uint32_t PLL2N; /*!< PLL2N: Multiplication factor for PLL2 VCO output clock.
  43. This parameter must be a number between Min_Data = 4 and Max_Data = 512
  44. or between Min_Data = 8 and Max_Data = 420(*)
  45. (*) : For stm32h7a3xx and stm32h7b3xx family lines. */
  46. uint32_t PLL2P; /*!< PLL2P: Division factor for system clock.
  47. This parameter must be a number between Min_Data = 2 and Max_Data = 128
  48. odd division factors are not allowed */
  49. uint32_t PLL2Q; /*!< PLL2Q: Division factor for peripheral clocks.
  50. This parameter must be a number between Min_Data = 1 and Max_Data = 128 */
  51. uint32_t PLL2R; /*!< PLL2R: Division factor for peripheral clocks.
  52. This parameter must be a number between Min_Data = 1 and Max_Data = 128 */
  53. uint32_t PLL2RGE; /*!<PLL2RGE: PLL2 clock Input range
  54. This parameter must be a value of @ref RCC_PLL2_VCI_Range */
  55. uint32_t PLL2VCOSEL; /*!<PLL2VCOSEL: PLL2 clock Output range
  56. This parameter must be a value of @ref RCC_PLL2_VCO_Range */
  57. uint32_t PLL2FRACN; /*!<PLL2FRACN: Specifies Fractional Part Of The Multiplication Factor for
  58. PLL2 VCO It should be a value between 0 and 8191 */
  59. }RCC_PLL2InitTypeDef;
  60. /**
  61. * @brief PLL3 Clock structure definition
  62. */
  63. typedef struct
  64. {
  65. uint32_t PLL3M; /*!< PLL3M: Division factor for PLL3 VCO input clock.
  66. This parameter must be a number between Min_Data = 1 and Max_Data = 63 */
  67. uint32_t PLL3N; /*!< PLL3N: Multiplication factor for PLL3 VCO output clock.
  68. This parameter must be a number between Min_Data = 4 and Max_Data = 512
  69. or between Min_Data = 8 and Max_Data = 420(*)
  70. (*) : For stm32h7a3xx and stm32h7b3xx family lines. */
  71. uint32_t PLL3P; /*!< PLL3P: Division factor for system clock.
  72. This parameter must be a number between Min_Data = 2 and Max_Data = 128
  73. odd division factors are not allowed */
  74. uint32_t PLL3Q; /*!< PLL3Q: Division factor for peripheral clocks.
  75. This parameter must be a number between Min_Data = 1 and Max_Data = 128 */
  76. uint32_t PLL3R; /*!< PLL3R: Division factor for peripheral clocks.
  77. This parameter must be a number between Min_Data = 1 and Max_Data = 128 */
  78. uint32_t PLL3RGE; /*!<PLL3RGE: PLL3 clock Input range
  79. This parameter must be a value of @ref RCC_PLL3_VCI_Range */
  80. uint32_t PLL3VCOSEL; /*!<PLL3VCOSEL: PLL3 clock Output range
  81. This parameter must be a value of @ref RCC_PLL3_VCO_Range */
  82. uint32_t PLL3FRACN; /*!<PLL3FRACN: Specifies Fractional Part Of The Multiplication Factor for
  83. PLL3 VCO It should be a value between 0 and 8191 */
  84. }RCC_PLL3InitTypeDef;
  85. /**
  86. * @brief RCC PLL1 Clocks structure definition
  87. */
  88. typedef struct
  89. {
  90. uint32_t PLL1_P_Frequency;
  91. uint32_t PLL1_Q_Frequency;
  92. uint32_t PLL1_R_Frequency;
  93. }PLL1_ClocksTypeDef;
  94. /**
  95. * @brief RCC PLL2 Clocks structure definition
  96. */
  97. typedef struct
  98. {
  99. uint32_t PLL2_P_Frequency;
  100. uint32_t PLL2_Q_Frequency;
  101. uint32_t PLL2_R_Frequency;
  102. }PLL2_ClocksTypeDef;
  103. /**
  104. * @brief RCC PLL3 Clocks structure definition
  105. */
  106. typedef struct
  107. {
  108. uint32_t PLL3_P_Frequency;
  109. uint32_t PLL3_Q_Frequency;
  110. uint32_t PLL3_R_Frequency;
  111. }PLL3_ClocksTypeDef;
  112. /**
  113. * @brief RCC extended clocks structure definition
  114. */
  115. typedef struct
  116. {
  117. uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.
  118. This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
  119. RCC_PLL2InitTypeDef PLL2; /*!< PLL2structure parameters.
  120. This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */
  121. RCC_PLL3InitTypeDef PLL3; /*!< PLL3 structure parameters.
  122. This parameter will be used only when PLL2 is selected as kernel clock Source for some peripherals */
  123. uint32_t FmcClockSelection; /*!< Specifies FMC clock source
  124. This parameter can be a value of @ref RCCEx_FMC_Clock_Source */
  125. #if defined(QUADSPI)
  126. uint32_t QspiClockSelection; /*!< Specifies QSPI clock source
  127. This parameter can be a value of @ref RCCEx_QSPI_Clock_Source */
  128. #endif /* QUADSPI */
  129. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  130. uint32_t OspiClockSelection; /*!< Specifies OSPI clock source
  131. This parameter can be a value of @ref RCCEx_OSPI_Clock_Source */
  132. #endif /*(OCTOSPI1) || (OCTOSPI2)*/
  133. #if defined(DSI)
  134. uint32_t DsiClockSelection; /*!< Specifies DSI clock source
  135. This parameter can be a value of @ref RCCEx_DSI_Clock_Source */
  136. #endif /* DSI */
  137. uint32_t SdmmcClockSelection; /*!< Specifies SDMMC clock source
  138. This parameter can be a value of @ref RCCEx_SDMMC_Clock_Source */
  139. uint32_t CkperClockSelection; /*!< Specifies CKPER clock source
  140. This parameter can be a value of @ref RCCEx_CLKP_Clock_Source */
  141. uint32_t Sai1ClockSelection; /*!< Specifies SAI1 clock source
  142. This parameter can be a value of @ref RCCEx_SAI1_Clock_Source */
  143. #if defined(SAI3)
  144. uint32_t Sai23ClockSelection; /*!< Specifies SAI2/3 clock source
  145. This parameter can be a value of @ref RCCEx_SAI23_Clock_Source */
  146. #endif /* SAI3 */
  147. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  148. uint32_t Sai2AClockSelection; /*!< Specifies SAI2A clock source
  149. This parameter can be a value of @ref RCCEx_SAI2A_Clock_Source */
  150. #endif /* RCC_CDCCIP1R_SAI2ASEL */
  151. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  152. uint32_t Sai2BClockSelection; /*!< Specifies SAI2B clock source
  153. This parameter can be a value of @ref RCCEx_SAI2B_Clock_Source */
  154. #endif /* RCC_CDCCIP1R_SAI2BSEL */
  155. uint32_t Spi123ClockSelection; /*!< Specifies SPI1/2/3 clock source
  156. This parameter can be a value of @ref RCCEx_SPI123_Clock_Source */
  157. uint32_t Spi45ClockSelection; /*!< Specifies SPI4/5 clock source
  158. This parameter can be a value of @ref RCCEx_SPI45_Clock_Source */
  159. uint32_t SpdifrxClockSelection; /*!< Specifies SPDIFRX Clock clock source
  160. This parameter can be a value of @ref RCCEx_SPDIFRX_Clock_Source */
  161. uint32_t Dfsdm1ClockSelection; /*!< Specifies DFSDM1 Clock clock source
  162. This parameter can be a value of @ref RCCEx_DFSDM1_Clock_Source */
  163. #if defined(DFSDM2_BASE)
  164. uint32_t Dfsdm2ClockSelection; /*!< Specifies DFSDM2 Clock clock source
  165. This parameter can be a value of @ref RCCEx_DFSDM2_Clock_Source */
  166. #endif /* DFSDM2_BASE */
  167. #if defined(FDCAN1) || defined(FDCAN2)
  168. uint32_t FdcanClockSelection; /*!< Specifies FDCAN Clock clock source
  169. This parameter can be a value of @ref RCCEx_FDCAN_Clock_Source */
  170. #endif /*FDCAN1 || FDCAN2*/
  171. uint32_t Swpmi1ClockSelection; /*!< Specifies SWPMI1 Clock clock source
  172. This parameter can be a value of @ref RCCEx_SWPMI1_Clock_Source */
  173. uint32_t Usart234578ClockSelection; /*!< Specifies USART2/3/4/5/7/8 clock source
  174. This parameter can be a value of @ref RCCEx_USART234578_Clock_Source */
  175. uint32_t Usart16ClockSelection; /*!< Specifies USART1/6 clock source
  176. This parameter can be a value of @ref RCCEx_USART16_Clock_Source */
  177. uint32_t RngClockSelection; /*!< Specifies RNG clock source
  178. This parameter can be a value of @ref RCCEx_RNG_Clock_Source */
  179. #if defined(I2C5)
  180. uint32_t I2c1235ClockSelection; /*!< Specifies I2C1/2/3/5 clock source
  181. This parameter can be a value of @ref RCCEx_I2C1235_Clock_Source */
  182. #else
  183. uint32_t I2c123ClockSelection; /*!< Specifies I2C1/2/3 clock source
  184. This parameter can be a value of @ref RCCEx_I2C1235_Clock_Source */
  185. #endif /*I2C5*/
  186. uint32_t UsbClockSelection; /*!< Specifies USB clock source
  187. This parameter can be a value of @ref RCCEx_USB_Clock_Source */
  188. uint32_t CecClockSelection; /*!< Specifies CEC clock source
  189. This parameter can be a value of @ref RCCEx_CEC_Clock_Source */
  190. uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 clock source
  191. This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */
  192. uint32_t Lpuart1ClockSelection; /*!< Specifies LPUART1 clock source
  193. This parameter can be a value of @ref RCCEx_LPUART1_Clock_Source */
  194. uint32_t I2c4ClockSelection; /*!< Specifies I2C4 clock source
  195. This parameter can be a value of @ref RCCEx_I2C4_Clock_Source */
  196. uint32_t Lptim2ClockSelection; /*!< Specifies LPTIM2 clock source
  197. This parameter can be a value of @ref RCCEx_LPTIM2_Clock_Source */
  198. uint32_t Lptim345ClockSelection; /*!< Specifies LPTIM3/4/5 clock source
  199. This parameter can be a value of @ref RCCEx_LPTIM345_Clock_Source */
  200. uint32_t AdcClockSelection; /*!< Specifies ADC interface clock source
  201. This parameter can be a value of @ref RCCEx_ADC_Clock_Source */
  202. #if defined(SAI4)
  203. uint32_t Sai4AClockSelection; /*!< Specifies SAI4A clock source
  204. This parameter can be a value of @ref RCCEx_SAI4A_Clock_Source */
  205. uint32_t Sai4BClockSelection; /*!< Specifies SAI4B clock source
  206. This parameter can be a value of @ref RCCEx_SAI4B_Clock_Source */
  207. #endif /* SAI4 */
  208. uint32_t Spi6ClockSelection; /*!< Specifies SPI6 clock source
  209. This parameter can be a value of @ref RCCEx_SPI6_Clock_Source */
  210. uint32_t RTCClockSelection; /*!< Specifies RTC Clock clock source
  211. This parameter can be a value of @ref RCC_RTC_Clock_Source */
  212. #if defined(HRTIM1)
  213. uint32_t Hrtim1ClockSelection; /*!< Specifies HRTIM1 Clock clock source
  214. This parameter can be a value of @ref RCCEx_HRTIM1_Clock_Source */
  215. #endif /* HRTIM1 */
  216. uint32_t TIMPresSelection; /*!< Specifies TIM Clock Prescalers Selection.
  217. This parameter can be a value of @ref RCCEx_TIM_Prescaler_Selection */
  218. }RCC_PeriphCLKInitTypeDef;
  219. /*!< Alias for Inter STM32H7 lines compatibility regarding RCC_PeriphCLKInitTypeDef field : I2C5 available on some lines only */
  220. #if defined(I2C5)
  221. #define I2c123ClockSelection I2c1235ClockSelection
  222. #else
  223. #define I2c1235ClockSelection I2c123ClockSelection
  224. #endif /*I2C5*/
  225. /**
  226. * @brief RCC_CRS Init structure definition
  227. */
  228. typedef struct
  229. {
  230. uint32_t Prescaler; /*!< Specifies the division factor of the SYNC signal.
  231. This parameter can be a value of @ref RCCEx_CRS_SynchroDivider */
  232. uint32_t Source; /*!< Specifies the SYNC signal source.
  233. This parameter can be a value of @ref RCCEx_CRS_SynchroSource */
  234. uint32_t Polarity; /*!< Specifies the input polarity for the SYNC signal source.
  235. This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */
  236. uint32_t ReloadValue; /*!< Specifies the value to be loaded in the frequency error counter with each SYNC event.
  237. It can be calculated in using macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__)
  238. This parameter must be a number between 0 and 0xFFFF or a value of @ref RCCEx_CRS_ReloadValueDefault .*/
  239. uint32_t ErrorLimitValue; /*!< Specifies the value to be used to evaluate the captured frequency error value.
  240. This parameter must be a number between 0 and 0xFF or a value of @ref RCCEx_CRS_ErrorLimitDefault */
  241. uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator.
  242. This parameter must be a number between 0 and 0x3F or a value of @ref RCCEx_CRS_HSI48CalibrationDefault */
  243. }RCC_CRSInitTypeDef;
  244. /**
  245. * @brief RCC_CRS Synchronization structure definition
  246. */
  247. typedef struct
  248. {
  249. uint32_t ReloadValue; /*!< Specifies the value loaded in the Counter reload value.
  250. This parameter must be a number between 0 and 0xFFFF */
  251. uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming.
  252. This parameter must be a number between 0 and 0x3F */
  253. uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter
  254. value latched in the time of the last SYNC event.
  255. This parameter must be a number between 0 and 0xFFFF */
  256. uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the
  257. frequency error counter latched in the time of the last SYNC event.
  258. It shows whether the actual frequency is below or above the target.
  259. This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/
  260. }RCC_CRSSynchroInfoTypeDef;
  261. /**
  262. * @}
  263. */
  264. /* Exported constants --------------------------------------------------------*/
  265. /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
  266. * @{
  267. */
  268. /** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection
  269. * @{
  270. */
  271. #if defined(UART9) && defined(USART10)
  272. #define RCC_PERIPHCLK_USART16910 (0x00000001U)
  273. #define RCC_PERIPHCLK_USART1 RCC_PERIPHCLK_USART16910
  274. #define RCC_PERIPHCLK_USART6 RCC_PERIPHCLK_USART16910
  275. #define RCC_PERIPHCLK_UART9 RCC_PERIPHCLK_USART16910
  276. #define RCC_PERIPHCLK_USART10 RCC_PERIPHCLK_USART16910
  277. /*alias*/
  278. #define RCC_PERIPHCLK_USART16 RCC_PERIPHCLK_USART16910
  279. #else
  280. #define RCC_PERIPHCLK_USART16 (0x00000001U)
  281. #define RCC_PERIPHCLK_USART1 RCC_PERIPHCLK_USART16
  282. #define RCC_PERIPHCLK_USART6 RCC_PERIPHCLK_USART16
  283. /* alias */
  284. #define RCC_PERIPHCLK_USART16910 RCC_PERIPHCLK_USART16
  285. #endif /* UART9 && USART10*/
  286. #define RCC_PERIPHCLK_USART234578 (0x00000002U)
  287. #define RCC_PERIPHCLK_USART2 RCC_PERIPHCLK_USART234578
  288. #define RCC_PERIPHCLK_USART3 RCC_PERIPHCLK_USART234578
  289. #define RCC_PERIPHCLK_UART4 RCC_PERIPHCLK_USART234578
  290. #define RCC_PERIPHCLK_UART5 RCC_PERIPHCLK_USART234578
  291. #define RCC_PERIPHCLK_UART7 RCC_PERIPHCLK_USART234578
  292. #define RCC_PERIPHCLK_UART8 RCC_PERIPHCLK_USART234578
  293. #define RCC_PERIPHCLK_LPUART1 (0x00000004U)
  294. #if defined(I2C5)
  295. #define RCC_PERIPHCLK_I2C1235 (0x00000008U)
  296. #define RCC_PERIPHCLK_I2C1 RCC_PERIPHCLK_I2C1235
  297. #define RCC_PERIPHCLK_I2C2 RCC_PERIPHCLK_I2C1235
  298. #define RCC_PERIPHCLK_I2C3 RCC_PERIPHCLK_I2C1235
  299. /* alias */
  300. #define RCC_PERIPHCLK_I2C123 RCC_PERIPHCLK_I2C1235
  301. #else
  302. #define RCC_PERIPHCLK_I2C123 (0x00000008U)
  303. #define RCC_PERIPHCLK_I2C1 RCC_PERIPHCLK_I2C123
  304. #define RCC_PERIPHCLK_I2C2 RCC_PERIPHCLK_I2C123
  305. #define RCC_PERIPHCLK_I2C3 RCC_PERIPHCLK_I2C123
  306. #endif /*I2C5*/
  307. #define RCC_PERIPHCLK_I2C4 (0x00000010U)
  308. #if defined(I2C5)
  309. #define RCC_PERIPHCLK_I2C5 RCC_PERIPHCLK_I2C1235
  310. #endif /*I2C5*/
  311. #define RCC_PERIPHCLK_LPTIM1 (0x00000020U)
  312. #define RCC_PERIPHCLK_LPTIM2 (0x00000040U)
  313. #define RCC_PERIPHCLK_LPTIM345 (0x00000080U)
  314. #define RCC_PERIPHCLK_LPTIM3 RCC_PERIPHCLK_LPTIM345
  315. #if defined(LPTIM4)
  316. #define RCC_PERIPHCLK_LPTIM4 RCC_PERIPHCLK_LPTIM345
  317. #endif /*LPTIM4*/
  318. #if defined(LPTIM5)
  319. #define RCC_PERIPHCLK_LPTIM5 RCC_PERIPHCLK_LPTIM345
  320. #endif /*LPTIM5*/
  321. #define RCC_PERIPHCLK_SAI1 (0x00000100U)
  322. #if defined(SAI3)
  323. #define RCC_PERIPHCLK_SAI23 (0x00000200U)
  324. #define RCC_PERIPHCLK_SAI2 RCC_PERIPHCLK_SAI23
  325. #define RCC_PERIPHCLK_SAI3 RCC_PERIPHCLK_SAI23
  326. #endif /* SAI3 */
  327. #if defined(RCC_CDCCIP1R_SAI2ASEL_0)
  328. #define RCC_PERIPHCLK_SAI2A (0x00000200U)
  329. #endif /* RCC_CDCCIP1R_SAI2ASEL_0 */
  330. #if defined(RCC_CDCCIP1R_SAI2BSEL_0)
  331. #define RCC_PERIPHCLK_SAI2B (0x00000400U)
  332. #endif /* RCC_CDCCIP1R_SAI2BSEL_0 */
  333. #if defined(SAI4)
  334. #define RCC_PERIPHCLK_SAI4A (0x00000400U)
  335. #define RCC_PERIPHCLK_SAI4B (0x00000800U)
  336. #endif /* SAI4 */
  337. #define RCC_PERIPHCLK_SPI123 (0x00001000U)
  338. #define RCC_PERIPHCLK_SPI1 RCC_PERIPHCLK_SPI123
  339. #define RCC_PERIPHCLK_SPI2 RCC_PERIPHCLK_SPI123
  340. #define RCC_PERIPHCLK_SPI3 RCC_PERIPHCLK_SPI123
  341. #define RCC_PERIPHCLK_SPI45 (0x00002000U)
  342. #define RCC_PERIPHCLK_SPI4 RCC_PERIPHCLK_SPI45
  343. #define RCC_PERIPHCLK_SPI5 RCC_PERIPHCLK_SPI45
  344. #define RCC_PERIPHCLK_SPI6 (0x00004000U)
  345. #define RCC_PERIPHCLK_FDCAN (0x00008000U)
  346. #define RCC_PERIPHCLK_SDMMC (0x00010000U)
  347. #define RCC_PERIPHCLK_RNG (0x00020000U)
  348. #define RCC_PERIPHCLK_USB (0x00040000U)
  349. #define RCC_PERIPHCLK_ADC (0x00080000U)
  350. #define RCC_PERIPHCLK_SWPMI1 (0x00100000U)
  351. #define RCC_PERIPHCLK_DFSDM1 (0x00200000U)
  352. #if defined(DFSDM2_BASE)
  353. #define RCC_PERIPHCLK_DFSDM2 (0x00000800U)
  354. #endif /* DFSDM2 */
  355. #define RCC_PERIPHCLK_RTC (0x00400000U)
  356. #define RCC_PERIPHCLK_CEC (0x00800000U)
  357. #define RCC_PERIPHCLK_FMC (0x01000000U)
  358. #if defined(QUADSPI)
  359. #define RCC_PERIPHCLK_QSPI (0x02000000U)
  360. #endif /* QUADSPI */
  361. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  362. #define RCC_PERIPHCLK_OSPI (0x02000000U)
  363. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  364. #define RCC_PERIPHCLK_DSI (0x04000000U)
  365. #define RCC_PERIPHCLK_SPDIFRX (0x08000000U)
  366. #if defined(HRTIM1)
  367. #define RCC_PERIPHCLK_HRTIM1 (0x10000000U)
  368. #endif /* HRTIM1 */
  369. #if defined(LTDC)
  370. #define RCC_PERIPHCLK_LTDC (0x20000000U)
  371. #endif /* LTDC */
  372. #define RCC_PERIPHCLK_TIM (0x40000000U)
  373. #define RCC_PERIPHCLK_CKPER (0x80000000U)
  374. /**
  375. * @}
  376. */
  377. /** @defgroup RCC_PLL2_Clock_Output RCC PLL2 Clock Output
  378. * @{
  379. */
  380. #define RCC_PLL2_DIVP RCC_PLLCFGR_DIVP2EN
  381. #define RCC_PLL2_DIVQ RCC_PLLCFGR_DIVQ2EN
  382. #define RCC_PLL2_DIVR RCC_PLLCFGR_DIVR2EN
  383. /**
  384. * @}
  385. */
  386. /** @defgroup RCC_PLL3_Clock_Output RCC PLL3 Clock Output
  387. * @{
  388. */
  389. #define RCC_PLL3_DIVP RCC_PLLCFGR_DIVP3EN
  390. #define RCC_PLL3_DIVQ RCC_PLLCFGR_DIVQ3EN
  391. #define RCC_PLL3_DIVR RCC_PLLCFGR_DIVR3EN
  392. /**
  393. * @}
  394. */
  395. /** @defgroup RCC_PLL2_VCI_Range RCC PLL2 VCI Range
  396. * @{
  397. */
  398. #define RCC_PLL2VCIRANGE_0 RCC_PLLCFGR_PLL2RGE_0 /*!< Clock range frequency between 1 and 2 MHz */
  399. #define RCC_PLL2VCIRANGE_1 RCC_PLLCFGR_PLL2RGE_1 /*!< Clock range frequency between 2 and 4 MHz */
  400. #define RCC_PLL2VCIRANGE_2 RCC_PLLCFGR_PLL2RGE_2 /*!< Clock range frequency between 4 and 8 MHz */
  401. #define RCC_PLL2VCIRANGE_3 RCC_PLLCFGR_PLL2RGE_3 /*!< Clock range frequency between 8 and 16 MHz */
  402. /**
  403. * @}
  404. */
  405. /** @defgroup RCC_PLL2_VCO_Range RCC PLL2 VCO Range
  406. * @{
  407. */
  408. #define RCC_PLL2VCOWIDE (0x00000000U)
  409. #define RCC_PLL2VCOMEDIUM RCC_PLLCFGR_PLL2VCOSEL
  410. /**
  411. * @}
  412. */
  413. /** @defgroup RCC_PLL3_VCI_Range RCC PLL3 VCI Range
  414. * @{
  415. */
  416. #define RCC_PLL3VCIRANGE_0 RCC_PLLCFGR_PLL3RGE_0 /*!< Clock range frequency between 1 and 2 MHz */
  417. #define RCC_PLL3VCIRANGE_1 RCC_PLLCFGR_PLL3RGE_1 /*!< Clock range frequency between 2 and 4 MHz */
  418. #define RCC_PLL3VCIRANGE_2 RCC_PLLCFGR_PLL3RGE_2 /*!< Clock range frequency between 4 and 8 MHz */
  419. #define RCC_PLL3VCIRANGE_3 RCC_PLLCFGR_PLL3RGE_3 /*!< Clock range frequency between 8 and 16 MHz */
  420. /**
  421. * @}
  422. */
  423. /** @defgroup RCC_PLL3_VCO_Range RCC PLL3 VCO Range
  424. * @{
  425. */
  426. #define RCC_PLL3VCOWIDE (0x00000000U)
  427. #define RCC_PLL3VCOMEDIUM RCC_PLLCFGR_PLL3VCOSEL
  428. /**
  429. * @}
  430. */
  431. /** @defgroup RCCEx_USART16_Clock_Source RCCEx USART1/6 Clock Source
  432. * @{
  433. */
  434. #if defined(RCC_D2CCIP2R_USART16SEL)
  435. #define RCC_USART16CLKSOURCE_D2PCLK2 (0x00000000U)
  436. /* alias */
  437. #define RCC_USART16CLKSOURCE_PCLK2 RCC_USART16CLKSOURCE_D2PCLK2
  438. #define RCC_USART16CLKSOURCE_PLL2 RCC_D2CCIP2R_USART16SEL_0
  439. #define RCC_USART16CLKSOURCE_PLL3 RCC_D2CCIP2R_USART16SEL_1
  440. #define RCC_USART16CLKSOURCE_HSI (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_1)
  441. #define RCC_USART16CLKSOURCE_CSI RCC_D2CCIP2R_USART16SEL_2
  442. #define RCC_USART16CLKSOURCE_LSE (RCC_D2CCIP2R_USART16SEL_0 | RCC_D2CCIP2R_USART16SEL_2)
  443. #elif defined(RCC_CDCCIP2R_USART16910SEL)
  444. #define RCC_USART16910CLKSOURCE_CDPCLK2 (0x00000000U)
  445. /* alias */
  446. #define RCC_USART16910CLKSOURCE_D2PCLK2 RCC_USART16910CLKSOURCE_CDPCLK2
  447. #define RCC_USART16910CLKSOURCE_PLL2 RCC_CDCCIP2R_USART16910SEL_0
  448. #define RCC_USART16910CLKSOURCE_PLL3 RCC_CDCCIP2R_USART16910SEL_1
  449. #define RCC_USART16910CLKSOURCE_HSI (RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_1)
  450. #define RCC_USART16910CLKSOURCE_CSI RCC_CDCCIP2R_USART16910SEL_2
  451. #define RCC_USART16910CLKSOURCE_LSE (RCC_CDCCIP2R_USART16910SEL_0 | RCC_CDCCIP2R_USART16910SEL_2)
  452. /* Aliases */
  453. #define RCC_USART16CLKSOURCE_CDPCLK2 RCC_USART16910CLKSOURCE_CDPCLK2
  454. #define RCC_USART16CLKSOURCE_PCLK2 RCC_USART16CLKSOURCE_CDPCLK2
  455. #define RCC_USART16CLKSOURCE_D2PCLK2 RCC_USART16CLKSOURCE_CDPCLK2
  456. #define RCC_USART16CLKSOURCE_PLL2 RCC_USART16910CLKSOURCE_PLL2
  457. #define RCC_USART16CLKSOURCE_PLL3 RCC_USART16910CLKSOURCE_PLL3
  458. #define RCC_USART16CLKSOURCE_HSI RCC_USART16910CLKSOURCE_HSI
  459. #define RCC_USART16CLKSOURCE_CSI RCC_USART16910CLKSOURCE_CSI
  460. #define RCC_USART16CLKSOURCE_LSE RCC_USART16910CLKSOURCE_LSE
  461. #else /* RCC_D2CCIP2R_USART16910SEL */
  462. #define RCC_USART16910CLKSOURCE_D2PCLK2 (0x00000000U)
  463. #define RCC_USART16910CLKSOURCE_PLL2 RCC_D2CCIP2R_USART16910SEL_0
  464. #define RCC_USART16910CLKSOURCE_PLL3 RCC_D2CCIP2R_USART16910SEL_1
  465. #define RCC_USART16910CLKSOURCE_HSI (RCC_D2CCIP2R_USART16910SEL_0 | RCC_D2CCIP2R_USART16910SEL_1)
  466. #define RCC_USART16910CLKSOURCE_CSI RCC_D2CCIP2R_USART16910SEL_2
  467. #define RCC_USART16910CLKSOURCE_LSE (RCC_D2CCIP2R_USART16910SEL_0 | RCC_D2CCIP2R_USART16910SEL_2)
  468. /* Aliases */
  469. #define RCC_USART16CLKSOURCE_D2PCLK2 RCC_USART16910CLKSOURCE_D2PCLK2
  470. #define RCC_USART16CLKSOURCE_PCLK2 RCC_USART16910CLKSOURCE_D2PCLK2
  471. #define RCC_USART16CLKSOURCE_PLL2 RCC_USART16910CLKSOURCE_PLL2
  472. #define RCC_USART16CLKSOURCE_PLL3 RCC_USART16910CLKSOURCE_PLL3
  473. #define RCC_USART16CLKSOURCE_HSI RCC_USART16910CLKSOURCE_HSI
  474. #define RCC_USART16CLKSOURCE_CSI RCC_USART16910CLKSOURCE_CSI
  475. #define RCC_USART16CLKSOURCE_LSE RCC_USART16910CLKSOURCE_LSE
  476. #endif /* RCC_D2CCIP2R_USART16SEL */
  477. /**
  478. * @}
  479. */
  480. /** @defgroup RCCEx_USART1_Clock_Source RCCEx USART1 Clock Source
  481. * @{
  482. */
  483. #define RCC_USART1CLKSOURCE_D2PCLK2 RCC_USART16CLKSOURCE_D2PCLK2
  484. #define RCC_USART1CLKSOURCE_PLL2 RCC_USART16CLKSOURCE_PLL2
  485. #define RCC_USART1CLKSOURCE_PLL3 RCC_USART16CLKSOURCE_PLL3
  486. #define RCC_USART1CLKSOURCE_HSI RCC_USART16CLKSOURCE_HSI
  487. #define RCC_USART1CLKSOURCE_CSI RCC_USART16CLKSOURCE_CSI
  488. #define RCC_USART1CLKSOURCE_LSE RCC_USART16CLKSOURCE_LSE
  489. /**
  490. * @}
  491. */
  492. /** @defgroup RCCEx_USART6_Clock_Source RCCEx USART6 Clock Source
  493. * @{
  494. */
  495. #define RCC_USART6CLKSOURCE_D2PCLK2 RCC_USART16CLKSOURCE_D2PCLK2
  496. #define RCC_USART6CLKSOURCE_PLL2 RCC_USART16CLKSOURCE_PLL2
  497. #define RCC_USART6CLKSOURCE_PLL3 RCC_USART16CLKSOURCE_PLL3
  498. #define RCC_USART6CLKSOURCE_HSI RCC_USART16CLKSOURCE_HSI
  499. #define RCC_USART6CLKSOURCE_CSI RCC_USART16CLKSOURCE_CSI
  500. #define RCC_USART6CLKSOURCE_LSE RCC_USART16CLKSOURCE_LSE
  501. /**
  502. * @}
  503. */
  504. #if defined(UART9)
  505. /** @defgroup RCCEx_UART9_Clock_Source RCCEx UART9 Clock Source
  506. * @{
  507. */
  508. #define RCC_UART9CLKSOURCE_D2PCLK2 RCC_USART16CLKSOURCE_D2PCLK2
  509. #define RCC_UART9CLKSOURCE_PLL2 RCC_USART16CLKSOURCE_PLL2
  510. #define RCC_UART9CLKSOURCE_PLL3 RCC_USART16CLKSOURCE_PLL3
  511. #define RCC_UART9CLKSOURCE_HSI RCC_USART16CLKSOURCE_HSI
  512. #define RCC_UART9CLKSOURCE_CSI RCC_USART16CLKSOURCE_CSI
  513. #define RCC_UART9CLKSOURCE_LSE RCC_USART16CLKSOURCE_LSE
  514. /**
  515. * @}
  516. */
  517. #endif /* UART9 */
  518. #if defined(USART10)
  519. /** @defgroup RCCEx_USART10_Clock_Source RCCEx USART10 Clock Source
  520. * @{
  521. */
  522. #define RCC_USART10CLKSOURCE_D2PCLK2 RCC_USART16CLKSOURCE_D2PCLK2
  523. #define RCC_USART10CLKSOURCE_PLL2 RCC_USART16CLKSOURCE_PLL2
  524. #define RCC_USART10CLKSOURCE_PLL3 RCC_USART16CLKSOURCE_PLL3
  525. #define RCC_USART10CLKSOURCE_HSI RCC_USART16CLKSOURCE_HSI
  526. #define RCC_USART10CLKSOURCE_CSI RCC_USART16CLKSOURCE_CSI
  527. #define RCC_USART10CLKSOURCE_LSE RCC_USART16CLKSOURCE_LSE
  528. /**
  529. * @}
  530. */
  531. #endif /* USART10 */
  532. /** @defgroup RCCEx_USART234578_Clock_Source RCCEx USART2/3/4/5/7/8 Clock Source
  533. * @{
  534. */
  535. #if defined(RCC_D2CCIP2R_USART28SEL)
  536. #define RCC_USART234578CLKSOURCE_D2PCLK1 (0x00000000U)
  537. /* alias */
  538. #define RCC_USART234578CLKSOURCE_PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  539. #define RCC_USART234578CLKSOURCE_PLL2 RCC_D2CCIP2R_USART28SEL_0
  540. #define RCC_USART234578CLKSOURCE_PLL3 RCC_D2CCIP2R_USART28SEL_1
  541. #define RCC_USART234578CLKSOURCE_HSI (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_1)
  542. #define RCC_USART234578CLKSOURCE_CSI RCC_D2CCIP2R_USART28SEL_2
  543. #define RCC_USART234578CLKSOURCE_LSE (RCC_D2CCIP2R_USART28SEL_0 | RCC_D2CCIP2R_USART28SEL_2)
  544. #else
  545. #define RCC_USART234578CLKSOURCE_CDPCLK1 (0x00000000U)
  546. /* alias */
  547. #define RCC_USART234578CLKSOURCE_PCLK1 RCC_USART234578CLKSOURCE_CDPCLK1
  548. #define RCC_USART234578CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_CDPCLK1
  549. #define RCC_USART234578CLKSOURCE_PLL2 RCC_CDCCIP2R_USART234578SEL_0
  550. #define RCC_USART234578CLKSOURCE_PLL3 RCC_CDCCIP2R_USART234578SEL_1
  551. #define RCC_USART234578CLKSOURCE_HSI (RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_1)
  552. #define RCC_USART234578CLKSOURCE_CSI RCC_CDCCIP2R_USART234578SEL_2
  553. #define RCC_USART234578CLKSOURCE_LSE (RCC_CDCCIP2R_USART234578SEL_0 | RCC_CDCCIP2R_USART234578SEL_2)
  554. #endif /* RCC_D2CCIP2R_USART28SEL */
  555. /**
  556. * @}
  557. */
  558. /** @defgroup RCCEx_USART2_Clock_Source RCCEx USART2 Clock Source
  559. * @{
  560. */
  561. #define RCC_USART2CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  562. #define RCC_USART2CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  563. #define RCC_USART2CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  564. #define RCC_USART2CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  565. #define RCC_USART2CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  566. #define RCC_USART2CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  567. /**
  568. * @}
  569. */
  570. /** @defgroup RCCEx_USART3_Clock_Source RCCEx USART3 Clock Source
  571. * @{
  572. */
  573. #define RCC_USART3CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  574. #define RCC_USART3CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  575. #define RCC_USART3CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  576. #define RCC_USART3CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  577. #define RCC_USART3CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  578. #define RCC_USART3CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  579. /**
  580. * @}
  581. */
  582. /** @defgroup RCCEx_UART4_Clock_Source RCCEx UART4 Clock Source
  583. * @{
  584. */
  585. #define RCC_UART4CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  586. #define RCC_UART4CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  587. #define RCC_UART4CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  588. #define RCC_UART4CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  589. #define RCC_UART4CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  590. #define RCC_UART4CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  591. /**
  592. * @}
  593. */
  594. /** @defgroup RCCEx_UART5_Clock_Source RCCEx UART5 Clock Source
  595. * @{
  596. */
  597. #define RCC_UART5CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  598. #define RCC_UART5CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  599. #define RCC_UART5CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  600. #define RCC_UART5CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  601. #define RCC_UART5CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  602. #define RCC_UART5CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  603. /**
  604. * @}
  605. */
  606. /** @defgroup RCCEx_UART7_Clock_Source RCCEx UART7 Clock Source
  607. * @{
  608. */
  609. #define RCC_UART7CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  610. #define RCC_UART7CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  611. #define RCC_UART7CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  612. #define RCC_UART7CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  613. #define RCC_UART7CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  614. #define RCC_UART7CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  615. /**
  616. * @}
  617. */
  618. /** @defgroup RCCEx_UART8_Clock_Source RCCEx UART8 Clock Source
  619. * @{
  620. */
  621. #define RCC_UART8CLKSOURCE_D2PCLK1 RCC_USART234578CLKSOURCE_D2PCLK1
  622. #define RCC_UART8CLKSOURCE_PLL2 RCC_USART234578CLKSOURCE_PLL2
  623. #define RCC_UART8CLKSOURCE_PLL3 RCC_USART234578CLKSOURCE_PLL3
  624. #define RCC_UART8CLKSOURCE_HSI RCC_USART234578CLKSOURCE_HSI
  625. #define RCC_UART8CLKSOURCE_CSI RCC_USART234578CLKSOURCE_CSI
  626. #define RCC_UART8CLKSOURCE_LSE RCC_USART234578CLKSOURCE_LSE
  627. /**
  628. * @}
  629. */
  630. /** @defgroup RCCEx_LPUART1_Clock_Source RCCEx LPUART1 Clock Source
  631. * @{
  632. */
  633. #if defined(RCC_D3CCIPR_LPUART1SEL)
  634. #define RCC_LPUART1CLKSOURCE_D3PCLK1 (0x00000000U)
  635. /* alias */
  636. #define RCC_LPUART1CLKSOURCE_PCLK4 RCC_LPUART1CLKSOURCE_D3PCLK1
  637. #define RCC_LPUART1CLKSOURCE_PLL2 RCC_D3CCIPR_LPUART1SEL_0
  638. #define RCC_LPUART1CLKSOURCE_PLL3 RCC_D3CCIPR_LPUART1SEL_1
  639. #define RCC_LPUART1CLKSOURCE_HSI (RCC_D3CCIPR_LPUART1SEL_0 | RCC_D3CCIPR_LPUART1SEL_1)
  640. #define RCC_LPUART1CLKSOURCE_CSI RCC_D3CCIPR_LPUART1SEL_2
  641. #define RCC_LPUART1CLKSOURCE_LSE (RCC_D3CCIPR_LPUART1SEL_2 | RCC_D3CCIPR_LPUART1SEL_0)
  642. #else
  643. #define RCC_LPUART1CLKSOURCE_SRDPCLK4 (0x00000000U)
  644. /* alias*/
  645. #define RCC_LPUART1CLKSOURCE_PCLK4 RCC_LPUART1CLKSOURCE_SRDPCLK4
  646. #define RCC_LPUART1CLKSOURCE_D3PCLK1 RCC_LPUART1CLKSOURCE_SRDPCLK4
  647. #define RCC_LPUART1CLKSOURCE_PLL2 RCC_SRDCCIPR_LPUART1SEL_0
  648. #define RCC_LPUART1CLKSOURCE_PLL3 RCC_SRDCCIPR_LPUART1SEL_1
  649. #define RCC_LPUART1CLKSOURCE_HSI (RCC_SRDCCIPR_LPUART1SEL_0 | RCC_SRDCCIPR_LPUART1SEL_1)
  650. #define RCC_LPUART1CLKSOURCE_CSI RCC_SRDCCIPR_LPUART1SEL_2
  651. #define RCC_LPUART1CLKSOURCE_LSE (RCC_SRDCCIPR_LPUART1SEL_2 | RCC_SRDCCIPR_LPUART1SEL_0)
  652. #endif /* RCC_D3CCIPR_LPUART1SEL */
  653. /**
  654. * @}
  655. */
  656. /** @defgroup RCCEx_I2C1235_Clock_Source RCCEx I2C1/2/3/5 Clock Source
  657. * @{
  658. */
  659. #if defined (RCC_D2CCIP2R_I2C123SEL)
  660. #define RCC_I2C123CLKSOURCE_D2PCLK1 (0x00000000U)
  661. #define RCC_I2C123CLKSOURCE_PLL3 RCC_D2CCIP2R_I2C123SEL_0
  662. #define RCC_I2C123CLKSOURCE_HSI RCC_D2CCIP2R_I2C123SEL_1
  663. #define RCC_I2C123CLKSOURCE_CSI (RCC_D2CCIP2R_I2C123SEL_0 | RCC_D2CCIP2R_I2C123SEL_1)
  664. /* aliases */
  665. #define RCC_I2C1235CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_D2PCLK1
  666. #define RCC_I2C1235CLKSOURCE_PLL3 RCC_I2C123CLKSOURCE_PLL3
  667. #define RCC_I2C1235CLKSOURCE_HSI RCC_I2C123CLKSOURCE_HSI
  668. #define RCC_I2C1235CLKSOURCE_CSI RCC_I2C123CLKSOURCE_CSI
  669. #elif defined(RCC_CDCCIP2R_I2C123SEL)
  670. #define RCC_I2C123CLKSOURCE_CDPCLK1 (0x00000000U)
  671. /* alias */
  672. #define RCC_I2C123CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_CDPCLK1
  673. #define RCC_I2C123CLKSOURCE_PLL3 RCC_CDCCIP2R_I2C123SEL_0
  674. #define RCC_I2C123CLKSOURCE_HSI RCC_CDCCIP2R_I2C123SEL_1
  675. #define RCC_I2C123CLKSOURCE_CSI (RCC_CDCCIP2R_I2C123SEL_0 | RCC_CDCCIP2R_I2C123SEL_1)
  676. /* aliases */
  677. #define RCC_I2C1235CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_D2PCLK1
  678. #define RCC_I2C1235CLKSOURCE_PLL3 RCC_I2C123CLKSOURCE_PLL3
  679. #define RCC_I2C1235CLKSOURCE_HSI RCC_I2C123CLKSOURCE_HSI
  680. #define RCC_I2C1235CLKSOURCE_CSI RCC_I2C123CLKSOURCE_CSI
  681. #elif defined(I2C5)
  682. #define RCC_I2C1235CLKSOURCE_D2PCLK1 (0x00000000U)
  683. #define RCC_I2C1235CLKSOURCE_PLL3 RCC_D2CCIP2R_I2C1235SEL_0
  684. #define RCC_I2C1235CLKSOURCE_HSI RCC_D2CCIP2R_I2C1235SEL_1
  685. #define RCC_I2C1235CLKSOURCE_CSI (RCC_D2CCIP2R_I2C1235SEL_0 | RCC_D2CCIP2R_I2C1235SEL_1)
  686. /* aliases */
  687. #define RCC_I2C123CLKSOURCE_D2PCLK1 RCC_I2C1235CLKSOURCE_D2PCLK1
  688. #define RCC_I2C123CLKSOURCE_PLL3 RCC_I2C1235CLKSOURCE_PLL3
  689. #define RCC_I2C123CLKSOURCE_HSI RCC_I2C1235CLKSOURCE_HSI
  690. #define RCC_I2C123CLKSOURCE_CSI RCC_I2C1235CLKSOURCE_CSI
  691. #endif /* RCC_D2CCIP2R_I2C123SEL */
  692. /**
  693. * @}
  694. */
  695. /** @defgroup RCCEx_I2C1_Clock_Source RCCEx I2C1 Clock Source
  696. * @{
  697. */
  698. #if defined(I2C5)
  699. #define RCC_I2C1CLKSOURCE_D2PCLK1 RCC_I2C1235CLKSOURCE_D2PCLK1
  700. #define RCC_I2C1CLKSOURCE_PLL3 RCC_I2C1235CLKSOURCE_PLL3
  701. #define RCC_I2C1CLKSOURCE_HSI RCC_I2C1235CLKSOURCE_HSI
  702. #define RCC_I2C1CLKSOURCE_CSI RCC_I2C1235CLKSOURCE_CSI
  703. #else
  704. #define RCC_I2C1CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_D2PCLK1
  705. #define RCC_I2C1CLKSOURCE_PLL3 RCC_I2C123CLKSOURCE_PLL3
  706. #define RCC_I2C1CLKSOURCE_HSI RCC_I2C123CLKSOURCE_HSI
  707. #define RCC_I2C1CLKSOURCE_CSI RCC_I2C123CLKSOURCE_CSI
  708. #endif /*I2C5*/
  709. /**
  710. * @}
  711. */
  712. /** @defgroup RCCEx_I2C2_Clock_Source RCCEx I2C2 Clock Source
  713. * @{
  714. */
  715. #if defined(I2C5)
  716. #define RCC_I2C2CLKSOURCE_D2PCLK1 RCC_I2C1235CLKSOURCE_D2PCLK1
  717. #define RCC_I2C2CLKSOURCE_PLL3 RCC_I2C1235CLKSOURCE_PLL3
  718. #define RCC_I2C2CLKSOURCE_HSI RCC_I2C1235CLKSOURCE_HSI
  719. #define RCC_I2C2CLKSOURCE_CSI RCC_I2C1235CLKSOURCE_CSI
  720. #else
  721. #define RCC_I2C2CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_D2PCLK1
  722. #define RCC_I2C2CLKSOURCE_PLL3 RCC_I2C123CLKSOURCE_PLL3
  723. #define RCC_I2C2CLKSOURCE_HSI RCC_I2C123CLKSOURCE_HSI
  724. #define RCC_I2C2CLKSOURCE_CSI RCC_I2C123CLKSOURCE_CSI
  725. #endif /*I2C5*/
  726. /**
  727. * @}
  728. */
  729. /** @defgroup RCCEx_I2C3_Clock_Source RCCEx I2C3 Clock Source
  730. * @{
  731. */
  732. #if defined(I2C5)
  733. #define RCC_I2C3CLKSOURCE_D2PCLK1 RCC_I2C1235CLKSOURCE_D2PCLK1
  734. #define RCC_I2C3CLKSOURCE_PLL3 RCC_I2C1235CLKSOURCE_PLL3
  735. #define RCC_I2C3CLKSOURCE_HSI RCC_I2C1235CLKSOURCE_HSI
  736. #define RCC_I2C3CLKSOURCE_CSI RCC_I2C1235CLKSOURCE_CSI
  737. #else
  738. #define RCC_I2C3CLKSOURCE_D2PCLK1 RCC_I2C123CLKSOURCE_D2PCLK1
  739. #define RCC_I2C3CLKSOURCE_PLL3 RCC_I2C123CLKSOURCE_PLL3
  740. #define RCC_I2C3CLKSOURCE_HSI RCC_I2C123CLKSOURCE_HSI
  741. #define RCC_I2C3CLKSOURCE_CSI RCC_I2C123CLKSOURCE_CSI
  742. #endif /*I2C5*/
  743. /**
  744. * @}
  745. */
  746. /** @defgroup RCCEx_I2C4_Clock_Source RCCEx I2C4 Clock Source
  747. * @{
  748. */
  749. #if defined(RCC_D3CCIPR_I2C4SEL)
  750. #define RCC_I2C4CLKSOURCE_D3PCLK1 (0x00000000U)
  751. #define RCC_I2C4CLKSOURCE_PLL3 RCC_D3CCIPR_I2C4SEL_0
  752. #define RCC_I2C4CLKSOURCE_HSI RCC_D3CCIPR_I2C4SEL_1
  753. #define RCC_I2C4CLKSOURCE_CSI (RCC_D3CCIPR_I2C4SEL_0 | RCC_D3CCIPR_I2C4SEL_1)
  754. #else
  755. #define RCC_I2C4CLKSOURCE_SRDPCLK4 (0x00000000U)
  756. /* alias */
  757. #define RCC_I2C4CLKSOURCE_D3PCLK1 RCC_I2C4CLKSOURCE_SRDPCLK4
  758. #define RCC_I2C4CLKSOURCE_PLL3 RCC_SRDCCIPR_I2C4SEL_0
  759. #define RCC_I2C4CLKSOURCE_HSI RCC_SRDCCIPR_I2C4SEL_1
  760. #define RCC_I2C4CLKSOURCE_CSI (RCC_SRDCCIPR_I2C4SEL_0 | RCC_SRDCCIPR_I2C4SEL_1)
  761. #endif /* RCC_D3CCIPR_I2C4SEL */
  762. /**
  763. * @}
  764. */
  765. #if defined(I2C5)
  766. /** @defgroup RCCEx_I2C5_Clock_Source RCCEx I2C5 Clock Source
  767. * @{
  768. */
  769. #define RCC_I2C5CLKSOURCE_D2PCLK1 RCC_I2C1235CLKSOURCE_D2PCLK1
  770. #define RCC_I2C5CLKSOURCE_PLL3 RCC_I2C1235CLKSOURCE_PLL3
  771. #define RCC_I2C5CLKSOURCE_HSI RCC_I2C1235CLKSOURCE_HSI
  772. #define RCC_I2C5CLKSOURCE_CSI RCC_I2C1235CLKSOURCE_CSI
  773. /**
  774. * @}
  775. */
  776. #endif /*I2C5*/
  777. /** @defgroup RCCEx_RNG_Clock_Source RCCEx RNG Clock Source
  778. * @{
  779. */
  780. #if defined(RCC_D2CCIP2R_RNGSEL)
  781. #define RCC_RNGCLKSOURCE_HSI48 (0x00000000U)
  782. #define RCC_RNGCLKSOURCE_PLL RCC_D2CCIP2R_RNGSEL_0
  783. #define RCC_RNGCLKSOURCE_LSE RCC_D2CCIP2R_RNGSEL_1
  784. #define RCC_RNGCLKSOURCE_LSI RCC_D2CCIP2R_RNGSEL
  785. #else
  786. #define RCC_RNGCLKSOURCE_HSI48 (0x00000000U)
  787. #define RCC_RNGCLKSOURCE_PLL RCC_CDCCIP2R_RNGSEL_0
  788. #define RCC_RNGCLKSOURCE_LSE RCC_CDCCIP2R_RNGSEL_1
  789. #define RCC_RNGCLKSOURCE_LSI RCC_CDCCIP2R_RNGSEL
  790. #endif /* RCC_D2CCIP2R_RNGSEL */
  791. /**
  792. * @}
  793. */
  794. #if defined(HRTIM1)
  795. /** @defgroup RCCEx_HRTIM1_Clock_Source RCC Extended HRTIM1 Clock Source
  796. * @{
  797. */
  798. #define RCC_HRTIM1CLK_TIMCLK (0x00000000U)
  799. #define RCC_HRTIM1CLK_CPUCLK RCC_CFGR_HRTIMSEL
  800. /**
  801. * @}
  802. */
  803. #endif /*HRTIM1*/
  804. /** @defgroup RCCEx_USB_Clock_Source RCCEx USB Clock Source
  805. * @{
  806. */
  807. #if defined(RCC_D2CCIP2R_USBSEL)
  808. #define RCC_USBCLKSOURCE_PLL RCC_D2CCIP2R_USBSEL_0
  809. #define RCC_USBCLKSOURCE_PLL3 RCC_D2CCIP2R_USBSEL_1
  810. #define RCC_USBCLKSOURCE_HSI48 RCC_D2CCIP2R_USBSEL
  811. #else
  812. #define RCC_USBCLKSOURCE_PLL RCC_CDCCIP2R_USBSEL_0
  813. #define RCC_USBCLKSOURCE_PLL3 RCC_CDCCIP2R_USBSEL_1
  814. #define RCC_USBCLKSOURCE_HSI48 RCC_CDCCIP2R_USBSEL
  815. #endif /* RCC_D2CCIP2R_USBSEL */
  816. /**
  817. * @}
  818. */
  819. /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source
  820. * @{
  821. */
  822. #if defined(RCC_D2CCIP1R_SAI1SEL)
  823. #define RCC_SAI1CLKSOURCE_PLL (0x00000000U)
  824. #define RCC_SAI1CLKSOURCE_PLL2 RCC_D2CCIP1R_SAI1SEL_0
  825. #define RCC_SAI1CLKSOURCE_PLL3 RCC_D2CCIP1R_SAI1SEL_1
  826. #define RCC_SAI1CLKSOURCE_PIN (RCC_D2CCIP1R_SAI1SEL_0 | RCC_D2CCIP1R_SAI1SEL_1)
  827. #define RCC_SAI1CLKSOURCE_CLKP RCC_D2CCIP1R_SAI1SEL_2
  828. #else
  829. #define RCC_SAI1CLKSOURCE_PLL (0x00000000U)
  830. #define RCC_SAI1CLKSOURCE_PLL2 RCC_CDCCIP1R_SAI1SEL_0
  831. #define RCC_SAI1CLKSOURCE_PLL3 RCC_CDCCIP1R_SAI1SEL_1
  832. #define RCC_SAI1CLKSOURCE_PIN (RCC_CDCCIP1R_SAI1SEL_0 | RCC_CDCCIP1R_SAI1SEL_1)
  833. #define RCC_SAI1CLKSOURCE_CLKP RCC_CDCCIP1R_SAI1SEL_2
  834. #endif /* RCC_D2CCIP1R_SAI1SEL */
  835. /**
  836. * @}
  837. */
  838. #if defined(SAI3)
  839. /** @defgroup RCCEx_SAI23_Clock_Source SAI2/3 Clock Source
  840. * @{
  841. */
  842. #define RCC_SAI23CLKSOURCE_PLL (0x00000000U)
  843. #define RCC_SAI23CLKSOURCE_PLL2 RCC_D2CCIP1R_SAI23SEL_0
  844. #define RCC_SAI23CLKSOURCE_PLL3 RCC_D2CCIP1R_SAI23SEL_1
  845. #define RCC_SAI23CLKSOURCE_PIN (RCC_D2CCIP1R_SAI23SEL_0 | RCC_D2CCIP1R_SAI23SEL_1)
  846. #define RCC_SAI23CLKSOURCE_CLKP RCC_D2CCIP1R_SAI23SEL_2
  847. /**
  848. * @}
  849. */
  850. /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source
  851. * @{
  852. */
  853. #define RCC_SAI2CLKSOURCE_PLL RCC_SAI23CLKSOURCE_PLL
  854. #define RCC_SAI2CLKSOURCE_PLL2 RCC_SAI23CLKSOURCE_PLL2
  855. #define RCC_SAI2CLKSOURCE_PLL3 RCC_SAI23CLKSOURCE_PLL3
  856. #define RCC_SAI2CLKSOURCE_PIN RCC_SAI23CLKSOURCE_PIN
  857. #define RCC_SAI2CLKSOURCE_CLKP RCC_SAI23CLKSOURCE_CLKP
  858. /**
  859. * @}
  860. */
  861. /** @defgroup RCCEx_SAI3_Clock_Source SAI3 Clock Source
  862. * @{
  863. */
  864. #define RCC_SAI3CLKSOURCE_PLL RCC_SAI23CLKSOURCE_PLL
  865. #define RCC_SAI3CLKSOURCE_PLL2 RCC_SAI23CLKSOURCE_PLL2
  866. #define RCC_SAI3CLKSOURCE_PLL3 RCC_SAI23CLKSOURCE_PLL3
  867. #define RCC_SAI3CLKSOURCE_PIN RCC_SAI23CLKSOURCE_PIN
  868. #define RCC_SAI3CLKSOURCE_CLKP RCC_SAI23CLKSOURCE_CLKP
  869. /**
  870. * @}
  871. */
  872. #endif /* SAI3 */
  873. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  874. /** @defgroup RCCEx_SAI2A_Clock_Source SAI2A Clock Source
  875. * @{
  876. */
  877. #define RCC_SAI2ACLKSOURCE_PLL (0x00000000U)
  878. #define RCC_SAI2ACLKSOURCE_PLL2 RCC_CDCCIP1R_SAI2ASEL_0
  879. #define RCC_SAI2ACLKSOURCE_PLL3 RCC_CDCCIP1R_SAI2ASEL_1
  880. #define RCC_SAI2ACLKSOURCE_PIN (RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_1)
  881. #define RCC_SAI2ACLKSOURCE_CLKP RCC_CDCCIP1R_SAI2ASEL_2
  882. #define RCC_SAI2ACLKSOURCE_SPDIF (RCC_CDCCIP1R_SAI2ASEL_0 | RCC_CDCCIP1R_SAI2ASEL_2)
  883. /**
  884. * @}
  885. */
  886. #endif /* RCC_CDCCIP1R_SAI2ASEL */
  887. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  888. /** @defgroup RCCEx_SAI2B_Clock_Source SAI2B Clock Source
  889. * @{
  890. */
  891. #define RCC_SAI2BCLKSOURCE_PLL (0x00000000U)
  892. #define RCC_SAI2BCLKSOURCE_PLL2 RCC_CDCCIP1R_SAI2BSEL_0
  893. #define RCC_SAI2BCLKSOURCE_PLL3 RCC_CDCCIP1R_SAI2BSEL_1
  894. #define RCC_SAI2BCLKSOURCE_PIN (RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_1)
  895. #define RCC_SAI2BCLKSOURCE_CLKP RCC_CDCCIP1R_SAI2BSEL_2
  896. #define RCC_SAI2BCLKSOURCE_SPDIF (RCC_CDCCIP1R_SAI2BSEL_0 | RCC_CDCCIP1R_SAI2BSEL_2)
  897. /**
  898. * @}
  899. */
  900. #endif /* RCC_CDCCIP1R_SAI2BSEL */
  901. /** @defgroup RCCEx_SPI123_Clock_Source SPI1/2/3 Clock Source
  902. * @{
  903. */
  904. #if defined(RCC_D2CCIP1R_SPI123SEL)
  905. #define RCC_SPI123CLKSOURCE_PLL (0x00000000U)
  906. #define RCC_SPI123CLKSOURCE_PLL2 RCC_D2CCIP1R_SPI123SEL_0
  907. #define RCC_SPI123CLKSOURCE_PLL3 RCC_D2CCIP1R_SPI123SEL_1
  908. #define RCC_SPI123CLKSOURCE_PIN (RCC_D2CCIP1R_SPI123SEL_0 | RCC_D2CCIP1R_SPI123SEL_1)
  909. #define RCC_SPI123CLKSOURCE_CLKP RCC_D2CCIP1R_SPI123SEL_2
  910. #else
  911. #define RCC_SPI123CLKSOURCE_PLL (0x00000000U)
  912. #define RCC_SPI123CLKSOURCE_PLL2 RCC_CDCCIP1R_SPI123SEL_0
  913. #define RCC_SPI123CLKSOURCE_PLL3 RCC_CDCCIP1R_SPI123SEL_1
  914. #define RCC_SPI123CLKSOURCE_PIN (RCC_CDCCIP1R_SPI123SEL_0 | RCC_CDCCIP1R_SPI123SEL_1)
  915. #define RCC_SPI123CLKSOURCE_CLKP RCC_CDCCIP1R_SPI123SEL_2
  916. #endif /* RCC_D2CCIP1R_SPI123SEL */
  917. /**
  918. * @}
  919. */
  920. /** @defgroup RCCEx_SPI1_Clock_Source SPI1 Clock Source
  921. * @{
  922. */
  923. #define RCC_SPI1CLKSOURCE_PLL RCC_SPI123CLKSOURCE_PLL
  924. #define RCC_SPI1CLKSOURCE_PLL2 RCC_SPI123CLKSOURCE_PLL2
  925. #define RCC_SPI1CLKSOURCE_PLL3 RCC_SPI123CLKSOURCE_PLL3
  926. #define RCC_SPI1CLKSOURCE_PIN RCC_SPI123CLKSOURCE_PIN
  927. #define RCC_SPI1CLKSOURCE_CLKP RCC_SPI123CLKSOURCE_CLKP
  928. /**
  929. * @}
  930. */
  931. /** @defgroup RCCEx_SPI2_Clock_Source SPI2 Clock Source
  932. * @{
  933. */
  934. #define RCC_SPI2CLKSOURCE_PLL RCC_SPI123CLKSOURCE_PLL
  935. #define RCC_SPI2CLKSOURCE_PLL2 RCC_SPI123CLKSOURCE_PLL2
  936. #define RCC_SPI2CLKSOURCE_PLL3 RCC_SPI123CLKSOURCE_PLL3
  937. #define RCC_SPI2CLKSOURCE_PIN RCC_SPI123CLKSOURCE_PIN
  938. #define RCC_SPI2CLKSOURCE_CLKP RCC_SPI123CLKSOURCE_CLKP
  939. /**
  940. * @}
  941. */
  942. /** @defgroup RCCEx_SPI3_Clock_Source SPI3 Clock Source
  943. * @{
  944. */
  945. #define RCC_SPI3CLKSOURCE_PLL RCC_SPI123CLKSOURCE_PLL
  946. #define RCC_SPI3CLKSOURCE_PLL2 RCC_SPI123CLKSOURCE_PLL2
  947. #define RCC_SPI3CLKSOURCE_PLL3 RCC_SPI123CLKSOURCE_PLL3
  948. #define RCC_SPI3CLKSOURCE_PIN RCC_SPI123CLKSOURCE_PIN
  949. #define RCC_SPI3CLKSOURCE_CLKP RCC_SPI123CLKSOURCE_CLKP
  950. /**
  951. * @}
  952. */
  953. /** @defgroup RCCEx_SPI45_Clock_Source SPI4/5 Clock Source
  954. * @{
  955. */
  956. #if defined(RCC_D2CCIP1R_SPI45SEL)
  957. #define RCC_SPI45CLKSOURCE_D2PCLK1 (0x00000000U)
  958. #define RCC_SPI45CLKSOURCE_PCLK1 RCC_SPI45CLKSOURCE_D2PCLK1
  959. #define RCC_SPI45CLKSOURCE_PLL2 RCC_D2CCIP1R_SPI45SEL_0
  960. #define RCC_SPI45CLKSOURCE_PLL3 RCC_D2CCIP1R_SPI45SEL_1
  961. #define RCC_SPI45CLKSOURCE_HSI (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_1)
  962. #define RCC_SPI45CLKSOURCE_CSI RCC_D2CCIP1R_SPI45SEL_2
  963. #define RCC_SPI45CLKSOURCE_HSE (RCC_D2CCIP1R_SPI45SEL_0 | RCC_D2CCIP1R_SPI45SEL_2)
  964. #else
  965. #define RCC_SPI45CLKSOURCE_CDPCLK1 (0x00000000U)
  966. /* aliases */
  967. #define RCC_SPI45CLKSOURCE_D2PCLK1 RCC_SPI45CLKSOURCE_CDPCLK1 /* D2PCLK1 is used in STM32H74xxx, STM32H75xxx, STM32H72xxx and STM32H73xxx family lines */
  968. #define RCC_SPI45CLKSOURCE_PCLK1 RCC_SPI45CLKSOURCE_CDPCLK1
  969. #define RCC_SPI45CLKSOURCE_PLL2 RCC_CDCCIP1R_SPI45SEL_0
  970. #define RCC_SPI45CLKSOURCE_PLL3 RCC_CDCCIP1R_SPI45SEL_1
  971. #define RCC_SPI45CLKSOURCE_HSI (RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_1)
  972. #define RCC_SPI45CLKSOURCE_CSI RCC_CDCCIP1R_SPI45SEL_2
  973. #define RCC_SPI45CLKSOURCE_HSE (RCC_CDCCIP1R_SPI45SEL_0 | RCC_CDCCIP1R_SPI45SEL_2)
  974. #endif /* RCC_D2CCIP1R_SPI45SEL */
  975. /**
  976. * @}
  977. */
  978. /** @defgroup RCCEx_SPI4_Clock_Source SPI4 Clock Source
  979. * @{
  980. */
  981. #define RCC_SPI4CLKSOURCE_D2PCLK1 RCC_SPI45CLKSOURCE_D2PCLK1
  982. #define RCC_SPI4CLKSOURCE_PLL2 RCC_SPI45CLKSOURCE_PLL2
  983. #define RCC_SPI4CLKSOURCE_PLL3 RCC_SPI45CLKSOURCE_PLL3
  984. #define RCC_SPI4CLKSOURCE_HSI RCC_SPI45CLKSOURCE_HSI
  985. #define RCC_SPI4CLKSOURCE_CSI RCC_SPI45CLKSOURCE_CSI
  986. #define RCC_SPI4CLKSOURCE_HSE RCC_SPI45CLKSOURCE_HSE
  987. /**
  988. * @}
  989. */
  990. /** @defgroup RCCEx_SPI5_Clock_Source SPI5 Clock Source
  991. * @{
  992. */
  993. #define RCC_SPI5CLKSOURCE_D2PCLK1 RCC_SPI45CLKSOURCE_D2PCLK1
  994. #define RCC_SPI5CLKSOURCE_PLL2 RCC_SPI45CLKSOURCE_PLL2
  995. #define RCC_SPI5CLKSOURCE_PLL3 RCC_SPI45CLKSOURCE_PLL3
  996. #define RCC_SPI5CLKSOURCE_HSI RCC_SPI45CLKSOURCE_HSI
  997. #define RCC_SPI5CLKSOURCE_CSI RCC_SPI45CLKSOURCE_CSI
  998. #define RCC_SPI5CLKSOURCE_HSE RCC_SPI45CLKSOURCE_HSE
  999. /**
  1000. * @}
  1001. */
  1002. /** @defgroup RCCEx_SPI6_Clock_Source SPI6 Clock Source
  1003. * @{
  1004. */
  1005. #if defined(RCC_D3CCIPR_SPI6SEL)
  1006. #define RCC_SPI6CLKSOURCE_D3PCLK1 (0x00000000U)
  1007. #define RCC_SPI6CLKSOURCE_PCLK4 RCC_SPI6CLKSOURCE_D3PCLK1
  1008. #define RCC_SPI6CLKSOURCE_PLL2 RCC_D3CCIPR_SPI6SEL_0
  1009. #define RCC_SPI6CLKSOURCE_PLL3 RCC_D3CCIPR_SPI6SEL_1
  1010. #define RCC_SPI6CLKSOURCE_HSI (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_1)
  1011. #define RCC_SPI6CLKSOURCE_CSI RCC_D3CCIPR_SPI6SEL_2
  1012. #define RCC_SPI6CLKSOURCE_HSE (RCC_D3CCIPR_SPI6SEL_0 | RCC_D3CCIPR_SPI6SEL_2)
  1013. #else
  1014. #define RCC_SPI6CLKSOURCE_SRDPCLK4 (0x00000000U)
  1015. /* alias */
  1016. #define RCC_SPI6CLKSOURCE_D3PCLK1 RCC_SPI6CLKSOURCE_SRDPCLK4 /* D3PCLK1 is used in STM32H74xxx, STM32H75xxx, STM32H72xxx and STM32H73xxx family lines */
  1017. #define RCC_SPI6CLKSOURCE_PCLK4 RCC_SPI6CLKSOURCE_SRDPCLK4
  1018. #define RCC_SPI6CLKSOURCE_PLL2 RCC_SRDCCIPR_SPI6SEL_0
  1019. #define RCC_SPI6CLKSOURCE_PLL3 RCC_SRDCCIPR_SPI6SEL_1
  1020. #define RCC_SPI6CLKSOURCE_HSI (RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_1)
  1021. #define RCC_SPI6CLKSOURCE_CSI RCC_SRDCCIPR_SPI6SEL_2
  1022. #define RCC_SPI6CLKSOURCE_HSE (RCC_SRDCCIPR_SPI6SEL_0 | RCC_SRDCCIPR_SPI6SEL_2)
  1023. #define RCC_SPI6CLKSOURCE_PIN (RCC_SRDCCIPR_SPI6SEL_1 | RCC_SRDCCIPR_SPI6SEL_2)
  1024. #endif /* RCC_D3CCIPR_SPI6SEL */
  1025. /**
  1026. * @}
  1027. */
  1028. #if defined(SAI4_Block_A)
  1029. /** @defgroup RCCEx_SAI4A_Clock_Source SAI4A Clock Source
  1030. * @{
  1031. */
  1032. #define RCC_SAI4ACLKSOURCE_PLL (0x00000000U)
  1033. #define RCC_SAI4ACLKSOURCE_PLL2 RCC_D3CCIPR_SAI4ASEL_0
  1034. #define RCC_SAI4ACLKSOURCE_PLL3 RCC_D3CCIPR_SAI4ASEL_1
  1035. #define RCC_SAI4ACLKSOURCE_PIN (RCC_D3CCIPR_SAI4ASEL_0 | RCC_D3CCIPR_SAI4ASEL_1)
  1036. #define RCC_SAI4ACLKSOURCE_CLKP RCC_D3CCIPR_SAI4ASEL_2
  1037. #if defined(RCC_VER_3_0)
  1038. #define RCC_SAI4ACLKSOURCE_SPDIF (RCC_D3CCIPR_SAI4ASEL_2 | RCC_D3CCIPR_SAI4ASEL_0)
  1039. #endif /*RCC_VER_3_0*/
  1040. /**
  1041. * @}
  1042. */
  1043. #endif /* SAI4_Block_A */
  1044. #if defined(SAI4_Block_B)
  1045. /** @defgroup RCCEx_SAI4B_Clock_Source SAI4B Clock Source
  1046. * @{
  1047. */
  1048. #define RCC_SAI4BCLKSOURCE_PLL (0x00000000U)
  1049. #define RCC_SAI4BCLKSOURCE_PLL2 RCC_D3CCIPR_SAI4BSEL_0
  1050. #define RCC_SAI4BCLKSOURCE_PLL3 RCC_D3CCIPR_SAI4BSEL_1
  1051. #define RCC_SAI4BCLKSOURCE_PIN (RCC_D3CCIPR_SAI4BSEL_0 | RCC_D3CCIPR_SAI4BSEL_1)
  1052. #define RCC_SAI4BCLKSOURCE_CLKP RCC_D3CCIPR_SAI4BSEL_2
  1053. #if defined(RCC_VER_3_0)
  1054. #define RCC_SAI4BCLKSOURCE_SPDIF (RCC_D3CCIPR_SAI4BSEL_2 | RCC_D3CCIPR_SAI4BSEL_0)
  1055. #endif /* RCC_VER_3_0 */
  1056. /**
  1057. * @}
  1058. */
  1059. #endif /* SAI4_Block_B */
  1060. /** @defgroup RCCEx_LPTIM1_Clock_Source RCCEx LPTIM1 Clock Source
  1061. * @{
  1062. */
  1063. #if defined(RCC_D2CCIP2R_LPTIM1SEL)
  1064. #define RCC_LPTIM1CLKSOURCE_D2PCLK1 (0x00000000U)
  1065. /* alias */
  1066. #define RCC_LPTIM1CLKSOURCE_PCLK1 RCC_LPTIM1CLKSOURCE_D2PCLK1
  1067. #define RCC_LPTIM1CLKSOURCE_PLL2 RCC_D2CCIP2R_LPTIM1SEL_0
  1068. #define RCC_LPTIM1CLKSOURCE_PLL3 RCC_D2CCIP2R_LPTIM1SEL_1
  1069. #define RCC_LPTIM1CLKSOURCE_LSE (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_1)
  1070. #define RCC_LPTIM1CLKSOURCE_LSI RCC_D2CCIP2R_LPTIM1SEL_2
  1071. #define RCC_LPTIM1CLKSOURCE_CLKP (RCC_D2CCIP2R_LPTIM1SEL_0 | RCC_D2CCIP2R_LPTIM1SEL_2)
  1072. #else
  1073. #define RCC_LPTIM1CLKSOURCE_CDPCLK1 (0x00000000U)
  1074. /* alias */
  1075. #define RCC_LPTIM1CLKSOURCE_PCLK1 RCC_LPTIM1CLKSOURCE_CDPCLK1
  1076. #define RCC_LPTIM1CLKSOURCE_D2PCLK1 RCC_LPTIM1CLKSOURCE_CDPCLK1
  1077. #define RCC_LPTIM1CLKSOURCE_PLL2 RCC_CDCCIP2R_LPTIM1SEL_0
  1078. #define RCC_LPTIM1CLKSOURCE_PLL3 RCC_CDCCIP2R_LPTIM1SEL_1
  1079. #define RCC_LPTIM1CLKSOURCE_LSE (RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_1)
  1080. #define RCC_LPTIM1CLKSOURCE_LSI RCC_CDCCIP2R_LPTIM1SEL_2
  1081. #define RCC_LPTIM1CLKSOURCE_CLKP (RCC_CDCCIP2R_LPTIM1SEL_0 | RCC_CDCCIP2R_LPTIM1SEL_2)
  1082. #endif /* RCC_D2CCIP2R_LPTIM1SEL */
  1083. /**
  1084. * @}
  1085. */
  1086. /** @defgroup RCCEx_LPTIM2_Clock_Source RCCEx LPTIM2 Clock Source
  1087. * @{
  1088. */
  1089. #if defined(RCC_D3CCIPR_LPTIM2SEL)
  1090. #define RCC_LPTIM2CLKSOURCE_D3PCLK1 (0x00000000U)
  1091. /* alias */
  1092. #define RCC_LPTIM2CLKSOURCE_PCLK4 RCC_LPTIM2CLKSOURCE_D3PCLK1
  1093. #define RCC_LPTIM2CLKSOURCE_PLL2 RCC_D3CCIPR_LPTIM2SEL_0
  1094. #define RCC_LPTIM2CLKSOURCE_PLL3 RCC_D3CCIPR_LPTIM2SEL_1
  1095. #define RCC_LPTIM2CLKSOURCE_LSE (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_1)
  1096. #define RCC_LPTIM2CLKSOURCE_LSI RCC_D3CCIPR_LPTIM2SEL_2
  1097. #define RCC_LPTIM2CLKSOURCE_CLKP (RCC_D3CCIPR_LPTIM2SEL_0 | RCC_D3CCIPR_LPTIM2SEL_2)
  1098. #else
  1099. #define RCC_LPTIM2CLKSOURCE_SRDPCLK4 (0x00000000U)
  1100. /*alias*/
  1101. #define RCC_LPTIM2CLKSOURCE_PCLK4 RCC_LPTIM2CLKSOURCE_SRDPCLK4
  1102. #define RCC_LPTIM2CLKSOURCE_D3PCLK1 RCC_LPTIM2CLKSOURCE_SRDPCLK4
  1103. #define RCC_LPTIM2CLKSOURCE_PLL2 RCC_SRDCCIPR_LPTIM2SEL_0
  1104. #define RCC_LPTIM2CLKSOURCE_PLL3 RCC_SRDCCIPR_LPTIM2SEL_1
  1105. #define RCC_LPTIM2CLKSOURCE_LSE (RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_1)
  1106. #define RCC_LPTIM2CLKSOURCE_LSI RCC_SRDCCIPR_LPTIM2SEL_2
  1107. #define RCC_LPTIM2CLKSOURCE_CLKP (RCC_SRDCCIPR_LPTIM2SEL_0 | RCC_SRDCCIPR_LPTIM2SEL_2)
  1108. #endif /* RCC_D3CCIPR_LPTIM2SEL */
  1109. /**
  1110. * @}
  1111. */
  1112. /** @defgroup RCCEx_LPTIM345_Clock_Source RCCEx LPTIM3/4/5 Clock Source
  1113. * @{
  1114. */
  1115. #if defined(RCC_D3CCIPR_LPTIM345SEL)
  1116. #define RCC_LPTIM345CLKSOURCE_D3PCLK1 (0x00000000U)
  1117. /* alias*/
  1118. #define RCC_LPTIM345CLKSOURCE_PCLK4 RCC_LPTIM345CLKSOURCE_D3PCLK1
  1119. #define RCC_LPTIM345CLKSOURCE_PLL2 RCC_D3CCIPR_LPTIM345SEL_0
  1120. #define RCC_LPTIM345CLKSOURCE_PLL3 RCC_D3CCIPR_LPTIM345SEL_1
  1121. #define RCC_LPTIM345CLKSOURCE_LSE (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_1)
  1122. #define RCC_LPTIM345CLKSOURCE_LSI RCC_D3CCIPR_LPTIM345SEL_2
  1123. #define RCC_LPTIM345CLKSOURCE_CLKP (RCC_D3CCIPR_LPTIM345SEL_0 | RCC_D3CCIPR_LPTIM345SEL_2)
  1124. #else
  1125. #define RCC_LPTIM345CLKSOURCE_SRDPCLK4 (0x00000000U)
  1126. /* alias */
  1127. #define RCC_LPTIM345CLKSOURCE_PCLK4 RCC_LPTIM345CLKSOURCE_SRDPCLK4
  1128. #define RCC_LPTIM345CLKSOURCE_D3PCLK1 RCC_LPTIM345CLKSOURCE_SRDPCLK4
  1129. #define RCC_LPTIM345CLKSOURCE_PLL2 RCC_SRDCCIPR_LPTIM3SEL_0
  1130. #define RCC_LPTIM345CLKSOURCE_PLL3 RCC_SRDCCIPR_LPTIM3SEL_1
  1131. #define RCC_LPTIM345CLKSOURCE_LSE (RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_1)
  1132. #define RCC_LPTIM345CLKSOURCE_LSI RCC_SRDCCIPR_LPTIM3SEL_2
  1133. #define RCC_LPTIM345CLKSOURCE_CLKP (RCC_SRDCCIPR_LPTIM3SEL_0 | RCC_SRDCCIPR_LPTIM3SEL_2)
  1134. #endif /* RCC_D3CCIPR_LPTIM345SEL */
  1135. /**
  1136. * @}
  1137. */
  1138. /** @defgroup RCCEx_LPTIM3_Clock_Source RCCEx LPTIM3 Clock Source
  1139. * @{
  1140. */
  1141. #define RCC_LPTIM3CLKSOURCE_D3PCLK1 RCC_LPTIM345CLKSOURCE_D3PCLK1
  1142. #define RCC_LPTIM3CLKSOURCE_PLL2 RCC_LPTIM345CLKSOURCE_PLL2
  1143. #define RCC_LPTIM3CLKSOURCE_PLL3 RCC_LPTIM345CLKSOURCE_PLL3
  1144. #define RCC_LPTIM3CLKSOURCE_LSE RCC_LPTIM345CLKSOURCE_LSE
  1145. #define RCC_LPTIM3CLKSOURCE_LSI RCC_LPTIM345CLKSOURCE_LSI
  1146. #define RCC_LPTIM3CLKSOURCE_CLKP RCC_LPTIM345CLKSOURCE_CLKP
  1147. /**
  1148. * @}
  1149. */
  1150. #if defined(LPTIM4)
  1151. /** @defgroup RCCEx_LPTIM4_Clock_Source RCCEx LPTIM4 Clock Source
  1152. * @{
  1153. */
  1154. #define RCC_LPTIM4CLKSOURCE_D3PCLK1 RCC_LPTIM345CLKSOURCE_D3PCLK1
  1155. #define RCC_LPTIM4CLKSOURCE_PLL2 RCC_LPTIM345CLKSOURCE_PLL2
  1156. #define RCC_LPTIM4CLKSOURCE_PLL3 RCC_LPTIM345CLKSOURCE_PLL3
  1157. #define RCC_LPTIM4CLKSOURCE_LSE RCC_LPTIM345CLKSOURCE_LSE
  1158. #define RCC_LPTIM4CLKSOURCE_LSI RCC_LPTIM345CLKSOURCE_LSI
  1159. #define RCC_LPTIM4CLKSOURCE_CLKP RCC_LPTIM345CLKSOURCE_CLKP
  1160. /**
  1161. * @}
  1162. */
  1163. #endif /* LPTIM4 */
  1164. #if defined(LPTIM5)
  1165. /** @defgroup RCCEx_LPTIM5_Clock_Source RCCEx LPTIM5 Clock Source
  1166. * @{
  1167. */
  1168. #define RCC_LPTIM5CLKSOURCE_D3PCLK1 RCC_LPTIM345CLKSOURCE_D3PCLK1
  1169. #define RCC_LPTIM5CLKSOURCE_PLL2 RCC_LPTIM345CLKSOURCE_PLL2
  1170. #define RCC_LPTIM5CLKSOURCE_PLL3 RCC_LPTIM345CLKSOURCE_PLL3
  1171. #define RCC_LPTIM5CLKSOURCE_LSE RCC_LPTIM345CLKSOURCE_LSE
  1172. #define RCC_LPTIM5CLKSOURCE_LSI RCC_LPTIM345CLKSOURCE_LSI
  1173. #define RCC_LPTIM5CLKSOURCE_CLKP RCC_LPTIM345CLKSOURCE_CLKP
  1174. /**
  1175. * @}
  1176. */
  1177. #endif /* LPTIM5 */
  1178. #if defined(QUADSPI)
  1179. /** @defgroup RCCEx_QSPI_Clock_Source RCCEx QSPI Clock Source
  1180. * @{
  1181. */
  1182. #define RCC_QSPICLKSOURCE_D1HCLK (0x00000000U)
  1183. #define RCC_QSPICLKSOURCE_PLL RCC_D1CCIPR_QSPISEL_0
  1184. #define RCC_QSPICLKSOURCE_PLL2 RCC_D1CCIPR_QSPISEL_1
  1185. #define RCC_QSPICLKSOURCE_CLKP RCC_D1CCIPR_QSPISEL
  1186. /**
  1187. * @}
  1188. */
  1189. #endif /* QUADSPI */
  1190. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  1191. /** @defgroup RCCEx_OSPI_Clock_Source RCCEx OSPI Clock Source
  1192. * @{
  1193. */
  1194. #if defined(RCC_CDCCIPR_OCTOSPISEL)
  1195. #define RCC_OSPICLKSOURCE_CDHCLK (0x00000000U)
  1196. /*aliases*/
  1197. #define RCC_OSPICLKSOURCE_D1HCLK RCC_OSPICLKSOURCE_CDHCLK
  1198. #define RCC_OSPICLKSOURCE_HCLK RCC_OSPICLKSOURCE_CDHCLK
  1199. #define RCC_OSPICLKSOURCE_PLL RCC_CDCCIPR_OCTOSPISEL_0
  1200. #define RCC_OSPICLKSOURCE_PLL2 RCC_CDCCIPR_OCTOSPISEL_1
  1201. #define RCC_OSPICLKSOURCE_CLKP RCC_CDCCIPR_OCTOSPISEL
  1202. #else
  1203. #define RCC_OSPICLKSOURCE_D1HCLK (0x00000000U)
  1204. #define RCC_OSPICLKSOURCE_HCLK RCC_OSPICLKSOURCE_D1HCLK
  1205. #define RCC_OSPICLKSOURCE_PLL RCC_D1CCIPR_OCTOSPISEL_0
  1206. #define RCC_OSPICLKSOURCE_PLL2 RCC_D1CCIPR_OCTOSPISEL_1
  1207. #define RCC_OSPICLKSOURCE_CLKP RCC_D1CCIPR_OCTOSPISEL
  1208. #endif /* RCC_CDCCIPR_OCTOSPISEL */
  1209. /**
  1210. * @}
  1211. */
  1212. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  1213. #if defined(DSI)
  1214. /** @defgroup RCCEx_DSI_Clock_Source RCCEx DSI Clock Source
  1215. * @{
  1216. */
  1217. #define RCC_DSICLKSOURCE_PHY (0x00000000U)
  1218. #define RCC_DSICLKSOURCE_PLL2 RCC_D1CCIPR_DSISEL
  1219. /**
  1220. * @}
  1221. */
  1222. #endif /* DSI */
  1223. /** @defgroup RCCEx_FMC_Clock_Source RCCEx FMC Clock Source
  1224. * @{
  1225. */
  1226. #if defined(RCC_D1CCIPR_FMCSEL)
  1227. #define RCC_FMCCLKSOURCE_D1HCLK (0x00000000U)
  1228. #define RCC_FMCCLKSOURCE_HCLK RCC_FMCCLKSOURCE_D1HCLK
  1229. #define RCC_FMCCLKSOURCE_PLL RCC_D1CCIPR_FMCSEL_0
  1230. #define RCC_FMCCLKSOURCE_PLL2 RCC_D1CCIPR_FMCSEL_1
  1231. #define RCC_FMCCLKSOURCE_CLKP RCC_D1CCIPR_FMCSEL
  1232. #else
  1233. #define RCC_FMCCLKSOURCE_CDHCLK (0x00000000U)
  1234. #define RCC_FMCCLKSOURCE_HCLK RCC_FMCCLKSOURCE_CDHCLK
  1235. /*alias*/
  1236. #define RCC_FMCCLKSOURCE_D1HCLK RCC_FMCCLKSOURCE_CDHCLK
  1237. #define RCC_FMCCLKSOURCE_PLL RCC_CDCCIPR_FMCSEL_0
  1238. #define RCC_FMCCLKSOURCE_PLL2 RCC_CDCCIPR_FMCSEL_1
  1239. #define RCC_FMCCLKSOURCE_CLKP RCC_CDCCIPR_FMCSEL
  1240. #endif /* RCC_D1CCIPR_FMCSEL */
  1241. /**
  1242. * @}
  1243. */
  1244. #if defined(FDCAN1) || defined(FDCAN2)
  1245. /** @defgroup RCCEx_FDCAN_Clock_Source RCCEx FDCAN Clock Source
  1246. * @{
  1247. */
  1248. #if defined(RCC_D2CCIP1R_FDCANSEL)
  1249. #define RCC_FDCANCLKSOURCE_HSE (0x00000000U)
  1250. #define RCC_FDCANCLKSOURCE_PLL RCC_D2CCIP1R_FDCANSEL_0
  1251. #define RCC_FDCANCLKSOURCE_PLL2 RCC_D2CCIP1R_FDCANSEL_1
  1252. #else
  1253. #define RCC_FDCANCLKSOURCE_HSE (0x00000000U)
  1254. #define RCC_FDCANCLKSOURCE_PLL RCC_CDCCIP1R_FDCANSEL_0
  1255. #define RCC_FDCANCLKSOURCE_PLL2 RCC_CDCCIP1R_FDCANSEL_1
  1256. #endif /* D3_SRAM_BASE */
  1257. /**
  1258. * @}
  1259. */
  1260. #endif /*FDCAN1 || FDCAN2*/
  1261. /** @defgroup RCCEx_SDMMC_Clock_Source RCCEx SDMMC Clock Source
  1262. * @{
  1263. */
  1264. #if defined(RCC_D1CCIPR_SDMMCSEL)
  1265. #define RCC_SDMMCCLKSOURCE_PLL (0x00000000U)
  1266. #define RCC_SDMMCCLKSOURCE_PLL2 RCC_D1CCIPR_SDMMCSEL
  1267. #else
  1268. #define RCC_SDMMCCLKSOURCE_PLL (0x00000000U)
  1269. #define RCC_SDMMCCLKSOURCE_PLL2 RCC_CDCCIPR_SDMMCSEL
  1270. #endif /* RCC_D1CCIPR_SDMMCSEL */
  1271. /**
  1272. * @}
  1273. */
  1274. /** @defgroup RCCEx_ADC_Clock_Source RCCEx ADC Clock Source
  1275. * @{
  1276. */
  1277. #if defined(RCC_D3CCIPR_ADCSEL_0)
  1278. #define RCC_ADCCLKSOURCE_PLL2 (0x00000000U)
  1279. #define RCC_ADCCLKSOURCE_PLL3 RCC_D3CCIPR_ADCSEL_0
  1280. #define RCC_ADCCLKSOURCE_CLKP RCC_D3CCIPR_ADCSEL_1
  1281. #else
  1282. #define RCC_ADCCLKSOURCE_PLL2 (0x00000000U)
  1283. #define RCC_ADCCLKSOURCE_PLL3 RCC_SRDCCIPR_ADCSEL_0
  1284. #define RCC_ADCCLKSOURCE_CLKP RCC_SRDCCIPR_ADCSEL_1
  1285. #endif /* RCC_D3CCIPR_ADCSEL_0 */
  1286. /**
  1287. * @}
  1288. */
  1289. /** @defgroup RCCEx_SWPMI1_Clock_Source RCCEx SWPMI1 Clock Source
  1290. * @{
  1291. */
  1292. #if defined(RCC_D2CCIP1R_SWPSEL)
  1293. #define RCC_SWPMI1CLKSOURCE_D2PCLK1 (0x00000000U)
  1294. #define RCC_SWPMI1CLKSOURCE_HSI RCC_D2CCIP1R_SWPSEL
  1295. #else
  1296. #define RCC_SWPMI1CLKSOURCE_CDPCLK1 (0x00000000U)
  1297. /* alias */
  1298. #define RCC_SWPMI1CLKSOURCE_D2PCLK1 RCC_SWPMI1CLKSOURCE_CDPCLK1
  1299. #define RCC_SWPMI1CLKSOURCE_HSI RCC_CDCCIP1R_SWPSEL
  1300. #endif /* RCC_D2CCIP1R_SWPSEL */
  1301. /**
  1302. * @}
  1303. */
  1304. /** @defgroup RCCEx_DFSDM1_Clock_Source RCCEx DFSDM1 Clock Source
  1305. * @{
  1306. */
  1307. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  1308. #define RCC_DFSDM1CLKSOURCE_D2PCLK1 (0x00000000U)
  1309. #define RCC_DFSDM1CLKSOURCE_SYS RCC_D2CCIP1R_DFSDM1SEL
  1310. #else
  1311. #define RCC_DFSDM1CLKSOURCE_CDPCLK1 (0x00000000U)
  1312. /* alias */
  1313. #define RCC_DFSDM1CLKSOURCE_D2PCLK1 RCC_DFSDM1CLKSOURCE_CDPCLK1
  1314. #define RCC_DFSDM1CLKSOURCE_SYS RCC_CDCCIP1R_DFSDM1SEL
  1315. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  1316. /**
  1317. * @}
  1318. */
  1319. #if defined(DFSDM2_BASE)
  1320. /** @defgroup RCCEx_DFSDM2_Clock_Source RCCEx DFSDM2 Clock Source
  1321. * @{
  1322. */
  1323. #define RCC_DFSDM2CLKSOURCE_SRDPCLK4 (0x00000000U)
  1324. /* alias */
  1325. #define RCC_DFSDM2CLKSOURCE_SRDPCLK1 RCC_DFSDM2CLKSOURCE_SRDPCLK4
  1326. #define RCC_DFSDM2CLKSOURCE_SYS RCC_SRDCCIPR_DFSDM2SEL
  1327. /**
  1328. * @}
  1329. */
  1330. #endif /* DFSDM2 */
  1331. /** @defgroup RCCEx_SPDIFRX_Clock_Source RCCEx SPDIFRX Clock Source
  1332. * @{
  1333. */
  1334. #if defined(RCC_D2CCIP1R_SPDIFSEL_0)
  1335. #define RCC_SPDIFRXCLKSOURCE_PLL (0x00000000U)
  1336. #define RCC_SPDIFRXCLKSOURCE_PLL2 RCC_D2CCIP1R_SPDIFSEL_0
  1337. #define RCC_SPDIFRXCLKSOURCE_PLL3 RCC_D2CCIP1R_SPDIFSEL_1
  1338. #define RCC_SPDIFRXCLKSOURCE_HSI RCC_D2CCIP1R_SPDIFSEL
  1339. #else
  1340. #define RCC_SPDIFRXCLKSOURCE_PLL (0x00000000U)
  1341. #define RCC_SPDIFRXCLKSOURCE_PLL2 RCC_CDCCIP1R_SPDIFSEL_0
  1342. #define RCC_SPDIFRXCLKSOURCE_PLL3 RCC_CDCCIP1R_SPDIFSEL_1
  1343. #define RCC_SPDIFRXCLKSOURCE_HSI RCC_CDCCIP1R_SPDIFSEL
  1344. #endif /* RCC_D2CCIP1R_SPDIFSEL_0 */
  1345. /**
  1346. * @}
  1347. */
  1348. /** @defgroup RCCEx_CEC_Clock_Source RCCEx CEC Clock Source
  1349. * @{
  1350. */
  1351. #if defined(RCC_D2CCIP2R_CECSEL_0)
  1352. #define RCC_CECCLKSOURCE_LSE (0x00000000U)
  1353. #define RCC_CECCLKSOURCE_LSI RCC_D2CCIP2R_CECSEL_0
  1354. #define RCC_CECCLKSOURCE_CSI RCC_D2CCIP2R_CECSEL_1
  1355. #else
  1356. #define RCC_CECCLKSOURCE_LSE (0x00000000U)
  1357. #define RCC_CECCLKSOURCE_LSI RCC_CDCCIP2R_CECSEL_0
  1358. #define RCC_CECCLKSOURCE_CSI RCC_CDCCIP2R_CECSEL_1
  1359. #endif /* RCC_D2CCIP2R_CECSEL_0 */
  1360. /**
  1361. * @}
  1362. */
  1363. /** @defgroup RCCEx_CLKP_Clock_Source RCCEx CLKP Clock Source
  1364. * @{
  1365. */
  1366. #if defined(RCC_D1CCIPR_CKPERSEL_0)
  1367. #define RCC_CLKPSOURCE_HSI (0x00000000U)
  1368. #define RCC_CLKPSOURCE_CSI RCC_D1CCIPR_CKPERSEL_0
  1369. #define RCC_CLKPSOURCE_HSE RCC_D1CCIPR_CKPERSEL_1
  1370. #else
  1371. #define RCC_CLKPSOURCE_HSI (0x00000000U)
  1372. #define RCC_CLKPSOURCE_CSI RCC_CDCCIPR_CKPERSEL_0
  1373. #define RCC_CLKPSOURCE_HSE RCC_CDCCIPR_CKPERSEL_1
  1374. #endif /* RCC_D1CCIPR_CKPERSEL_0 */
  1375. /**
  1376. * @}
  1377. */
  1378. /** @defgroup RCCEx_TIM_Prescaler_Selection RCCEx TIM Prescaler Selection
  1379. * @{
  1380. */
  1381. #define RCC_TIMPRES_DESACTIVATED (0x00000000U)
  1382. #define RCC_TIMPRES_ACTIVATED RCC_CFGR_TIMPRE
  1383. /**
  1384. * @}
  1385. */
  1386. #if defined(DUAL_CORE)
  1387. /** @defgroup RCCEx_RCC_BootCx RCCEx RCC BootCx
  1388. * @{
  1389. */
  1390. #define RCC_BOOT_C1 RCC_GCR_BOOT_C1
  1391. #define RCC_BOOT_C2 RCC_GCR_BOOT_C2
  1392. /**
  1393. * @}
  1394. */
  1395. #endif /*DUAL_CORE*/
  1396. #if defined(DUAL_CORE)
  1397. /** @defgroup RCCEx_RCC_WWDGx RCCEx RCC WWDGx
  1398. * @{
  1399. */
  1400. #define RCC_WWDG1 RCC_GCR_WW1RSC
  1401. #define RCC_WWDG2 RCC_GCR_WW2RSC
  1402. /**
  1403. * @}
  1404. */
  1405. #else
  1406. /** @defgroup RCCEx_RCC_WWDGx RCCEx RCC WWDGx
  1407. * @{
  1408. */
  1409. #define RCC_WWDG1 RCC_GCR_WW1RSC
  1410. /**
  1411. * @}
  1412. */
  1413. #endif /*DUAL_CORE*/
  1414. /** @defgroup RCCEx_EXTI_LINE_LSECSS RCC LSE CSS external interrupt line
  1415. * @{
  1416. */
  1417. #define RCC_EXTI_LINE_LSECSS EXTI_IMR1_IM18 /*!< External interrupt line 18 connected to the LSE CSS EXTI Line */
  1418. /**
  1419. * @}
  1420. */
  1421. /** @defgroup RCCEx_CRS_Status RCCEx CRS Status
  1422. * @{
  1423. */
  1424. #define RCC_CRS_NONE (0x00000000U)
  1425. #define RCC_CRS_TIMEOUT (0x00000001U)
  1426. #define RCC_CRS_SYNCOK (0x00000002U)
  1427. #define RCC_CRS_SYNCWARN (0x00000004U)
  1428. #define RCC_CRS_SYNCERR (0x00000008U)
  1429. #define RCC_CRS_SYNCMISS (0x00000010U)
  1430. #define RCC_CRS_TRIMOVF (0x00000020U)
  1431. /**
  1432. * @}
  1433. */
  1434. /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource
  1435. * @{
  1436. */
  1437. #define RCC_CRS_SYNC_SOURCE_PIN (0x00000000U) /*!< Synchro Signal source external pin, Available on STM32H7 Rev.B and above devices only */
  1438. #define RCC_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */
  1439. #define RCC_CRS_SYNC_SOURCE_USB1 CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB1 SOF (default) */
  1440. #define RCC_CRS_SYNC_SOURCE_USB2 (CRS_CFGR_SYNCSRC_1|CRS_CFGR_SYNCSRC_0) /*!< Synchro Signal source USB2 SOF */
  1441. /**
  1442. * @}
  1443. */
  1444. /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider
  1445. * @{
  1446. */
  1447. #define RCC_CRS_SYNC_DIV1 (0x00000000U) /*!< Synchro Signal not divided (default) */
  1448. #define RCC_CRS_SYNC_DIV2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */
  1449. #define RCC_CRS_SYNC_DIV4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */
  1450. #define RCC_CRS_SYNC_DIV8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */
  1451. #define RCC_CRS_SYNC_DIV16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */
  1452. #define RCC_CRS_SYNC_DIV32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */
  1453. #define RCC_CRS_SYNC_DIV64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */
  1454. #define RCC_CRS_SYNC_DIV128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */
  1455. /**
  1456. * @}
  1457. */
  1458. /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity
  1459. * @{
  1460. */
  1461. #define RCC_CRS_SYNC_POLARITY_RISING (0x00000000U) /*!< Synchro Active on rising edge (default) */
  1462. #define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */
  1463. /**
  1464. * @}
  1465. */
  1466. /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault
  1467. * @{
  1468. */
  1469. #define RCC_CRS_RELOADVALUE_DEFAULT (0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds
  1470. to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */
  1471. /**
  1472. * @}
  1473. */
  1474. /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault
  1475. * @{
  1476. */
  1477. #define RCC_CRS_ERRORLIMIT_DEFAULT (0x00000022U) /*!< Default Frequency error limit */
  1478. /**
  1479. * @}
  1480. */
  1481. /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault
  1482. * @{
  1483. */
  1484. #define RCC_CRS_HSI48CALIBRATION_DEFAULT (0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval.
  1485. The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value
  1486. corresponds to a higher output frequency */
  1487. /**
  1488. * @}
  1489. */
  1490. /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection
  1491. * @{
  1492. */
  1493. #define RCC_CRS_FREQERRORDIR_UP (0x00000000U) /*!< Upcounting direction, the actual frequency is above the target */
  1494. #define RCC_CRS_FREQERRORDIR_DOWN (CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */
  1495. /**
  1496. * @}
  1497. */
  1498. /** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources
  1499. * @{
  1500. */
  1501. #define RCC_CRS_IT_SYNCOK CRS_CR_SYNCOKIE /*!< SYNC event OK */
  1502. #define RCC_CRS_IT_SYNCWARN CRS_CR_SYNCWARNIE /*!< SYNC warning */
  1503. #define RCC_CRS_IT_ERR CRS_CR_ERRIE /*!< Error */
  1504. #define RCC_CRS_IT_ESYNC CRS_CR_ESYNCIE /*!< Expected SYNC */
  1505. #define RCC_CRS_IT_SYNCERR CRS_CR_ERRIE /*!< SYNC error */
  1506. #define RCC_CRS_IT_SYNCMISS CRS_CR_ERRIE /*!< SYNC missed */
  1507. #define RCC_CRS_IT_TRIMOVF CRS_CR_ERRIE /*!< Trimming overflow or underflow */
  1508. /**
  1509. * @}
  1510. */
  1511. /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags
  1512. * @{
  1513. */
  1514. #define RCC_CRS_FLAG_SYNCOK CRS_ISR_SYNCOKF /*!< SYNC event OK flag */
  1515. #define RCC_CRS_FLAG_SYNCWARN CRS_ISR_SYNCWARNF /*!< SYNC warning flag */
  1516. #define RCC_CRS_FLAG_ERR CRS_ISR_ERRF /*!< Error flag */
  1517. #define RCC_CRS_FLAG_ESYNC CRS_ISR_ESYNCF /*!< Expected SYNC flag */
  1518. #define RCC_CRS_FLAG_SYNCERR CRS_ISR_SYNCERR /*!< SYNC error */
  1519. #define RCC_CRS_FLAG_SYNCMISS CRS_ISR_SYNCMISS /*!< SYNC missed*/
  1520. #define RCC_CRS_FLAG_TRIMOVF CRS_ISR_TRIMOVF /*!< Trimming overflow or underflow */
  1521. /**
  1522. * @}
  1523. */
  1524. /**
  1525. * @}
  1526. */
  1527. /* Exported macro ------------------------------------------------------------*/
  1528. /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
  1529. * @{
  1530. */
  1531. /** @brief Macros to enable or disable PLL2.
  1532. * @note After enabling PLL2, the application software should wait on
  1533. * PLL2RDY flag to be set indicating that PLL2 clock is stable and can
  1534. * be used as kernel clock source.
  1535. * @note PLL2 is disabled by hardware when entering STOP and STANDBY modes.
  1536. */
  1537. #define __HAL_RCC_PLL2_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLL2ON)
  1538. #define __HAL_RCC_PLL2_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON)
  1539. /**
  1540. * @brief Enables or disables each clock output (PLL2_P_CLK, PLL2_Q_CLK, PLL2_R_CLK)
  1541. * @note Enabling/disabling those Clocks can be done only when the PLL2 is disabled,
  1542. * This is mainly used to save Power.
  1543. * @param __RCC_PLL2ClockOut__ Specifies the PLL2 clock to be outputted
  1544. * This parameter can be one of the following values:
  1545. * @arg RCC_PLL2_DIVP: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1546. * @arg RCC_PLL2_DIVQ: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1547. * @arg RCC_PLL2_DIVR: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1548. *
  1549. * (*) : For stm32h72xxx and stm32h73xxx family lines and requires to enable the CPU_FREQ_BOOST flash option byte, 520MHZ otherwise.
  1550. * (**) : For stm32h74xx and stm32h75xx family lines and requires the board to be connected on LDO regulator not SMPS, 400MHZ otherwise.
  1551. * (***): For stm32h7a3xx, stm32h7b3xx and stm32h7b0xx family lines.
  1552. *
  1553. * @retval None
  1554. */
  1555. #define __HAL_RCC_PLL2CLKOUT_ENABLE(__RCC_PLL2ClockOut__) SET_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))
  1556. #define __HAL_RCC_PLL2CLKOUT_DISABLE(__RCC_PLL2ClockOut__) CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL2ClockOut__))
  1557. /**
  1558. * @brief Enables or disables Fractional Part Of The Multiplication Factor of PLL2 VCO
  1559. * @note Enabling/disabling Fractional Part can be any time without the need to stop the PLL2
  1560. * @retval None
  1561. */
  1562. #define __HAL_RCC_PLL2FRACN_ENABLE() SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)
  1563. #define __HAL_RCC_PLL2FRACN_DISABLE() CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL2FRACEN)
  1564. /**
  1565. * @brief Macro to configures the PLL2 multiplication and division factors.
  1566. * @note This function must be used only when PLL2 is disabled.
  1567. *
  1568. * @param __PLL2M__ specifies the division factor for PLL2 VCO input clock
  1569. * This parameter must be a number between 1 and 63.
  1570. * @note You have to set the PLLM parameter correctly to ensure that the VCO input
  1571. * frequency ranges from 1 to 16 MHz.
  1572. *
  1573. * @param __PLL2N__ specifies the multiplication factor for PLL2 VCO output clock
  1574. * This parameter must be a number between 4 and 512 or between 8 and 420(*).
  1575. * @note You have to set the PLL2N parameter correctly to ensure that the VCO
  1576. * output frequency is between 150 and 420 MHz (when in medium VCO range) or
  1577. * between 192 and 836 MHZ or between 128 and 560 MHZ(*) (when in wide VCO range)
  1578. *
  1579. * @param __PLL2P__ specifies the division factor for peripheral kernel clocks
  1580. * This parameter must be a number between 1 and 128.
  1581. *
  1582. * @param __PLL2Q__ specifies the division factor for peripheral kernel clocks
  1583. * This parameter must be a number between 1 and 128.
  1584. *
  1585. * @param __PLL2R__ specifies the division factor for peripheral kernel clocks
  1586. * This parameter must be a number between 1 and 128.
  1587. *
  1588. * @note To insure an optimal behavior of the PLL when one of the post-divider (DIVP, DIVQ or DIVR)
  1589. * is not used, application shall clear the enable bit (DIVyEN) and assign lowest possible
  1590. * value to __PLL2P__, __PLL2Q__ or __PLL2R__ parameters.
  1591. * @retval None
  1592. *
  1593. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1594. */
  1595. #define __HAL_RCC_PLL2_CONFIG(__PLL2M__, __PLL2N__, __PLL2P__, __PLL2Q__,__PLL2R__ ) \
  1596. do{ \
  1597. MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM2) , ( (__PLL2M__) <<12U)); \
  1598. WRITE_REG (RCC->PLL2DIVR , ( (((__PLL2N__) - 1U ) & RCC_PLL2DIVR_N2) | ((((__PLL2P__) -1U ) << 9U) & RCC_PLL2DIVR_P2) | \
  1599. ((((__PLL2Q__) -1U) << 16U) & RCC_PLL2DIVR_Q2) | ((((__PLL2R__)- 1U) << 24U) & RCC_PLL2DIVR_R2))); \
  1600. } while(0)
  1601. /**
  1602. * @brief Macro to configures PLL2 clock Fractional Part Of The Multiplication Factor
  1603. *
  1604. * @note These bits can be written at any time, allowing dynamic fine-tuning of the PLL2 VCO
  1605. *
  1606. * @param __RCC_PLL2FRACN__ Specifies Fractional Part Of The Multiplication factor for PLL2 VCO
  1607. * It should be a value between 0 and 8191
  1608. * @note Warning: the software has to set correctly these bits to insure that the VCO
  1609. * output frequency is between its valid frequency range, which is:
  1610. * 192 to 836 MHz or 128 to 560 MHz(*) if PLL2VCOSEL = 0
  1611. * 150 to 420 MHz if PLL2VCOSEL = 1.
  1612. *
  1613. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1614. *
  1615. * @retval None
  1616. */
  1617. #define __HAL_RCC_PLL2FRACN_CONFIG(__RCC_PLL2FRACN__) \
  1618. MODIFY_REG(RCC->PLL2FRACR, RCC_PLL2FRACR_FRACN2,((uint32_t)(__RCC_PLL2FRACN__) << RCC_PLL2FRACR_FRACN2_Pos))
  1619. /** @brief Macro to select the PLL2 reference frequency range.
  1620. * @param __RCC_PLL2VCIRange__ specifies the PLL2 input frequency range
  1621. * This parameter can be one of the following values:
  1622. * @arg RCC_PLL2VCIRANGE_0: Range frequency is between 1 and 2 MHz
  1623. * @arg RCC_PLL2VCIRANGE_1: Range frequency is between 2 and 4 MHz
  1624. * @arg RCC_PLL2VCIRANGE_2: Range frequency is between 4 and 8 MHz
  1625. * @arg RCC_PLL2VCIRANGE_3: Range frequency is between 8 and 16 MHz
  1626. * @retval None
  1627. */
  1628. #define __HAL_RCC_PLL2_VCIRANGE(__RCC_PLL2VCIRange__) \
  1629. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2RGE, (__RCC_PLL2VCIRange__))
  1630. /** @brief Macro to select the PLL2 reference frequency range.
  1631. * @param __RCC_PLL2VCORange__ Specifies the PLL2 input frequency range
  1632. * This parameter can be one of the following values:
  1633. * @arg RCC_PLL2VCOWIDE: Range frequency is between 192 and 836 MHz or between 128 to 560 MHz(*)
  1634. * @arg RCC_PLL2VCOMEDIUM: Range frequency is between 150 and 420 MHz
  1635. *
  1636. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1637. *
  1638. * @retval None
  1639. */
  1640. #define __HAL_RCC_PLL2_VCORANGE(__RCC_PLL2VCORange__) \
  1641. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL2VCOSEL, (__RCC_PLL2VCORange__))
  1642. /** @brief Macros to enable or disable the main PLL3.
  1643. * @note After enabling PLL3, the application software should wait on
  1644. * PLL3RDY flag to be set indicating that PLL3 clock is stable and can
  1645. * be used as kernel clock source.
  1646. * @note PLL3 is disabled by hardware when entering STOP and STANDBY modes.
  1647. */
  1648. #define __HAL_RCC_PLL3_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLL3ON)
  1649. #define __HAL_RCC_PLL3_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON)
  1650. /**
  1651. * @brief Enables or disables Fractional Part Of The Multiplication Factor of PLL3 VCO
  1652. * @note Enabling/disabling Fractional Part can be any time without the need to stop the PLL3
  1653. * @retval None
  1654. */
  1655. #define __HAL_RCC_PLL3FRACN_ENABLE() SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)
  1656. #define __HAL_RCC_PLL3FRACN_DISABLE() CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLL3FRACEN)
  1657. /**
  1658. * @brief Enables or disables each clock output (PLL3_P_CLK, PLL3_Q_CLK, PLL3_R_CLK)
  1659. * @note Enabling/disabling those Clocks can be done only when the PLL3 is disabled,
  1660. * This is mainly used to save Power.
  1661. * @param __RCC_PLL3ClockOut__ specifies the PLL3 clock to be outputted
  1662. * This parameter can be one of the following values:
  1663. * @arg RCC_PLL3_DIVP: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1664. * @arg RCC_PLL3_DIVQ: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1665. * @arg RCC_PLL3_DIVR: This clock is used to generate peripherals clock up to 550MHZ(*), 480MHZ(**) or 280MHZ(***)
  1666. *
  1667. * (*) : For stm32h72xxx and stm32h73xxx family lines and requires to enable the CPU_FREQ_BOOST flash option byte, 520MHZ otherwise.
  1668. * (**) : For stm32h74xx and stm32h75xx family lines and requires the board to be connected on LDO regulator not SMPS, 400MHZ otherwise.
  1669. * (***): For stm32h7a3xx, stm32h7b3xx and stm32h7b0xx family lines.
  1670. *
  1671. * @retval None
  1672. */
  1673. #define __HAL_RCC_PLL3CLKOUT_ENABLE(__RCC_PLL3ClockOut__) SET_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))
  1674. #define __HAL_RCC_PLL3CLKOUT_DISABLE(__RCC_PLL3ClockOut__) CLEAR_BIT(RCC->PLLCFGR, (__RCC_PLL3ClockOut__))
  1675. /**
  1676. * @brief Macro to configures the PLL3 multiplication and division factors.
  1677. * @note This function must be used only when PLL3 is disabled.
  1678. *
  1679. * @param __PLL3M__ specifies the division factor for PLL3 VCO input clock
  1680. * This parameter must be a number between 1 and 63.
  1681. * @note You have to set the PLLM parameter correctly to ensure that the VCO input
  1682. * frequency ranges from 1 to 16 MHz.
  1683. *
  1684. * @param __PLL3N__ specifies the multiplication factor for PLL3 VCO output clock
  1685. * This parameter must be a number between 4 and 512.
  1686. * @note You have to set the PLL3N parameter correctly to ensure that the VCO
  1687. * output frequency is between 150 and 420 MHz (when in medium VCO range) or
  1688. * between 192 and 836 MHZ or between 128 and 560 MHZ(*) (when in wide VCO range)
  1689. *
  1690. * @param __PLL3P__ specifies the division factor for peripheral kernel clocks
  1691. * This parameter must be a number between 2 and 128 (where odd numbers not allowed)
  1692. *
  1693. * @param __PLL3Q__ specifies the division factor for peripheral kernel clocks
  1694. * This parameter must be a number between 1 and 128
  1695. *
  1696. * @param __PLL3R__ specifies the division factor for peripheral kernel clocks
  1697. * This parameter must be a number between 1 and 128
  1698. *
  1699. * @note To insure an optimal behavior of the PLL when one of the post-divider (DIVP, DIVQ or DIVR)
  1700. * is not used, application shall clear the enable bit (DIVyEN) and assign lowest possible
  1701. * value to __PLL3P__, __PLL3Q__ or __PLL3R__ parameters.
  1702. * @retval None
  1703. *
  1704. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1705. */
  1706. #define __HAL_RCC_PLL3_CONFIG(__PLL3M__, __PLL3N__, __PLL3P__, __PLL3Q__,__PLL3R__ ) \
  1707. do{ MODIFY_REG(RCC->PLLCKSELR, ( RCC_PLLCKSELR_DIVM3) , ( (__PLL3M__) <<20U)); \
  1708. WRITE_REG (RCC->PLL3DIVR , ( (((__PLL3N__) - 1U ) & RCC_PLL3DIVR_N3) | ((((__PLL3P__) -1U ) << 9U) & RCC_PLL3DIVR_P3) | \
  1709. ((((__PLL3Q__) -1U) << 16U) & RCC_PLL3DIVR_Q3) | ((((__PLL3R__) - 1U) << 24U) & RCC_PLL3DIVR_R3))); \
  1710. } while(0)
  1711. /**
  1712. * @brief Macro to configures PLL3 clock Fractional Part of The Multiplication Factor
  1713. *
  1714. * @note These bits can be written at any time, allowing dynamic fine-tuning of the PLL3 VCO
  1715. *
  1716. * @param __RCC_PLL3FRACN__ specifies Fractional Part Of The Multiplication Factor for PLL3 VCO
  1717. * It should be a value between 0 and 8191
  1718. * @note Warning: the software has to set correctly these bits to insure that the VCO
  1719. * output frequency is between its valid frequency range, which is:
  1720. * 192 to 836 MHz or 128 to 560 MHz(*) if PLL3VCOSEL = 0
  1721. * 150 to 420 MHz if PLL3VCOSEL = 1.
  1722. *
  1723. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1724. *
  1725. * @retval None
  1726. */
  1727. #define __HAL_RCC_PLL3FRACN_CONFIG(__RCC_PLL3FRACN__) MODIFY_REG(RCC->PLL3FRACR, RCC_PLL3FRACR_FRACN3, (uint32_t)(__RCC_PLL3FRACN__) << RCC_PLL3FRACR_FRACN3_Pos)
  1728. /** @brief Macro to select the PLL3 reference frequency range.
  1729. * @param __RCC_PLL3VCIRange__ specifies the PLL1 input frequency range
  1730. * This parameter can be one of the following values:
  1731. * @arg RCC_PLL3VCIRANGE_0: Range frequency is between 1 and 2 MHz
  1732. * @arg RCC_PLL3VCIRANGE_1: Range frequency is between 2 and 4 MHz
  1733. * @arg RCC_PLL3VCIRANGE_2: Range frequency is between 4 and 8 MHz
  1734. * @arg RCC_PLL3VCIRANGE_3: Range frequency is between 8 and 16 MHz
  1735. * @retval None
  1736. */
  1737. #define __HAL_RCC_PLL3_VCIRANGE(__RCC_PLL3VCIRange__) \
  1738. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3RGE, (__RCC_PLL3VCIRange__))
  1739. /** @brief Macro to select the PLL3 reference frequency range.
  1740. * @param __RCC_PLL3VCORange__ specifies the PLL1 input frequency range
  1741. * This parameter can be one of the following values:
  1742. * @arg RCC_PLL3VCOWIDE: Range frequency is between 192 and 836 MHz or between 128 to 560 MHz(*)
  1743. * @arg RCC_PLL3VCOMEDIUM: Range frequency is between 150 and 420 MHz
  1744. *
  1745. * (*) : For stm32h7a3xx and stm32h7b3xx family lines.
  1746. *
  1747. * @retval None
  1748. */
  1749. #define __HAL_RCC_PLL3_VCORANGE(__RCC_PLL3VCORange__) \
  1750. MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLL3VCOSEL, (__RCC_PLL3VCORange__))
  1751. /**
  1752. * @brief Macro to Configure the SAI1 clock source.
  1753. * @param __RCC_SAI1CLKSource__ defines the SAI1 clock source. This clock is derived
  1754. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1755. * This parameter can be one of the following values:
  1756. * @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL
  1757. * @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2
  1758. * @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3
  1759. * @arg RCC_SAI1CLKSOURCE_OSC: SAI1 clock = OSC
  1760. * @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock
  1761. * @retval None
  1762. */
  1763. #if defined(RCC_D2CCIP1R_SAI1SEL)
  1764. #define __HAL_RCC_SAI1_CONFIG(__RCC_SAI1CLKSource__ )\
  1765. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL, (__RCC_SAI1CLKSource__))
  1766. #else
  1767. #define __HAL_RCC_SAI1_CONFIG(__RCC_SAI1CLKSource__ )\
  1768. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI1SEL, (__RCC_SAI1CLKSource__))
  1769. #endif /* RCC_D2CCIP1R_SAI1SEL */
  1770. /** @brief Macro to get the SAI1 clock source.
  1771. * @retval The clock source can be one of the following values:
  1772. * @arg RCC_SAI1CLKSOURCE_PLL: SAI1 clock = PLL
  1773. * @arg RCC_SAI1CLKSOURCE_PLL2: SAI1 clock = PLL2
  1774. * @arg RCC_SAI1CLKSOURCE_PLL3: SAI1 clock = PLL3
  1775. * @arg RCC_SAI1CLKSOURCE_CLKP: SAI1 clock = CLKP
  1776. * @arg RCC_SAI1CLKSOURCE_PIN: SAI1 clock = External Clock
  1777. */
  1778. #if defined(RCC_D2CCIP1R_SAI1SEL)
  1779. #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI1SEL)))
  1780. #else
  1781. #define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI1SEL)))
  1782. #endif /* RCC_D2CCIP1R_SAI1SEL */
  1783. /**
  1784. * @brief Macro to Configure the SPDIFRX clock source.
  1785. * @param __RCC_SPDIFCLKSource__ defines the SPDIFRX clock source. This clock is derived
  1786. * from system PLL, PLL2, PLL3, or internal OSC clock
  1787. * This parameter can be one of the following values:
  1788. * @arg RCC_SPDIFRXCLKSOURCE_PLL: SPDIFRX clock = PLL
  1789. * @arg RCC_SPDIFRXCLKSOURCE_PLL2: SPDIFRX clock = PLL2
  1790. * @arg RCC_SPDIFRXCLKSOURCE_PLL3: SPDIFRX clock = PLL3
  1791. * @arg RCC_SPDIFRXCLKSOURCE_HSI: SPDIFRX clock = HSI
  1792. * @retval None
  1793. */
  1794. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  1795. #define __HAL_RCC_SPDIFRX_CONFIG(__RCC_SPDIFCLKSource__ )\
  1796. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL, (__RCC_SPDIFCLKSource__))
  1797. #else
  1798. #define __HAL_RCC_SPDIFRX_CONFIG(__RCC_SPDIFCLKSource__ )\
  1799. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL, (__RCC_SPDIFCLKSource__))
  1800. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  1801. /**
  1802. * @brief Macro to get the SPDIFRX clock source.
  1803. * @retval None
  1804. */
  1805. #if defined(RCC_D2CCIP1R_SPDIFSEL)
  1806. #define __HAL_RCC_GET_SPDIFRX_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPDIFSEL)))
  1807. #else
  1808. #define __HAL_RCC_GET_SPDIFRX_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPDIFSEL)))
  1809. #endif /* RCC_D2CCIP1R_SPDIFSEL */
  1810. #if defined(SAI3)
  1811. /**
  1812. * @brief Macro to Configure the SAI2/3 clock source.
  1813. * @param __RCC_SAI23CLKSource__ defines the SAI2/3 clock source. This clock is derived
  1814. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1815. * This parameter can be one of the following values:
  1816. * @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL
  1817. * @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2
  1818. * @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3
  1819. * @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock = CLKP
  1820. * @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock
  1821. * @retval None
  1822. */
  1823. #define __HAL_RCC_SAI23_CONFIG(__RCC_SAI23CLKSource__ )\
  1824. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL, (__RCC_SAI23CLKSource__))
  1825. /** @brief Macro to get the SAI2/3 clock source.
  1826. * @retval The clock source can be one of the following values:
  1827. * @arg RCC_SAI23CLKSOURCE_PLL: SAI2/3 clock = PLL
  1828. * @arg RCC_SAI23CLKSOURCE_PLL2: SAI2/3 clock = PLL2
  1829. * @arg RCC_SAI23CLKSOURCE_PLL3: SAI2/3 clock = PLL3
  1830. * @arg RCC_SAI23CLKSOURCE_CLKP: SAI2/3 clock = CLKP
  1831. * @arg RCC_SAI23CLKSOURCE_PIN: SAI2/3 clock = External Clock
  1832. */
  1833. #define __HAL_RCC_GET_SAI23_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SAI23SEL)))
  1834. /**
  1835. * @brief Macro to Configure the SAI2 clock source.
  1836. * @param __RCC_SAI2CLKSource__ defines the SAI2 clock source. This clock is derived
  1837. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1838. * This parameter can be one of the following values:
  1839. * @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL
  1840. * @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2
  1841. * @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3
  1842. * @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock = CLKP
  1843. * @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock
  1844. * @retval None
  1845. */
  1846. #define __HAL_RCC_SAI2_CONFIG __HAL_RCC_SAI23_CONFIG
  1847. /** @brief Macro to get the SAI2 clock source.
  1848. * @retval The clock source can be one of the following values:
  1849. * @arg RCC_SAI2CLKSOURCE_PLL: SAI2 clock = PLL
  1850. * @arg RCC_SAI2CLKSOURCE_PLL2: SAI2 clock = PLL2
  1851. * @arg RCC_SAI2CLKSOURCE_PLL3: SAI2 clock = PLL3
  1852. * @arg RCC_SAI2CLKSOURCE_CLKP: SAI2 clock = CLKP
  1853. * @arg RCC_SAI2CLKSOURCE_PIN: SAI2 clock = External Clock
  1854. */
  1855. #define __HAL_RCC_GET_SAI2_SOURCE __HAL_RCC_GET_SAI23_SOURCE
  1856. /**
  1857. * @brief Macro to Configure the SAI3 clock source.
  1858. * @param __RCC_SAI3CLKSource__ defines the SAI3 clock source. This clock is derived
  1859. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1860. * This parameter can be one of the following values:
  1861. * @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL
  1862. * @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2
  1863. * @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3
  1864. * @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock = CLKP
  1865. * @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock
  1866. * @retval None
  1867. */
  1868. #define __HAL_RCC_SAI3_CONFIG __HAL_RCC_SAI23_CONFIG
  1869. /** @brief Macro to get the SAI3 clock source.
  1870. * @retval The clock source can be one of the following values:
  1871. * @arg RCC_SAI3CLKSOURCE_PLL: SAI3 clock = PLL
  1872. * @arg RCC_SAI3CLKSOURCE_PLL2: SAI3 clock = PLL2
  1873. * @arg RCC_SAI3CLKSOURCE_PLL3: SAI3 clock = PLL3
  1874. * @arg RCC_SAI3CLKSOURCE_CLKP: SAI3 clock = CLKP
  1875. * @arg RCC_SAI3CLKSOURCE_PIN: SAI3 clock = External Clock
  1876. */
  1877. #define __HAL_RCC_GET_SAI3_SOURCE __HAL_RCC_GET_SAI23_SOURCE
  1878. #endif /* SAI3 */
  1879. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  1880. /**
  1881. * @brief Macro to Configure the SAI2A clock source.
  1882. * @param __RCC_SAI2ACLKSource__ defines the SAI2A clock source. This clock is derived
  1883. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1884. * This parameter can be one of the following values:
  1885. * @arg RCC_SAI2ACLKSOURCE_PLL: SAI2A clock = PLL
  1886. * @arg RCC_SAI2ACLKSOURCE_PLL2: SAI2A clock = PLL2
  1887. * @arg RCC_SAI2ACLKSOURCE_PLL3: SAI2A clock = PLL3
  1888. * @arg RCC_SAI2ACLKSOURCE_CLKP: SAI2A clock = CLKP
  1889. * @arg RCC_SAI2ACLKSOURCE_PIN: SAI2A clock = External Clock
  1890. * @arg RCC_SAI2ACLKSOURCE_SPDIF: SAI2A clock = SPDIF Clock
  1891. * @retval None
  1892. */
  1893. #define __HAL_RCC_SAI2A_CONFIG(__RCC_SAI2ACLKSource__ )\
  1894. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2ASEL, (__RCC_SAI2ACLKSource__))
  1895. /** @brief Macro to get the SAI2A clock source.
  1896. * @retval The clock source can be one of the following values:
  1897. * @arg RCC_SAI2CLKSOURCE_PLL: SAI2A clock = PLL
  1898. * @arg RCC_SAI2CLKSOURCE_PLL2: SAI2A clock = PLL2
  1899. * @arg RCC_SAI2CLKSOURCE_PLL3: SAI2A clock = PLL3
  1900. * @arg RCC_SAI2CLKSOURCE_CLKP: SAI2A clock = CLKP
  1901. * @arg RCC_SAI2CLKSOURCE_PIN: SAI2A clock = External Clock
  1902. * @arg RCC_SAI2ACLKSOURCE_SPDIF: SAI2A clock = SPDIF Clock
  1903. */
  1904. #define __HAL_RCC_GET_SAI2A_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2ASEL)))
  1905. #endif /* defined(RCC_CDCCIP1R_SAI2ASEL) */
  1906. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  1907. /**
  1908. * @brief Macro to Configure the SAI2B clock source.
  1909. * @param __RCC_SAI2BCLKSource__ defines the SAI2B clock source. This clock is derived
  1910. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1911. * This parameter can be one of the following values:
  1912. * @arg RCC_SAI2BCLKSOURCE_PLL: SAI2B clock = PLL
  1913. * @arg RCC_SAI2BCLKSOURCE_PLL2: SAI2B clock = PLL2
  1914. * @arg RCC_SAI2BCLKSOURCE_PLL3: SAI2B clock = PLL3
  1915. * @arg RCC_SAI2BCLKSOURCE_CLKP: SAI2B clock = CLKP
  1916. * @arg RCC_SAI2BCLKSOURCE_PIN: SAI2B clock = External Clock
  1917. * @arg RCC_SAI2BCLKSOURCE_SPDIF: SAI2B clock = SPDIF Clock
  1918. * @retval None
  1919. */
  1920. #define __HAL_RCC_SAI2B_CONFIG(__RCC_SAI2BCLKSource__ )\
  1921. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2BSEL, (__RCC_SAI2BCLKSource__))
  1922. /** @brief Macro to get the SAI2B clock source.
  1923. * @retval The clock source can be one of the following values:
  1924. * @arg RCC_SAI2BCLKSOURCE_PLL: SAI2B clock = PLL
  1925. * @arg RCC_SAI2BCLKSOURCE_PLL2: SAI2B clock = PLL2
  1926. * @arg RCC_SAI2BCLKSOURCE_PLL3: SAI2B clock = PLL3
  1927. * @arg RCC_SAI2BCLKSOURCE_CLKP: SAI2B clock = CLKP
  1928. * @arg RCC_SAI2BCLKSOURCE_PIN: SAI2B clock = External Clock
  1929. * @arg RCC_SAI2BCLKSOURCE_SPDIF: SAI2B clock = SPDIF Clock
  1930. */
  1931. #define __HAL_RCC_GET_SAI2B_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SAI2BSEL)))
  1932. #endif /* defined(RCC_CDCCIP1R_SAI2BSEL) */
  1933. #if defined(SAI4_Block_A)
  1934. /**
  1935. * @brief Macro to Configure the SAI4A clock source.
  1936. * @param __RCC_SAI4ACLKSource__ defines the SAI4A clock source. This clock is derived
  1937. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1938. * This parameter can be one of the following values:
  1939. * @arg RCC_SAI4ACLKSOURCE_PLL: SAI4A clock = PLL
  1940. * @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4A clock = PLL2
  1941. * @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4A clock = PLL3
  1942. * @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4A clock = CLKP
  1943. * @arg RCC_SAI4ACLKSOURCE_PIN: SAI4A clock = External Clock
  1944. * @retval None
  1945. */
  1946. #define __HAL_RCC_SAI4A_CONFIG(__RCC_SAI4ACLKSource__ )\
  1947. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL, (__RCC_SAI4ACLKSource__))
  1948. /** @brief Macro to get the SAI4A clock source.
  1949. * @retval The clock source can be one of the following values:
  1950. * @arg RCC_SAI4ACLKSOURCE_PLL: SAI4B clock = PLL
  1951. * @arg RCC_SAI4ACLKSOURCE_PLL2: SAI4B clock = PLL2
  1952. * @arg RCC_SAI4ACLKSOURCE_PLL3: SAI4B clock = PLL3
  1953. * @arg RCC_SAI4ACLKSOURCE_CLKP: SAI4B clock = CLKP
  1954. * @arg RCC_SAI4ACLKSOURCE_PIN: SAI4B clock = External Clock
  1955. */
  1956. #define __HAL_RCC_GET_SAI4A_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4ASEL)))
  1957. #endif /* SAI4_Block_A */
  1958. #if defined(SAI4_Block_B)
  1959. /**
  1960. * @brief Macro to Configure the SAI4B clock source.
  1961. * @param __RCC_SAI4BCLKSource__ defines the SAI4B clock source. This clock is derived
  1962. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  1963. * This parameter can be one of the following values:
  1964. * @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL
  1965. * @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2
  1966. * @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3
  1967. * @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock = CLKP
  1968. * @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock
  1969. * @retval None
  1970. */
  1971. #define __HAL_RCC_SAI4B_CONFIG(__RCC_SAI4BCLKSource__ )\
  1972. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL, (__RCC_SAI4BCLKSource__))
  1973. /** @brief Macro to get the SAI4B clock source.
  1974. * @retval The clock source can be one of the following values:
  1975. * @arg RCC_SAI4BCLKSOURCE_PLL: SAI4B clock = PLL
  1976. * @arg RCC_SAI4BCLKSOURCE_PLL2: SAI4B clock = PLL2
  1977. * @arg RCC_SAI4BCLKSOURCE_PLL3: SAI4B clock = PLL3
  1978. * @arg RCC_SAI4BCLKSOURCE_CLKP: SAI4B clock = CLKP
  1979. * @arg RCC_SAI4BCLKSOURCE_PIN: SAI4B clock = External Clock
  1980. */
  1981. #define __HAL_RCC_GET_SAI4B_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SAI4BSEL)))
  1982. #endif /* SAI4_Block_B */
  1983. /** @brief macro to configure the I2C1/2/3/5* clock (I2C123CLK).
  1984. *
  1985. * @param __I2C1235CLKSource__ specifies the I2C1/2/3/5* clock source.
  1986. * This parameter can be one of the following values:
  1987. * @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3/5* clock
  1988. * @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3/5* clock
  1989. * @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3/5* clock
  1990. * @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3/5* clock
  1991. *
  1992. * (**): Available on stm32h72xxx and stm32h73xxx family lines.
  1993. */
  1994. #if defined(RCC_D2CCIP2R_I2C123SEL)
  1995. #define __HAL_RCC_I2C123_CONFIG(__I2C1235CLKSource__) \
  1996. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL, (uint32_t)(__I2C1235CLKSource__))
  1997. #elif defined(RCC_CDCCIP2R_I2C123SEL)
  1998. #define __HAL_RCC_I2C123_CONFIG(__I2C1235CLKSource__) \
  1999. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_I2C123SEL, (uint32_t)(__I2C1235CLKSource__))
  2000. #else /* RCC_D2CCIP2R_I2C1235SEL */
  2001. #define __HAL_RCC_I2C1235_CONFIG(__I2C1235CLKSource__) \
  2002. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C1235SEL, (uint32_t)(__I2C1235CLKSource__))
  2003. /* alias */
  2004. #define __HAL_RCC_I2C123_CONFIG __HAL_RCC_I2C1235_CONFIG
  2005. #endif /* RCC_D2CCIP2R_I2C123SEL */
  2006. /** @brief macro to get the I2C1/2/3/5* clock source.
  2007. * @retval The clock source can be one of the following values:
  2008. * @arg RCC_I2C123CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1/2/3/5* clock
  2009. * @arg RCC_I2C123CLKSOURCE_PLL3: PLL3 selected as I2C1/2/3/5* clock
  2010. * @arg RCC_I2C123CLKSOURCE_HSI: HSI selected as I2C1/2/3/5* clock
  2011. * @arg RCC_I2C123CLKSOURCE_CSI: CSI selected as I2C1/2/3/5* clock
  2012. *
  2013. * (**): Available on stm32h72xxx and stm32h73xxx family lines.
  2014. */
  2015. #if defined(RCC_D2CCIP2R_I2C123SEL)
  2016. #define __HAL_RCC_GET_I2C123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C123SEL)))
  2017. #elif defined(RCC_CDCCIP2R_I2C123SEL)
  2018. #define __HAL_RCC_GET_I2C123_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_I2C123SEL)))
  2019. #else /* RCC_D2CCIP2R_I2C1235SEL */
  2020. #define __HAL_RCC_GET_I2C1235_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_I2C1235SEL)))
  2021. /* alias */
  2022. #define __HAL_RCC_GET_I2C123_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
  2023. #endif /* RCC_D2CCIP2R_I2C123SEL */
  2024. /** @brief macro to configure the I2C1 clock (I2C1CLK).
  2025. *
  2026. * @param __I2C1CLKSource__ specifies the I2C1 clock source.
  2027. * This parameter can be one of the following values:
  2028. * @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock
  2029. * @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock
  2030. * @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock
  2031. * @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock
  2032. */
  2033. #if defined(I2C5)
  2034. #define __HAL_RCC_I2C1_CONFIG __HAL_RCC_I2C1235_CONFIG
  2035. #else
  2036. #define __HAL_RCC_I2C1_CONFIG __HAL_RCC_I2C123_CONFIG
  2037. #endif /*I2C5*/
  2038. /** @brief macro to get the I2C1 clock source.
  2039. * @retval The clock source can be one of the following values:
  2040. * @arg RCC_I2C1CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C1 clock
  2041. * @arg RCC_I2C1CLKSOURCE_PLL3: PLL3 selected as I2C1 clock
  2042. * @arg RCC_I2C1CLKSOURCE_HSI: HSI selected as I2C1 clock
  2043. * @arg RCC_I2C1CLKSOURCE_CSI: CSI selected as I2C1 clock
  2044. */
  2045. #if defined(I2C5)
  2046. #define __HAL_RCC_GET_I2C1_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
  2047. #else
  2048. #define __HAL_RCC_GET_I2C1_SOURCE __HAL_RCC_GET_I2C123_SOURCE
  2049. #endif /*I2C5*/
  2050. /** @brief macro to configure the I2C2 clock (I2C2CLK).
  2051. *
  2052. * @param __I2C2CLKSource__ specifies the I2C2 clock source.
  2053. * This parameter can be one of the following values:
  2054. * @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock
  2055. * @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock
  2056. * @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock
  2057. * @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock
  2058. */
  2059. #if defined(I2C5)
  2060. #define __HAL_RCC_I2C2_CONFIG __HAL_RCC_I2C1235_CONFIG
  2061. #else
  2062. #define __HAL_RCC_I2C2_CONFIG __HAL_RCC_I2C123_CONFIG
  2063. #endif /*I2C5*/
  2064. /** @brief macro to get the I2C2 clock source.
  2065. * @retval The clock source can be one of the following values:
  2066. * @arg RCC_I2C2CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C2 clock
  2067. * @arg RCC_I2C2CLKSOURCE_PLL3: PLL3 selected as I2C2 clock
  2068. * @arg RCC_I2C2CLKSOURCE_HSI: HSI selected as I2C2 clock
  2069. * @arg RCC_I2C2CLKSOURCE_CSI: CSI selected as I2C2 clock
  2070. */
  2071. #if defined(I2C5)
  2072. #define __HAL_RCC_GET_I2C2_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
  2073. #else
  2074. #define __HAL_RCC_GET_I2C2_SOURCE __HAL_RCC_GET_I2C123_SOURCE
  2075. #endif /*I2C5*/
  2076. /** @brief macro to configure the I2C3 clock (I2C3CLK).
  2077. *
  2078. * @param __I2C3CLKSource__ specifies the I2C3 clock source.
  2079. * This parameter can be one of the following values:
  2080. * @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock
  2081. * @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock
  2082. * @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock
  2083. * @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock
  2084. */
  2085. #if defined(I2C5)
  2086. #define __HAL_RCC_I2C3_CONFIG __HAL_RCC_I2C1235_CONFIG
  2087. #else
  2088. #define __HAL_RCC_I2C3_CONFIG __HAL_RCC_I2C123_CONFIG
  2089. #endif /*I2C5*/
  2090. /** @brief macro to get the I2C3 clock source.
  2091. * @retval The clock source can be one of the following values:
  2092. * @arg RCC_I2C3CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C3 clock
  2093. * @arg RCC_I2C3CLKSOURCE_PLL3: PLL3 selected as I2C3 clock
  2094. * @arg RCC_I2C3CLKSOURCE_HSI: HSI selected as I2C3 clock
  2095. * @arg RCC_I2C3CLKSOURCE_CSI: CSI selected as I2C3 clock
  2096. */
  2097. #if defined(I2C5)
  2098. #define __HAL_RCC_GET_I2C3_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
  2099. #else
  2100. #define __HAL_RCC_GET_I2C3_SOURCE __HAL_RCC_GET_I2C123_SOURCE
  2101. #endif /*I2C5*/
  2102. /** @brief macro to configure the I2C4 clock (I2C4CLK).
  2103. *
  2104. * @param __I2C4CLKSource__ specifies the I2C4 clock source.
  2105. * This parameter can be one of the following values:
  2106. * @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock
  2107. * @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock
  2108. * @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock
  2109. * @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock
  2110. */
  2111. #if defined(RCC_D3CCIPR_I2C4SEL)
  2112. #define __HAL_RCC_I2C4_CONFIG(__I2C4CLKSource__) \
  2113. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL, (uint32_t)(__I2C4CLKSource__))
  2114. #else
  2115. #define __HAL_RCC_I2C4_CONFIG(__I2C4CLKSource__) \
  2116. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_I2C4SEL, (uint32_t)(__I2C4CLKSource__))
  2117. #endif /* RCC_D3CCIPR_I2C4SEL */
  2118. /** @brief macro to get the I2C4 clock source.
  2119. * @retval The clock source can be one of the following values:
  2120. * @arg RCC_I2C4CLKSOURCE_D3PCLK1: D3PCLK1 selected as I2C4 clock
  2121. * @arg RCC_I2C4CLKSOURCE_PLL3: PLL3 selected as I2C4 clock
  2122. * @arg RCC_I2C4CLKSOURCE_HSI: HSI selected as I2C4 clock
  2123. * @arg RCC_I2C4CLKSOURCE_CSI: CSI selected as I2C4 clock
  2124. */
  2125. #if defined(RCC_D3CCIPR_I2C4SEL)
  2126. #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_I2C4SEL)))
  2127. #else
  2128. #define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_I2C4SEL)))
  2129. #endif /* RCC_D3CCIPR_I2C4SEL */
  2130. #if defined(I2C5)
  2131. /** @brief macro to configure the I2C5 clock (I2C5CLK).
  2132. *
  2133. * @param __I2C5CLKSource__ specifies the I2C5 clock source.
  2134. * This parameter can be one of the following values:
  2135. * @arg RCC_I2C5CLKSOURCE_D2PCLK1: D2PCLK1 selected as I2C5 clock
  2136. * @arg RCC_I2C5CLKSOURCE_PLL3: PLL3 selected as I2C5 clock
  2137. * @arg RCC_I2C5CLKSOURCE_HSI: HSI selected as I2C5 clock
  2138. * @arg RCC_I2C5CLKSOURCE_CSI: CSI selected as I2C5 clock
  2139. */
  2140. #define __HAL_RCC_I2C5_CONFIG __HAL_RCC_I2C1235_CONFIG
  2141. #endif /* I2C5 */
  2142. #if defined(I2C5)
  2143. /** @brief macro to get the I2C5 clock source.
  2144. * @retval The clock source can be one of the following values:
  2145. * @arg RCC_I2C5CLKSOURCE_D2PCLK1: D2PCLK5 selected as I2C5 clock
  2146. * @arg RCC_I2C5CLKSOURCE_PLL3: PLL3 selected as I2C5 clock
  2147. * @arg RCC_I2C5CLKSOURCE_HSI: HSI selected as I2C5 clock
  2148. * @arg RCC_I2C5CLKSOURCE_CSI: CSI selected as I2C5 clock
  2149. */
  2150. #define __HAL_RCC_GET_I2C5_SOURCE __HAL_RCC_GET_I2C1235_SOURCE
  2151. #endif /* I2C5 */
  2152. /** @brief macro to configure the USART1/6/9* /10* clock (USART16CLK).
  2153. *
  2154. * @param __USART16910CLKSource__ specifies the USART1/6/9* /10* clock source.
  2155. * This parameter can be one of the following values:
  2156. * @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6/9* /10* clock
  2157. * @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6/9* /10* clock
  2158. * @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6/9* /10* clock
  2159. * @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6/9* /10* clock
  2160. * @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6/9* /10* clock
  2161. * @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6/9* /10* clock
  2162. *
  2163. * (*) : Available on some STM32H7 lines only.
  2164. */
  2165. #if defined(RCC_D2CCIP2R_USART16SEL)
  2166. #define __HAL_RCC_USART16_CONFIG(__USART16910CLKSource__) \
  2167. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL, (uint32_t)(__USART16910CLKSource__))
  2168. #elif defined(RCC_CDCCIP2R_USART16910SEL)
  2169. #define __HAL_RCC_USART16910_CONFIG(__USART16910CLKSource__) \
  2170. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USART16910SEL, (uint32_t)(__USART16910CLKSource__))
  2171. /* alias */
  2172. #define __HAL_RCC_USART16_CONFIG __HAL_RCC_USART16910_CONFIG
  2173. #else /* RCC_D2CCIP2R_USART16910SEL */
  2174. #define __HAL_RCC_USART16910_CONFIG(__USART16910CLKSource__) \
  2175. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16910SEL, (uint32_t)(__USART16910CLKSource__))
  2176. /* alias */
  2177. #define __HAL_RCC_USART16_CONFIG __HAL_RCC_USART16910_CONFIG
  2178. #endif /* RCC_D2CCIP2R_USART16SEL */
  2179. /** @brief macro to get the USART1/6/9* /10* clock source.
  2180. * @retval The clock source can be one of the following values:
  2181. * @arg RCC_USART16CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1/6/9* /10* clock
  2182. * @arg RCC_USART16CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1/6/9* /10* clock
  2183. * @arg RCC_USART16CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1/6/9* /10* clock
  2184. * @arg RCC_USART16CLKSOURCE_HSI: HSI selected as USART1/6/9* /10* clock
  2185. * @arg RCC_USART16CLKSOURCE_CSI: CSI Clock selected as USART1/6/9* /10* clock
  2186. * @arg RCC_USART16CLKSOURCE_LSE: LSE selected as USART1/6/9* /10* clock
  2187. *
  2188. * (*) : Available on some STM32H7 lines only.
  2189. */
  2190. #if defined(RCC_D2CCIP2R_USART16SEL)
  2191. #define __HAL_RCC_GET_USART16_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16SEL)))
  2192. #elif defined(RCC_CDCCIP2R_USART16910SEL)
  2193. #define __HAL_RCC_GET_USART16910_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USART16910SEL)))
  2194. /* alias*/
  2195. #define __HAL_RCC_GET_USART16_SOURCE __HAL_RCC_GET_USART16910_SOURCE
  2196. #else /* RCC_D2CCIP2R_USART16910SEL */
  2197. #define __HAL_RCC_GET_USART16910_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART16910SEL)))
  2198. /* alias */
  2199. #define __HAL_RCC_GET_USART16_SOURCE __HAL_RCC_GET_USART16910_SOURCE
  2200. #endif /* RCC_D2CCIP2R_USART16SEL */
  2201. /** @brief macro to configure the USART234578 clock (USART234578CLK).
  2202. *
  2203. * @param __USART234578CLKSource__ specifies the USART2/3/4/5/7/8 clock source.
  2204. * This parameter can be one of the following values:
  2205. * @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock
  2206. * @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock
  2207. * @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock
  2208. * @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock
  2209. * @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock
  2210. * @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock
  2211. */
  2212. #if defined(RCC_D2CCIP2R_USART28SEL)
  2213. #define __HAL_RCC_USART234578_CONFIG(__USART234578CLKSource__) \
  2214. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL, (uint32_t)(__USART234578CLKSource__))
  2215. #else
  2216. #define __HAL_RCC_USART234578_CONFIG(__USART234578CLKSource__) \
  2217. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USART234578SEL, (uint32_t)(__USART234578CLKSource__))
  2218. #endif /* RCC_D2CCIP2R_USART28SEL */
  2219. /** @brief macro to get the USART2/3/4/5/7/8 clock source.
  2220. * @retval The clock source can be one of the following values:
  2221. * @arg RCC_USART234578CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2/3/4/5/7/8 clock
  2222. * @arg RCC_USART234578CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2/3/4/5/7/8 clock
  2223. * @arg RCC_USART234578CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2/3/4/5/7/8 clock
  2224. * @arg RCC_USART234578CLKSOURCE_HSI: HSI selected as USART2/3/4/5/7/8 clock
  2225. * @arg RCC_USART234578CLKSOURCE_CSI: CSI Clock selected as USART2/3/4/5/7/8 clock
  2226. * @arg RCC_USART234578CLKSOURCE_LSE: LSE selected as USART2/3/4/5/7/8 clock
  2227. */
  2228. #if defined(RCC_D2CCIP2R_USART28SEL)
  2229. #define __HAL_RCC_GET_USART234578_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USART28SEL)))
  2230. #else
  2231. #define __HAL_RCC_GET_USART234578_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USART234578SEL)))
  2232. #endif /* RCC_D2CCIP2R_USART28SEL */
  2233. /** @brief macro to configure the USART1 clock (USART1CLK).
  2234. *
  2235. * @param __USART1CLKSource__ specifies the USART1 clock source.
  2236. * This parameter can be one of the following values:
  2237. * @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock
  2238. * @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock
  2239. * @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock
  2240. * @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock
  2241. * @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock
  2242. * @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock
  2243. */
  2244. #define __HAL_RCC_USART1_CONFIG __HAL_RCC_USART16_CONFIG
  2245. /** @brief macro to get the USART1 clock source.
  2246. * @retval The clock source can be one of the following values:
  2247. * @arg RCC_USART1CLKSOURCE_D2PCLK2: APB2 Clock selected as USART1 clock
  2248. * @arg RCC_USART1CLKSOURCE_PLL2: PLL2_Q Clock selected as USART1 clock
  2249. * @arg RCC_USART1CLKSOURCE_PLL3: PLL3_Q Clock selected as USART1 clock
  2250. * @arg RCC_USART1CLKSOURCE_HSI: HSI selected as USART1 clock
  2251. * @arg RCC_USART1CLKSOURCE_CSI: CSI Clock selected as USART1 clock
  2252. * @arg RCC_USART1CLKSOURCE_LSE: LSE selected as USART1 clock
  2253. */
  2254. #define __HAL_RCC_GET_USART1_SOURCE __HAL_RCC_GET_USART16_SOURCE
  2255. /** @brief macro to configure the USART2 clock (USART2CLK).
  2256. *
  2257. * @param __USART2CLKSource__ specifies the USART2 clock source.
  2258. * This parameter can be one of the following values:
  2259. * @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock
  2260. * @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock
  2261. * @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock
  2262. * @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock
  2263. * @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock
  2264. * @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock
  2265. */
  2266. #define __HAL_RCC_USART2_CONFIG __HAL_RCC_USART234578_CONFIG
  2267. /** @brief macro to get the USART2 clock source.
  2268. * @retval The clock source can be one of the following values:
  2269. * @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART2 clock
  2270. * @arg RCC_USART2CLKSOURCE_PLL2: PLL2_Q Clock selected as USART2 clock
  2271. * @arg RCC_USART2CLKSOURCE_PLL3: PLL3_Q Clock selected as USART2 clock
  2272. * @arg RCC_USART2CLKSOURCE_HSI: HSI selected as USART2 clock
  2273. * @arg RCC_USART2CLKSOURCE_CSI: CSI Clock selected as USART2 clock
  2274. * @arg RCC_USART2CLKSOURCE_LSE: LSE selected as USART2 clock
  2275. */
  2276. #define __HAL_RCC_GET_USART2_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2277. /** @brief macro to configure the USART3 clock (USART3CLK).
  2278. *
  2279. * @param __USART3CLKSource__ specifies the USART3 clock source.
  2280. * This parameter can be one of the following values:
  2281. * @arg RCC_USART3CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock
  2282. * @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock
  2283. * @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock
  2284. * @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock
  2285. * @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock
  2286. * @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock
  2287. */
  2288. #define __HAL_RCC_USART3_CONFIG __HAL_RCC_USART234578_CONFIG
  2289. /** @brief macro to get the USART3 clock source.
  2290. * @retval The clock source can be one of the following values:
  2291. * @arg RCC_USART2CLKSOURCE_D2PCLK1: APB1 Clock selected as USART3 clock
  2292. * @arg RCC_USART3CLKSOURCE_PLL2: PLL2_Q Clock selected as USART3 clock
  2293. * @arg RCC_USART3CLKSOURCE_PLL3: PLL3_Q Clock selected as USART3 clock
  2294. * @arg RCC_USART3CLKSOURCE_HSI: HSI selected as USART3 clock
  2295. * @arg RCC_USART3CLKSOURCE_CSI: CSI Clock selected as USART3 clock
  2296. * @arg RCC_USART3CLKSOURCE_LSE: LSE selected as USART3 clock
  2297. */
  2298. #define __HAL_RCC_GET_USART3_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2299. /** @brief macro to configure the UART4 clock (UART4CLK).
  2300. *
  2301. * @param __UART4CLKSource__ specifies the UART4 clock source.
  2302. * This parameter can be one of the following values:
  2303. * @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock
  2304. * @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock
  2305. * @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock
  2306. * @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock
  2307. * @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock
  2308. * @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock
  2309. */
  2310. #define __HAL_RCC_UART4_CONFIG __HAL_RCC_USART234578_CONFIG
  2311. /** @brief macro to get the UART4 clock source.
  2312. * @retval The clock source can be one of the following values:
  2313. * @arg RCC_UART4CLKSOURCE_D2PCLK1: APB1 Clock selected as UART4 clock
  2314. * @arg RCC_UART4CLKSOURCE_PLL2: PLL2_Q Clock selected as UART4 clock
  2315. * @arg RCC_UART4CLKSOURCE_PLL3: PLL3_Q Clock selected as UART4 clock
  2316. * @arg RCC_UART4CLKSOURCE_HSI: HSI selected as UART4 clock
  2317. * @arg RCC_UART4CLKSOURCE_CSI: CSI Clock selected as UART4 clock
  2318. * @arg RCC_UART4CLKSOURCE_LSE: LSE selected as UART4 clock
  2319. */
  2320. #define __HAL_RCC_GET_UART4_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2321. /** @brief macro to configure the UART5 clock (UART5CLK).
  2322. *
  2323. * @param __UART5CLKSource__ specifies the UART5 clock source.
  2324. * This parameter can be one of the following values:
  2325. * @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock
  2326. * @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock
  2327. * @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock
  2328. * @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock
  2329. * @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock
  2330. * @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock
  2331. */
  2332. #define __HAL_RCC_UART5_CONFIG __HAL_RCC_USART234578_CONFIG
  2333. /** @brief macro to get the UART5 clock source.
  2334. * @retval The clock source can be one of the following values:
  2335. * @arg RCC_UART5CLKSOURCE_D2PCLK1: APB1 Clock selected as UART5 clock
  2336. * @arg RCC_UART5CLKSOURCE_PLL2: PLL2_Q Clock selected as UART5 clock
  2337. * @arg RCC_UART5CLKSOURCE_PLL3: PLL3_Q Clock selected as UART5 clock
  2338. * @arg RCC_UART5CLKSOURCE_HSI: HSI selected as UART5 clock
  2339. * @arg RCC_UART5CLKSOURCE_CSI: CSI Clock selected as UART5 clock
  2340. * @arg RCC_UART5CLKSOURCE_LSE: LSE selected as UART5 clock
  2341. */
  2342. #define __HAL_RCC_GET_UART5_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2343. /** @brief macro to configure the USART6 clock (USART6CLK).
  2344. *
  2345. * @param __USART6CLKSource__ specifies the USART6 clock source.
  2346. * This parameter can be one of the following values:
  2347. * @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock
  2348. * @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock
  2349. * @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock
  2350. * @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock
  2351. * @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock
  2352. * @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock
  2353. */
  2354. #define __HAL_RCC_USART6_CONFIG __HAL_RCC_USART16_CONFIG
  2355. /** @brief macro to get the USART6 clock source.
  2356. * @retval The clock source can be one of the following values:
  2357. * @arg RCC_USART6CLKSOURCE_D2PCLK2: APB2 Clock selected as USART6 clock
  2358. * @arg RCC_USART6CLKSOURCE_PLL2: PLL2_Q Clock selected as USART6 clock
  2359. * @arg RCC_USART6CLKSOURCE_PLL3: PLL3_Q Clock selected as USART6 clock
  2360. * @arg RCC_USART6CLKSOURCE_HSI: HSI selected as USART6 clock
  2361. * @arg RCC_USART6CLKSOURCE_CSI: CSI Clock selected as USART6 clock
  2362. * @arg RCC_USART6CLKSOURCE_LSE: LSE selected as USART6 clock
  2363. */
  2364. #define __HAL_RCC_GET_USART6_SOURCE __HAL_RCC_GET_USART16_SOURCE
  2365. /** @brief macro to configure the UART5 clock (UART7CLK).
  2366. *
  2367. * @param __UART7CLKSource__ specifies the UART7 clock source.
  2368. * This parameter can be one of the following values:
  2369. * @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock
  2370. * @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock
  2371. * @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock
  2372. * @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock
  2373. * @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock
  2374. * @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock
  2375. */
  2376. #define __HAL_RCC_UART7_CONFIG __HAL_RCC_USART234578_CONFIG
  2377. /** @brief macro to get the UART7 clock source.
  2378. * @retval The clock source can be one of the following values:
  2379. * @arg RCC_UART7CLKSOURCE_D2PCLK1: APB1 Clock selected as UART7 clock
  2380. * @arg RCC_UART7CLKSOURCE_PLL2: PLL2_Q Clock selected as UART7 clock
  2381. * @arg RCC_UART7CLKSOURCE_PLL3: PLL3_Q Clock selected as UART7 clock
  2382. * @arg RCC_UART7CLKSOURCE_HSI: HSI selected as UART7 clock
  2383. * @arg RCC_UART7CLKSOURCE_CSI: CSI Clock selected as UART7 clock
  2384. * @arg RCC_UART7CLKSOURCE_LSE: LSE selected as UART7 clock
  2385. */
  2386. #define __HAL_RCC_GET_UART7_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2387. /** @brief macro to configure the UART8 clock (UART8CLK).
  2388. *
  2389. * @param __UART8CLKSource__ specifies the UART8 clock source.
  2390. * This parameter can be one of the following values:
  2391. * @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock
  2392. * @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock
  2393. * @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock
  2394. * @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock
  2395. * @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock
  2396. * @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock
  2397. */
  2398. #define __HAL_RCC_UART8_CONFIG __HAL_RCC_USART234578_CONFIG
  2399. /** @brief macro to get the UART8 clock source.
  2400. * @retval The clock source can be one of the following values:
  2401. * @arg RCC_UART8CLKSOURCE_D2PCLK1: APB1 Clock selected as UART8 clock
  2402. * @arg RCC_UART8CLKSOURCE_PLL2: PLL2_Q Clock selected as UART8 clock
  2403. * @arg RCC_UART8CLKSOURCE_PLL3: PLL3_Q Clock selected as UART8 clock
  2404. * @arg RCC_UART8CLKSOURCE_HSI: HSI selected as UART8 clock
  2405. * @arg RCC_UART8CLKSOURCE_CSI: CSI Clock selected as UART8 clock
  2406. * @arg RCC_UART8CLKSOURCE_LSE: LSE selected as UART8 clock
  2407. */
  2408. #define __HAL_RCC_GET_UART8_SOURCE __HAL_RCC_GET_USART234578_SOURCE
  2409. #if defined(UART9)
  2410. /** @brief macro to configure the UART9 clock (UART9CLK).
  2411. *
  2412. * @param __UART8CLKSource__ specifies the UART8 clock source.
  2413. * This parameter can be one of the following values:
  2414. * @arg RCC_UART9CLKSOURCE_D2PCLK1: APB1 Clock selected as UART9 clock
  2415. * @arg RCC_UART9CLKSOURCE_PLL2: PLL2_Q Clock selected as UART9 clock
  2416. * @arg RCC_UART9CLKSOURCE_PLL3: PLL3_Q Clock selected as UART9 clock
  2417. * @arg RCC_UART9CLKSOURCE_HSI: HSI selected as UART9 clock
  2418. * @arg RCC_UART9CLKSOURCE_CSI: CSI Clock selected as UART9 clock
  2419. * @arg RCC_UART9CLKSOURCE_LSE: LSE selected as UART9 clock
  2420. */
  2421. #define __HAL_RCC_UART9_CONFIG __HAL_RCC_USART16_CONFIG
  2422. /** @brief macro to get the UART9 clock source.
  2423. * @retval The clock source can be one of the following values:
  2424. * @arg RCC_UART9CLKSOURCE_D2PCLK1: APB1 Clock selected as UART99 clock
  2425. * @arg RCC_UART9CLKSOURCE_PLL2: PLL2_Q Clock selected as UART99 clock
  2426. * @arg RCC_UART9CLKSOURCE_PLL3: PLL3_Q Clock selected as UART99 clock
  2427. * @arg RCC_UART9CLKSOURCE_HSI: HSI selected as UART9 clock
  2428. * @arg RCC_UART9CLKSOURCE_CSI: CSI Clock selected as UART9 clock
  2429. * @arg RCC_UART9CLKSOURCE_LSE: LSE selected as UART9 clock
  2430. */
  2431. #define __HAL_RCC_GET_UART9_SOURCE __HAL_RCC_GET_USART16_SOURCE
  2432. #endif /* UART9 */
  2433. #if defined(USART10)
  2434. /** @brief macro to configure the USART10 clock (USART10CLK).
  2435. *
  2436. * @param __UART8CLKSource__ specifies the UART8 clock source.
  2437. * This parameter can be one of the following values:
  2438. * @arg RCC_USART10CLKSOURCE_D2PCLK1: APB1 Clock selected as USART10 clock
  2439. * @arg RCC_USART10CLKSOURCE_PLL2: PLL2_Q Clock selected as USART10 clock
  2440. * @arg RCC_USART10CLKSOURCE_PLL3: PLL3_Q Clock selected as USART10 clock
  2441. * @arg RCC_USART10CLKSOURCE_HSI: HSI selected as USART10 clock
  2442. * @arg RCC_USART10CLKSOURCE_CSI: CSI Clock selected as USART10 clock
  2443. * @arg RCC_USART10CLKSOURCE_LSE: LSE selected as USART10 clock
  2444. */
  2445. #define __HAL_RCC_USART10_CONFIG __HAL_RCC_USART16_CONFIG
  2446. /** @brief macro to get the USART10 clock source.
  2447. * @retval The clock source can be one of the following values:
  2448. * @arg RCC_USART10CLKSOURCE_D2PCLK1: APB1 Clock selected as USART10 clock
  2449. * @arg RCC_USART10CLKSOURCE_PLL2: PLL2_Q Clock selected as USART10 clock
  2450. * @arg RCC_USART10CLKSOURCE_PLL3: PLL3_Q Clock selected as USART10 clock
  2451. * @arg RCC_USART10CLKSOURCE_HSI: HSI selected as USART10 clock
  2452. * @arg RCC_USART10CLKSOURCE_CSI: CSI Clock selected as USART10 clock
  2453. * @arg RCC_USART10CLKSOURCE_LSE: LSE selected as USART10 clock
  2454. */
  2455. #define __HAL_RCC_GET_USART10_SOURCE __HAL_RCC_GET_USART16_SOURCE
  2456. #endif /* USART10 */
  2457. /** @brief macro to configure the LPUART1 clock (LPUART1CLK).
  2458. *
  2459. * @param __LPUART1CLKSource__ specifies the LPUART1 clock source.
  2460. * This parameter can be one of the following values:
  2461. * @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock
  2462. * @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock
  2463. * @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock
  2464. * @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock
  2465. * @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock
  2466. * @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock
  2467. */
  2468. #if defined (RCC_D3CCIPR_LPUART1SEL)
  2469. #define __HAL_RCC_LPUART1_CONFIG(__LPUART1CLKSource__) \
  2470. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL, (uint32_t)(__LPUART1CLKSource__))
  2471. #else
  2472. #define __HAL_RCC_LPUART1_CONFIG(__LPUART1CLKSource__) \
  2473. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL, (uint32_t)(__LPUART1CLKSource__))
  2474. #endif /* RCC_D3CCIPR_LPUART1SEL */
  2475. /** @brief macro to get the LPUART1 clock source.
  2476. * @retval The clock source can be one of the following values:
  2477. * @arg RCC_LPUART1CLKSOURCE_D3PCLK1: APB4 Clock selected as LPUART1 clock
  2478. * @arg RCC_LPUART1CLKSOURCE_PLL2: PLL2_Q Clock selected as LPUART1 clock
  2479. * @arg RCC_LPUART1CLKSOURCE_PLL3: PLL3_Q Clock selected as LPUART1 clock
  2480. * @arg RCC_LPUART1CLKSOURCE_HSI: HSI selected as LPUART1 clock
  2481. * @arg RCC_LPUART1CLKSOURCE_CSI: CSI Clock selected as LPUART1 clock
  2482. * @arg RCC_LPUART1CLKSOURCE_LSE: LSE selected as LPUART1 clock
  2483. */
  2484. #if defined (RCC_D3CCIPR_LPUART1SEL)
  2485. #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPUART1SEL)))
  2486. #else
  2487. #define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPUART1SEL)))
  2488. #endif /* RCC_D3CCIPR_LPUART1SEL */
  2489. /** @brief macro to configure the LPTIM1 clock source.
  2490. *
  2491. * @param __LPTIM1CLKSource__ specifies the LPTIM1 clock source.
  2492. * This parameter can be one of the following values:
  2493. * @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock
  2494. * @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock
  2495. * @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock
  2496. * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock
  2497. * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock
  2498. * @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock
  2499. */
  2500. #if defined(RCC_D2CCIP2R_LPTIM1SEL)
  2501. #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1CLKSource__) \
  2502. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL, (uint32_t)(__LPTIM1CLKSource__))
  2503. #else
  2504. #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1CLKSource__) \
  2505. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_LPTIM1SEL, (uint32_t)(__LPTIM1CLKSource__))
  2506. #endif /* RCC_D2CCIP2R_LPTIM1SEL */
  2507. /** @brief macro to get the LPTIM1 clock source.
  2508. * @retval The clock source can be one of the following values:
  2509. * @arg RCC_LPTIM1CLKSOURCE_D2PCLK1: APB1 Clock selected as LPTIM1 clock
  2510. * @arg RCC_LPTIM1CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM1 clock
  2511. * @arg RCC_LPTIM1CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM1 clock
  2512. * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock
  2513. * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI Clock selected as LPTIM1 clock
  2514. * @arg RCC_LPTIM1CLKSOURCE_CLKP: CLKP selected as LPTIM1 clock
  2515. */
  2516. #if defined(RCC_D2CCIP2R_LPTIM1SEL)
  2517. #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_LPTIM1SEL)))
  2518. #else
  2519. #define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_LPTIM1SEL)))
  2520. #endif /* RCC_D2CCIP2R_LPTIM1SEL */
  2521. /** @brief macro to configure the LPTIM2 clock source.
  2522. *
  2523. * @param __LPTIM2CLKSource__ specifies the LPTIM2 clock source.
  2524. * This parameter can be one of the following values:
  2525. * @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock
  2526. * @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock
  2527. * @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock
  2528. * @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock
  2529. * @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock
  2530. * @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock
  2531. */
  2532. #if defined(RCC_D3CCIPR_LPTIM2SEL)
  2533. #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2CLKSource__) \
  2534. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2CLKSource__))
  2535. #else
  2536. #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2CLKSource__) \
  2537. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2CLKSource__))
  2538. #endif /* RCC_D3CCIPR_LPTIM2SEL */
  2539. /** @brief macro to get the LPTIM2 clock source.
  2540. * @retval The clock source can be one of the following values:
  2541. * @arg RCC_LPTIM2CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM2 clock
  2542. * @arg RCC_LPTIM2CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM2 clock
  2543. * @arg RCC_LPTIM2CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM2 clock
  2544. * @arg RCC_LPTIM2CLKSOURCE_LSE: LSE selected as LPTIM2 clock
  2545. * @arg RCC_LPTIM2CLKSOURCE_LSI: LSI Clock selected as LPTIM2 clock
  2546. * @arg RCC_LPTIM2CLKSOURCE_CLKP: CLKP selected as LPTIM2 clock
  2547. */
  2548. #if defined(RCC_D3CCIPR_LPTIM2SEL)
  2549. #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM2SEL)))
  2550. #else
  2551. #define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM2SEL)))
  2552. #endif /* RCC_D3CCIPR_LPTIM2SEL */
  2553. /** @brief macro to configure the LPTIM3/4/5 clock source.
  2554. *
  2555. * @param __LPTIM345CLKSource__ specifies the LPTIM3/4/5 clock source.
  2556. * @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock
  2557. * @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock
  2558. * @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock
  2559. * @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock
  2560. * @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock
  2561. * @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock
  2562. */
  2563. #if defined(RCC_D3CCIPR_LPTIM345SEL)
  2564. #define __HAL_RCC_LPTIM345_CONFIG(__LPTIM345CLKSource__) \
  2565. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL, (uint32_t)(__LPTIM345CLKSource__))
  2566. #else
  2567. #define __HAL_RCC_LPTIM345_CONFIG(__LPTIM345CLKSource__) \
  2568. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM3SEL, (uint32_t)(__LPTIM345CLKSource__))
  2569. #endif /* RCC_D3CCIPR_LPTIM345SEL */
  2570. /** @brief macro to get the LPTIM3/4/5 clock source.
  2571. * @retval The clock source can be one of the following values:
  2572. * @arg RCC_LPTIM345CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3/4/5 clock
  2573. * @arg RCC_LPTIM345CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3/4/5 clock
  2574. * @arg RCC_LPTIM345CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3/4/5 clock
  2575. * @arg RCC_LPTIM345CLKSOURCE_LSE: LSE selected as LPTIM3/4/5 clock
  2576. * @arg RCC_LPTIM345CLKSOURCE_LSI: LSI Clock selected as LPTIM3/4/5 clock
  2577. * @arg RCC_LPTIM345CLKSOURCE_CLKP: CLKP selected as LPTIM3/4/5 clock
  2578. */
  2579. #if defined(RCC_D3CCIPR_LPTIM345SEL)
  2580. #define __HAL_RCC_GET_LPTIM345_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_LPTIM345SEL)))
  2581. #else
  2582. #define __HAL_RCC_GET_LPTIM345_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_LPTIM3SEL)))
  2583. #endif /* RCC_D3CCIPR_LPTIM345SEL */
  2584. /** @brief macro to configure the LPTIM3 clock source.
  2585. *
  2586. * @param __LPTIM3CLKSource__ specifies the LPTIM3 clock source.
  2587. * @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock
  2588. * @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock
  2589. * @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock
  2590. * @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock
  2591. * @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock
  2592. * @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock
  2593. */
  2594. #define __HAL_RCC_LPTIM3_CONFIG __HAL_RCC_LPTIM345_CONFIG
  2595. /** @brief macro to get the LPTIM3 clock source.
  2596. * @retval The clock source can be one of the following values:
  2597. * @arg RCC_LPTIM3CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM3 clock
  2598. * @arg RCC_LPTIM3CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM3 clock
  2599. * @arg RCC_LPTIM3CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM3 clock
  2600. * @arg RCC_LPTIM3CLKSOURCE_LSE: LSE selected as LPTIM3 clock
  2601. * @arg RCC_LPTIM3CLKSOURCE_LSI: LSI Clock selected as LPTIM3 clock
  2602. * @arg RCC_LPTIM3CLKSOURCE_CLKP: CLKP selected as LPTIM3 clock
  2603. */
  2604. #define __HAL_RCC_GET_LPTIM3_SOURCE __HAL_RCC_GET_LPTIM345_SOURCE
  2605. #if defined(LPTIM4)
  2606. /** @brief macro to configure the LPTIM4 clock source.
  2607. *
  2608. * @param __LPTIM4CLKSource__ specifies the LPTIM4 clock source.
  2609. * @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock
  2610. * @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock
  2611. * @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock
  2612. * @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock
  2613. * @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock
  2614. * @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock
  2615. */
  2616. #define __HAL_RCC_LPTIM4_CONFIG __HAL_RCC_LPTIM345_CONFIG
  2617. /** @brief macro to get the LPTIM4 clock source.
  2618. * @retval The clock source can be one of the following values:
  2619. * @arg RCC_LPTIM4CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM4 clock
  2620. * @arg RCC_LPTIM4CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM4 clock
  2621. * @arg RCC_LPTIM4CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM4 clock
  2622. * @arg RCC_LPTIM4CLKSOURCE_LSE: LSE selected as LPTIM4 clock
  2623. * @arg RCC_LPTIM4CLKSOURCE_LSI: LSI Clock selected as LPTIM4 clock
  2624. * @arg RCC_LPTIM4CLKSOURCE_CLKP: CLKP selected as LPTIM4 clock
  2625. */
  2626. #define __HAL_RCC_GET_LPTIM4_SOURCE __HAL_RCC_GET_LPTIM345_SOURCE
  2627. #endif /* LPTIM4 */
  2628. #if defined(LPTIM5)
  2629. /** @brief macro to configure the LPTIM5 clock source.
  2630. *
  2631. * @param __LPTIM5CLKSource__ specifies the LPTIM5 clock source.
  2632. * @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock
  2633. * @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock
  2634. * @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock
  2635. * @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock
  2636. * @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock
  2637. * @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock
  2638. */
  2639. #define __HAL_RCC_LPTIM5_CONFIG __HAL_RCC_LPTIM345_CONFIG
  2640. /** @brief macro to get the LPTIM5 clock source.
  2641. * @retval The clock source can be one of the following values:
  2642. * @arg RCC_LPTIM5CLKSOURCE_D3PCLK1: APB4 Clock selected as LPTIM5 clock
  2643. * @arg RCC_LPTIM5CLKSOURCE_PLL2: PLL2_P Clock selected as LPTIM5 clock
  2644. * @arg RCC_LPTIM5CLKSOURCE_PLL3: PLL3_R Clock selected as LPTIM5 clock
  2645. * @arg RCC_LPTIM5CLKSOURCE_LSE: LSE selected as LPTIM5 clock
  2646. * @arg RCC_LPTIM5CLKSOURCE_LSI: LSI Clock selected as LPTIM5 clock
  2647. * @arg RCC_LPTIM5CLKSOURCE_CLKP: CLKP selected as LPTIM5 clock
  2648. */
  2649. #define __HAL_RCC_GET_LPTIM5_SOURCE __HAL_RCC_GET_LPTIM345_SOURCE
  2650. #endif /* LPTIM5 */
  2651. #if defined(QUADSPI)
  2652. /** @brief macro to configure the QSPI clock source.
  2653. *
  2654. * @param __QSPICLKSource__ specifies the QSPI clock source.
  2655. * @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock
  2656. * @arg RCC_RCC_QSPICLKSOURCE_PLL : PLL1_Q Clock selected as QSPI clock
  2657. * @arg RCC_RCC_QSPICLKSOURCE_PLL2 : PLL2_R Clock selected as QSPI clock
  2658. * @arg RCC_RCC_QSPICLKSOURCE_CLKP CLKP selected as QSPI clock
  2659. */
  2660. #define __HAL_RCC_QSPI_CONFIG(__QSPICLKSource__) \
  2661. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL, (uint32_t)(__QSPICLKSource__))
  2662. /** @brief macro to get the QSPI clock source.
  2663. * @retval The clock source can be one of the following values:
  2664. * @arg RCC_RCC_QSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as QSPI clock
  2665. * @arg RCC_RCC_QSPICLKSOURCE_PLL : PLL1_Q Clock selected as QSPI clock
  2666. * @arg RCC_RCC_QSPICLKSOURCE_PLL2 : PLL2_R Clock selected as QSPI clock
  2667. * @arg RCC_RCC_QSPICLKSOURCE_CLKP CLKP selected as QSPI clock
  2668. */
  2669. #define __HAL_RCC_GET_QSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_QSPISEL)))
  2670. #endif /* QUADSPI */
  2671. #if defined(OCTOSPI1) || defined(OCTOSPI2)
  2672. /** @brief macro to configure the OSPI clock source.
  2673. *
  2674. * @param __OSPICLKSource__ specifies the OSPI clock source.
  2675. * @arg RCC_RCC_OSPICLKSOURCE_CDHCLK: Domain1 HCLK Clock selected as OSPI clock
  2676. * @arg RCC_RCC_OSPICLKSOURCE_PLL : PLL1_Q Clock selected as OSPI clock
  2677. * @arg RCC_RCC_OSPICLKSOURCE_PLL2 : PLL2_R Clock selected as OSPI clock
  2678. * @arg RCC_RCC_OSPICLKSOURCE_CLKP CLKP selected as OSPI clock
  2679. */
  2680. #if defined(RCC_CDCCIPR_OCTOSPISEL)
  2681. #define __HAL_RCC_OSPI_CONFIG(__OSPICLKSource__) \
  2682. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL, (uint32_t)(__OSPICLKSource__))
  2683. #else
  2684. #define __HAL_RCC_OSPI_CONFIG(__OSPICLKSource__) \
  2685. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_OCTOSPISEL, (uint32_t)(__OSPICLKSource__))
  2686. #endif /* RCC_CDCCIPR_OCTOSPISEL */
  2687. /** @brief macro to get the OSPI clock source.
  2688. * @retval The clock source can be one of the following values:
  2689. * @arg RCC_RCC_OSPICLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as OSPI clock
  2690. * @arg RCC_RCC_OSPICLKSOURCE_PLL : PLL1_Q Clock selected as OSPI clock
  2691. * @arg RCC_RCC_OSPICLKSOURCE_PLL2 : PLL2_R Clock selected as OSPI clock
  2692. * @arg RCC_RCC_OSPICLKSOURCE_CLKP CLKP selected as OSPI clock
  2693. */
  2694. #if defined(RCC_CDCCIPR_OCTOSPISEL)
  2695. #define __HAL_RCC_GET_OSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_OCTOSPISEL)))
  2696. #else
  2697. #define __HAL_RCC_GET_OSPI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_OCTOSPISEL)))
  2698. #endif /* RCC_CDCCIPR_OCTOSPISEL */
  2699. #endif /* defined(OCTOSPI1) || defined(OCTOSPI2) */
  2700. #if defined(DSI)
  2701. /** @brief macro to configure the DSI clock source.
  2702. *
  2703. * @param __DSICLKSource__ specifies the DSI clock source.
  2704. * @arg RCC_RCC_DSICLKSOURCE_PHY:DSI clock from PHY is selected as DSI byte lane clock
  2705. * @arg RCC_RCC_DSICLKSOURCE_PLL2 : PLL2_Q Clock clock is selected as DSI byte lane clock
  2706. */
  2707. #define __HAL_RCC_DSI_CONFIG(__DSICLKSource__) \
  2708. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL, (uint32_t)(__DSICLKSource__))
  2709. /** @brief macro to get the DSI clock source.
  2710. * @retval The clock source can be one of the following values:
  2711. * @arg RCC_RCC_DSICLKSOURCE_PHY: DSI clock from PHY is selected as DSI byte lane clock
  2712. * @arg RCC_RCC_DSICLKSOURCE_PLL2: PLL2_Q Clock clock is selected as DSI byte lane clock
  2713. */
  2714. #define __HAL_RCC_GET_DSI_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_DSISEL)))
  2715. #endif /*DSI*/
  2716. /** @brief macro to configure the FMC clock source.
  2717. *
  2718. * @param __FMCCLKSource__ specifies the FMC clock source.
  2719. * @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock
  2720. * @arg RCC_RCC_FMCCLKSOURCE_PLL : PLL1_Q Clock selected as FMC clock
  2721. * @arg RCC_RCC_FMCCLKSOURCE_PLL2 : PLL2_R Clock selected as FMC clock
  2722. * @arg RCC_RCC_FMCCLKSOURCE_CLKP CLKP selected as FMC clock
  2723. */
  2724. #if defined(RCC_D1CCIPR_FMCSEL)
  2725. #define __HAL_RCC_FMC_CONFIG(__FMCCLKSource__) \
  2726. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL, (uint32_t)(__FMCCLKSource__))
  2727. #else
  2728. #define __HAL_RCC_FMC_CONFIG(__FMCCLKSource__) \
  2729. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL, (uint32_t)(__FMCCLKSource__))
  2730. #endif /* RCC_D1CCIPR_FMCSEL */
  2731. /** @brief macro to get the FMC clock source.
  2732. * @retval The clock source can be one of the following values:
  2733. * @arg RCC_RCC_FMCCLKSOURCE_D1HCLK: Domain1 HCLK Clock selected as FMC clock
  2734. * @arg RCC_RCC_FMCCLKSOURCE_PLL : PLL1_Q Clock selected as FMC clock
  2735. * @arg RCC_RCC_FMCCLKSOURCE_PLL2 : PLL2_R Clock selected as FMC clock
  2736. * @arg RCC_RCC_FMCCLKSOURCE_CLKP CLKP selected as FMC clock
  2737. */
  2738. #if defined(RCC_D1CCIPR_FMCSEL)
  2739. #define __HAL_RCC_GET_FMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_FMCSEL)))
  2740. #else
  2741. #define __HAL_RCC_GET_FMC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_FMCSEL)))
  2742. #endif /* RCC_D1CCIPR_FMCSEL */
  2743. /** @brief Macro to configure the USB clock (USBCLK).
  2744. * @param __USBCLKSource__ specifies the USB clock source.
  2745. * This parameter can be one of the following values:
  2746. * @arg RCC_USBCLKSOURCE_PLL: PLL1Q selected as USB clock
  2747. * @arg RCC_USBCLKSOURCE_PLL3: PLL3Q Clock selected as USB clock
  2748. * @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock
  2749. */
  2750. #if defined(RCC_D2CCIP2R_USBSEL)
  2751. #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \
  2752. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL, (uint32_t)(__USBCLKSource__))
  2753. #else
  2754. #define __HAL_RCC_USB_CONFIG(__USBCLKSource__) \
  2755. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL, (uint32_t)(__USBCLKSource__))
  2756. #endif /* RCC_D2CCIP2R_USBSEL */
  2757. /** @brief Macro to get the USB clock source.
  2758. * @retval The clock source can be one of the following values:
  2759. * @arg RCC_USBCLKSOURCE_PLL: PLL1Q selected as USB clock
  2760. * @arg RCC_USBCLKSOURCE_PLL3: PLL3Q Clock selected as USB clock
  2761. * @arg RCC_USBCLKSOURCE_HSI48: RC48 MHZ Clock selected as USB clock
  2762. */
  2763. #if defined(RCC_D2CCIP2R_USBSEL)
  2764. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_USBSEL)))
  2765. #else
  2766. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_USBSEL)))
  2767. #endif /* RCC_D2CCIP2R_USBSEL */
  2768. /** @brief Macro to configure the ADC clock
  2769. * @param __ADCCLKSource__ specifies the ADC digital interface clock source.
  2770. * This parameter can be one of the following values:
  2771. * @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock
  2772. * @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock
  2773. * @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock
  2774. */
  2775. #if defined(RCC_D3CCIPR_ADCSEL)
  2776. #define __HAL_RCC_ADC_CONFIG(__ADCCLKSource__) \
  2777. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL, (uint32_t)(__ADCCLKSource__))
  2778. #else
  2779. #define __HAL_RCC_ADC_CONFIG(__ADCCLKSource__) \
  2780. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL, (uint32_t)(__ADCCLKSource__))
  2781. #endif /* RCC_D3CCIPR_ADCSEL */
  2782. /** @brief Macro to get the ADC clock source.
  2783. * @retval The clock source can be one of the following values:
  2784. * @arg RCC_ADCCLKSOURCE_PLL2: PLL2_P Clock selected as ADC clock
  2785. * @arg RCC_ADCCLKSOURCE_PLL3: PLL3_R Clock selected as ADC clock
  2786. * @arg RCC_ADCCLKSOURCE_CLKP: CLKP Clock selected as ADC clock
  2787. */
  2788. #if defined(RCC_D3CCIPR_ADCSEL)
  2789. #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_ADCSEL)))
  2790. #else
  2791. #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_ADCSEL)))
  2792. #endif /* RCC_D3CCIPR_ADCSEL */
  2793. /** @brief Macro to configure the SWPMI1 clock
  2794. * @param __SWPMI1CLKSource__ specifies the SWPMI1 clock source.
  2795. * This parameter can be one of the following values:
  2796. * @arg RCC_SWPMI1CLKSOURCE_D2PCLK1: D2PCLK1 Clock selected as SWPMI1 clock
  2797. * @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock
  2798. */
  2799. #if defined(RCC_D2CCIP1R_SWPSEL)
  2800. #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1CLKSource__) \
  2801. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL, (uint32_t)(__SWPMI1CLKSource__))
  2802. #else
  2803. #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1CLKSource__) \
  2804. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL, (uint32_t)(__SWPMI1CLKSource__))
  2805. #endif /* RCC_D2CCIP1R_SWPSEL */
  2806. /** @brief Macro to get the SWPMI1 clock source.
  2807. * @retval The clock source can be one of the following values:
  2808. * @arg RCC_SWPMI1CLKSOURCE_D2PCLK1: D2PCLK1 Clock selected as SWPMI1 clock
  2809. * @arg RCC_SWPMI1CLKSOURCE_HSI: HSI Clock selected as SWPMI1 clock
  2810. */
  2811. #if defined(RCC_D2CCIP1R_SWPSEL)
  2812. #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SWPSEL)))
  2813. #else
  2814. #define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SWPSEL)))
  2815. #endif /* RCC_D2CCIP1R_SWPSEL */
  2816. /** @brief Macro to configure the DFSDM1 clock
  2817. * @param __DFSDM1CLKSource__ specifies the DFSDM1 clock source.
  2818. * This parameter can be one of the following values:
  2819. * @arg RCC_DFSDM1CLKSOURCE_D2PCLK: D2PCLK Clock selected as DFSDM1 clock
  2820. * @arg RCC_DFSDM1CLKSOURCE_SYS: System Clock selected as DFSDM1 clock
  2821. */
  2822. #if defined(RCC_D2CCIP1R_DFSDM1SEL)
  2823. #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1CLKSource__) \
  2824. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL, (uint32_t)(__DFSDM1CLKSource__))
  2825. #else
  2826. #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1CLKSource__) \
  2827. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL, (uint32_t)(__DFSDM1CLKSource__))
  2828. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  2829. /** @brief Macro to get the DFSDM1 clock source.
  2830. * @retval The clock source can be one of the following values:
  2831. * @arg RCC_DFSDM1CLKSOURCE_D2PCLK: D2PCLK Clock selected as DFSDM1 clock
  2832. * @arg RCC_DFSDM1CLKSOURCE_SYS: System Clock selected as DFSDM1 clock
  2833. */
  2834. #if defined (RCC_D2CCIP1R_DFSDM1SEL)
  2835. #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_DFSDM1SEL)))
  2836. #else
  2837. #define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_DFSDM1SEL)))
  2838. #endif /* RCC_D2CCIP1R_DFSDM1SEL */
  2839. #if defined(DFSDM2_BASE)
  2840. /** @brief Macro to configure the DFSDM2 clock
  2841. * @param __DFSDM2CLKSource__ specifies the DFSDM2 clock source.
  2842. * This parameter can be one of the following values:
  2843. * @arg RCC_DFSDM2CLKSOURCE_SRDPCLK1: SRDPCLK1 (APB4) selected as DFSDM2 clock
  2844. * @arg RCC_DFSDM2CLKSOURCE_SYS: System Clock selected as DFSDM2 clock
  2845. */
  2846. #define __HAL_RCC_DFSDM2_CONFIG(__DFSDM2CLKSource__) \
  2847. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL, (uint32_t)(__DFSDM2CLKSource__))
  2848. /** @brief Macro to get the DFSDM2 clock source.
  2849. * @retval The clock source can be one of the following values:
  2850. * @arg RCC_DFSDM2CLKSOURCE_SRDPCLK1: SRDPCLK1 (APB4) Clock selected as DFSDM2 clock
  2851. * @arg RCC_DFSDM2CLKSOURCE_SYS: System Clock selected as DFSDM2 clock
  2852. */
  2853. #define __HAL_RCC_GET_DFSDM2_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_DFSDM2SEL)))
  2854. #endif /* DFSDM2 */
  2855. /** @brief macro to configure the CEC clock (CECCLK).
  2856. *
  2857. * @param __CECCLKSource__ specifies the CEC clock source.
  2858. * This parameter can be one of the following values:
  2859. * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock
  2860. * @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock
  2861. * @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock
  2862. */
  2863. #if defined(RCC_D2CCIP2R_CECSEL)
  2864. #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \
  2865. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL, (uint32_t)(__CECCLKSource__))
  2866. #else
  2867. #define __HAL_RCC_CEC_CONFIG(__CECCLKSource__) \
  2868. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL, (uint32_t)(__CECCLKSource__))
  2869. #endif /* RCC_D2CCIP2R_CECSEL */
  2870. /** @brief macro to get the CEC clock source.
  2871. * @retval The clock source can be one of the following values:
  2872. * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock
  2873. * @arg RCC_CECCLKSOURCE_LSI: LSI selected as CEC clock
  2874. * @arg RCC_CECCLKSOURCE_CSI: CSI Clock selected as CEC clock
  2875. */
  2876. #if defined(RCC_D2CCIP2R_CECSEL)
  2877. #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_CECSEL)))
  2878. #else
  2879. #define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_CECSEL)))
  2880. #endif /* RCC_D2CCIP2R_CECSEL */
  2881. /** @brief Macro to configure the CLKP : Oscillator clock for peripheral
  2882. * @param __CLKPSource__ specifies Oscillator clock for peripheral
  2883. * This parameter can be one of the following values:
  2884. * @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral
  2885. * @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral
  2886. * @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral
  2887. */
  2888. #if defined(RCC_D1CCIPR_CKPERSEL)
  2889. #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \
  2890. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL, (uint32_t)(__CLKPSource__))
  2891. #else
  2892. #define __HAL_RCC_CLKP_CONFIG(__CLKPSource__) \
  2893. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL, (uint32_t)(__CLKPSource__))
  2894. #endif /* RCC_D1CCIPR_CKPERSEL */
  2895. /** @brief Macro to get the Oscillator clock for peripheral source.
  2896. * @retval The clock source can be one of the following values:
  2897. * @arg RCC_CLKPSOURCE_HSI: HSI selected Oscillator clock for peripheral
  2898. * @arg RCC_CLKPSOURCE_CSI: CSI selected Oscillator clock for peripheral
  2899. * @arg RCC_CLKPSOURCE_HSE: HSE selected Oscillator clock for peripheral
  2900. */
  2901. #if defined(RCC_D1CCIPR_CKPERSEL)
  2902. #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_CKPERSEL)))
  2903. #else
  2904. #define __HAL_RCC_GET_CLKP_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_CKPERSEL)))
  2905. #endif /* RCC_D1CCIPR_CKPERSEL */
  2906. #if defined(FDCAN1) || defined(FDCAN2)
  2907. /** @brief Macro to configure the FDCAN clock
  2908. * @param __FDCANCLKSource__ specifies clock source for FDCAN
  2909. * This parameter can be one of the following values:
  2910. * @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock
  2911. * @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock
  2912. * @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock
  2913. */
  2914. #if defined(RCC_D2CCIP1R_FDCANSEL)
  2915. #define __HAL_RCC_FDCAN_CONFIG(__FDCANCLKSource__) \
  2916. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL, (uint32_t)(__FDCANCLKSource__))
  2917. #else
  2918. #define __HAL_RCC_FDCAN_CONFIG(__FDCANCLKSource__) \
  2919. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL, (uint32_t)(__FDCANCLKSource__))
  2920. #endif /* RCC_D2CCIP1R_FDCANSEL */
  2921. /** @brief Macro to get the FDCAN clock
  2922. * @retval The clock source can be one of the following values:
  2923. * @arg RCC_FDCANCLKSOURCE_HSE: HSE selected as FDCAN clock
  2924. * @arg RCC_FDCANCLKSOURCE_PLL: PLL selected as FDCAN clock
  2925. * @arg RCC_FDCANCLKSOURCE_PLL2: PLL2 selected as FDCAN clock
  2926. */
  2927. #if defined(RCC_D2CCIP1R_FDCANSEL)
  2928. #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_FDCANSEL)))
  2929. #else
  2930. #define __HAL_RCC_GET_FDCAN_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_FDCANSEL)))
  2931. #endif /* RCC_D2CCIP1R_FDCANSEL */
  2932. #endif /*FDCAN1 || FDCAN2*/
  2933. /**
  2934. * @brief Macro to Configure the SPI1/2/3 clock source.
  2935. * @param __RCC_SPI123CLKSource__ defines the SPI1/2/3 clock source. This clock is derived
  2936. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  2937. * This parameter can be one of the following values:
  2938. * @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL
  2939. * @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2
  2940. * @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3
  2941. * @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock = CLKP
  2942. * @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock
  2943. * @retval None
  2944. */
  2945. #if defined(RCC_D2CCIP1R_SPI123SEL)
  2946. #define __HAL_RCC_SPI123_CONFIG(__RCC_SPI123CLKSource__ )\
  2947. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL, (__RCC_SPI123CLKSource__))
  2948. #else
  2949. #define __HAL_RCC_SPI123_CONFIG(__RCC_SPI123CLKSource__ )\
  2950. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI123SEL, (__RCC_SPI123CLKSource__))
  2951. #endif /* RCC_D2CCIP1R_SPI123SEL */
  2952. /** @brief Macro to get the SPI1/2/3 clock source.
  2953. * @retval The clock source can be one of the following values:
  2954. * @arg RCC_SPI123CLKSOURCE_PLL: SPI1/2/3 clock = PLL
  2955. * @arg RCC_SPI123CLKSOURCE_PLL2: SPI1/2/3 clock = PLL2
  2956. * @arg RCC_SPI123CLKSOURCE_PLL3: SPI1/2/3 clock = PLL3
  2957. * @arg RCC_SPI123CLKSOURCE_CLKP: SPI1/2/3 clock = CLKP
  2958. * @arg RCC_SPI123CLKSOURCE_PIN: SPI1/2/3 clock = External Clock
  2959. */
  2960. #if defined(RCC_D2CCIP1R_SPI123SEL)
  2961. #define __HAL_RCC_GET_SPI123_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI123SEL)))
  2962. #else
  2963. #define __HAL_RCC_GET_SPI123_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI123SEL)))
  2964. #endif /* RCC_D2CCIP1R_SPI123SEL */
  2965. /**
  2966. * @brief Macro to Configure the SPI1 clock source.
  2967. * @param __RCC_SPI1CLKSource__ defines the SPI1 clock source. This clock is derived
  2968. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  2969. * This parameter can be one of the following values:
  2970. * @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL
  2971. * @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2
  2972. * @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3
  2973. * @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock = CLKP
  2974. * @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock
  2975. * @retval None
  2976. */
  2977. #define __HAL_RCC_SPI1_CONFIG __HAL_RCC_SPI123_CONFIG
  2978. /** @brief Macro to get the SPI1 clock source.
  2979. * @retval The clock source can be one of the following values:
  2980. * @arg RCC_SPI1CLKSOURCE_PLL: SPI1 clock = PLL
  2981. * @arg RCC_SPI1CLKSOURCE_PLL2: SPI1 clock = PLL2
  2982. * @arg RCC_SPI1CLKSOURCE_PLL3: SPI1 clock = PLL3
  2983. * @arg RCC_SPI1CLKSOURCE_CLKP: SPI1 clock = CLKP
  2984. * @arg RCC_SPI1CLKSOURCE_PIN: SPI1 clock = External Clock
  2985. */
  2986. #define __HAL_RCC_GET_SPI1_SOURCE __HAL_RCC_GET_SPI123_SOURCE
  2987. /**
  2988. * @brief Macro to Configure the SPI2 clock source.
  2989. * @param __RCC_SPI2CLKSource__ defines the SPI2 clock source. This clock is derived
  2990. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  2991. * This parameter can be one of the following values:
  2992. * @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL
  2993. * @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2
  2994. * @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3
  2995. * @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock = CLKP
  2996. * @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock
  2997. * @retval None
  2998. */
  2999. #define __HAL_RCC_SPI2_CONFIG __HAL_RCC_SPI123_CONFIG
  3000. /** @brief Macro to get the SPI2 clock source.
  3001. * @retval The clock source can be one of the following values:
  3002. * @arg RCC_SPI2CLKSOURCE_PLL: SPI2 clock = PLL
  3003. * @arg RCC_SPI2CLKSOURCE_PLL2: SPI2 clock = PLL2
  3004. * @arg RCC_SPI2CLKSOURCE_PLL3: SPI2 clock = PLL3
  3005. * @arg RCC_SPI2CLKSOURCE_CLKP: SPI2 clock = CLKP
  3006. * @arg RCC_SPI2CLKSOURCE_PIN: SPI2 clock = External Clock
  3007. */
  3008. #define __HAL_RCC_GET_SPI2_SOURCE __HAL_RCC_GET_SPI123_SOURCE
  3009. /**
  3010. * @brief Macro to Configure the SPI3 clock source.
  3011. * @param __RCC_SPI3CLKSource__ defines the SPI3 clock source. This clock is derived
  3012. * from system PLL, PLL2, PLL3, OSC or external clock (through a dedicated PIN)
  3013. * This parameter can be one of the following values:
  3014. * @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL
  3015. * @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2
  3016. * @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3
  3017. * @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock = CLKP
  3018. * @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock
  3019. * @retval None
  3020. */
  3021. #define __HAL_RCC_SPI3_CONFIG __HAL_RCC_SPI123_CONFIG
  3022. /** @brief Macro to get the SPI3 clock source.
  3023. * @retval The clock source can be one of the following values:
  3024. * @arg RCC_SPI3CLKSOURCE_PLL: SPI3 clock = PLL
  3025. * @arg RCC_SPI3CLKSOURCE_PLL2: SPI3 clock = PLL2
  3026. * @arg RCC_SPI3CLKSOURCE_PLL3: SPI3 clock = PLL3
  3027. * @arg RCC_SPI3CLKSOURCE_CLKP: SPI3 clock = CLKP
  3028. * @arg RCC_SPI3CLKSOURCE_PIN: SPI3 clock = External Clock
  3029. */
  3030. #define __HAL_RCC_GET_SPI3_SOURCE __HAL_RCC_GET_SPI123_SOURCE
  3031. /**
  3032. * @brief Macro to Configure the SPI4/5 clock source.
  3033. * @param __RCC_SPI45CLKSource__ defines the SPI4/5 clock source. This clock is derived
  3034. * from system PCLK, PLL2, PLL3, OSC
  3035. * This parameter can be one of the following values:
  3036. * @arg RCC_SPI45CLKSOURCE_D2PCLK1:SPI4/5 clock = D2PCLK1
  3037. * @arg RCC_SPI45CLKSOURCE_PLL2: SPI4/5 clock = PLL2
  3038. * @arg RCC_SPI45CLKSOURCE_PLL3: SPI4/5 clock = PLL3
  3039. * @arg RCC_SPI45CLKSOURCE_HSI: SPI4/5 clock = HSI
  3040. * @arg RCC_SPI45CLKSOURCE_CSI: SPI4/5 clock = CSI
  3041. * @arg RCC_SPI45CLKSOURCE_HSE: SPI4/5 clock = HSE
  3042. * @retval None
  3043. */
  3044. #if defined(RCC_D2CCIP1R_SPI45SEL)
  3045. #define __HAL_RCC_SPI45_CONFIG(__RCC_SPI45CLKSource__ )\
  3046. MODIFY_REG(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL, (__RCC_SPI45CLKSource__))
  3047. #else
  3048. #define __HAL_RCC_SPI45_CONFIG(__RCC_SPI45CLKSource__ )\
  3049. MODIFY_REG(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI45SEL, (__RCC_SPI45CLKSource__))
  3050. #endif /* RCC_D2CCIP1R_SPI45SEL */
  3051. /** @brief Macro to get the SPI4/5 clock source.
  3052. * @retval The clock source can be one of the following values:
  3053. * @arg RCC_SPI45CLKSOURCE_D2PCLK1:SPI4/5 clock = D2PCLK1
  3054. * @arg RCC_SPI45CLKSOURCE_PLL2: SPI4/5 clock = PLL2
  3055. * @arg RCC_SPI45CLKSOURCE_PLL3: SPI4/5 clock = PLL3
  3056. * @arg RCC_SPI45CLKSOURCE_HSI: SPI4/5 clock = HSI
  3057. * @arg RCC_SPI45CLKSOURCE_CSI: SPI4/5 clock = CSI
  3058. * @arg RCC_SPI45CLKSOURCE_HSE: SPI4/5 clock = HSE
  3059. */
  3060. #if defined(RCC_D2CCIP1R_SPI45SEL)
  3061. #define __HAL_RCC_GET_SPI45_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP1R, RCC_D2CCIP1R_SPI45SEL)))
  3062. #else
  3063. #define __HAL_RCC_GET_SPI45_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP1R, RCC_CDCCIP1R_SPI45SEL)))
  3064. #endif /* RCC_D2CCIP1R_SPI45SEL */
  3065. /**
  3066. * @brief Macro to Configure the SPI4 clock source.
  3067. * @param __RCC_SPI4CLKSource__ defines the SPI4 clock source. This clock is derived
  3068. * from system PCLK, PLL2, PLL3, OSC
  3069. * This parameter can be one of the following values:
  3070. * @arg RCC_SPI4CLKSOURCE_D2PCLK1:SPI4 clock = D2PCLK1
  3071. * @arg RCC_SPI4CLKSOURCE_PLL2: SPI4 clock = PLL2
  3072. * @arg RCC_SPI4CLKSOURCE_PLL3: SPI4 clock = PLL3
  3073. * @arg RCC_SPI4CLKSOURCE_HSI: SPI4 clock = HSI
  3074. * @arg RCC_SPI4CLKSOURCE_CSI: SPI4 clock = CSI
  3075. * @arg RCC_SPI4CLKSOURCE_HSE: SPI4 clock = HSE
  3076. * @retval None
  3077. */
  3078. #define __HAL_RCC_SPI4_CONFIG __HAL_RCC_SPI45_CONFIG
  3079. /** @brief Macro to get the SPI4 clock source.
  3080. * @retval The clock source can be one of the following values:
  3081. * @arg RCC_SPI4CLKSOURCE_D2PCLK1:SPI4 clock = D2PCLK1
  3082. * @arg RCC_SPI4CLKSOURCE_PLL2: SPI4 clock = PLL2
  3083. * @arg RCC_SPI4CLKSOURCE_PLL3: SPI4 clock = PLL3
  3084. * @arg RCC_SPI4CLKSOURCE_HSI: SPI4 clock = HSI
  3085. * @arg RCC_SPI4CLKSOURCE_CSI: SPI4 clock = CSI
  3086. * @arg RCC_SPI4CLKSOURCE_HSE: SPI4 clock = HSE
  3087. */
  3088. #define __HAL_RCC_GET_SPI4_SOURCE __HAL_RCC_GET_SPI45_SOURCE
  3089. /**
  3090. * @brief Macro to Configure the SPI5 clock source.
  3091. * @param __RCC_SPI5CLKSource__ defines the SPI5 clock source. This clock is derived
  3092. * from system PCLK, PLL2, PLL3, OSC
  3093. * This parameter can be one of the following values:
  3094. * @arg RCC_SPI5CLKSOURCE_D2PCLK1:SPI5 clock = D2PCLK1
  3095. * @arg RCC_SPI5CLKSOURCE_PLL2: SPI5 clock = PLL2
  3096. * @arg RCC_SPI5CLKSOURCE_PLL3: SPI5 clock = PLL3
  3097. * @arg RCC_SPI5CLKSOURCE_HSI: SPI5 clock = HSI
  3098. * @arg RCC_SPI5CLKSOURCE_CSI: SPI5 clock = CSI
  3099. * @arg RCC_SPI5CLKSOURCE_HSE: SPI5 clock = HSE
  3100. * @retval None
  3101. */
  3102. #define __HAL_RCC_SPI5_CONFIG __HAL_RCC_SPI45_CONFIG
  3103. /** @brief Macro to get the SPI5 clock source.
  3104. * @retval The clock source can be one of the following values:
  3105. * @arg RCC_SPI5CLKSOURCE_D2PCLK1:SPI5 clock = D2PCLK1
  3106. * @arg RCC_SPI5CLKSOURCE_PLL2: SPI5 clock = PLL2
  3107. * @arg RCC_SPI5CLKSOURCE_PLL3: SPI5 clock = PLL3
  3108. * @arg RCC_SPI5CLKSOURCE_HSI: SPI5 clock = HSI
  3109. * @arg RCC_SPI5CLKSOURCE_CSI: SPI5 clock = CSI
  3110. * @arg RCC_SPI5CLKSOURCE_HSE: SPI5 clock = HSE
  3111. */
  3112. #define __HAL_RCC_GET_SPI5_SOURCE __HAL_RCC_GET_SPI45_SOURCE
  3113. /**
  3114. * @brief Macro to Configure the SPI6 clock source.
  3115. * @param __RCC_SPI6CLKSource__ defines the SPI6 clock source. This clock is derived
  3116. * from system PCLK, PLL2, PLL3, OSC
  3117. * This parameter can be one of the following values:
  3118. * @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1
  3119. * @arg RCC_SPI6CLKSOURCE_PLL2: SPI6 clock = PLL2
  3120. * @arg RCC_SPI6CLKSOURCE_PLL3: SPI6 clock = PLL3
  3121. * @arg RCC_SPI6CLKSOURCE_HSI: SPI6 clock = HSI
  3122. * @arg RCC_SPI6CLKSOURCE_CSI: SPI6 clock = CSI
  3123. * @arg RCC_SPI6CLKSOURCE_HSE: SPI6 clock = HSE
  3124. * @arg RCC_SPI6CLKSOURCE_PIN: SPI6 clock = I2S_CKIN (*)
  3125. *
  3126. * @retval None
  3127. *
  3128. * (*) : Available on stm32h7a3xx and stm32h7b3xx family lines.
  3129. *
  3130. */
  3131. #if defined(RCC_D3CCIPR_SPI6SEL)
  3132. #define __HAL_RCC_SPI6_CONFIG(__RCC_SPI6CLKSource__ )\
  3133. MODIFY_REG(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL, (__RCC_SPI6CLKSource__))
  3134. #else
  3135. #define __HAL_RCC_SPI6_CONFIG(__RCC_SPI6CLKSource__ )\
  3136. MODIFY_REG(RCC->SRDCCIPR, RCC_SRDCCIPR_SPI6SEL, (__RCC_SPI6CLKSource__))
  3137. #endif /* RCC_D3CCIPR_SPI6SEL */
  3138. /** @brief Macro to get the SPI6 clock source.
  3139. * @retval The clock source can be one of the following values:
  3140. * @arg RCC_SPI6CLKSOURCE_D3PCLK1:SPI6 clock = D2PCLK1
  3141. * @arg RCC_SPI6CLKSOURCE_PLL2: SPI6 clock = PLL2
  3142. * @arg RCC_SPI6CLKSOURCE_PLL3: SPI6 clock = PLL3
  3143. * @arg RCC_SPI6CLKSOURCE_HSI: SPI6 clock = HSI
  3144. * @arg RCC_SPI6CLKSOURCE_CSI: SPI6 clock = CSI
  3145. * @arg RCC_SPI6CLKSOURCE_HSE: SPI6 clock = HSE
  3146. * @arg RCC_SPI6CLKSOURCE_PIN: SPI6 clock = I2S_CKIN
  3147. */
  3148. #if defined(RCC_D3CCIPR_SPI6SEL)
  3149. #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->D3CCIPR, RCC_D3CCIPR_SPI6SEL)))
  3150. #else
  3151. #define __HAL_RCC_GET_SPI6_SOURCE() ((uint32_t)(READ_BIT(RCC->SRDCCIPR, RCC_SRDCCIPR_SPI6SEL)))
  3152. #endif /* RCC_D3CCIPR_SPI6SEL */
  3153. /** @brief Macro to configure the SDMMC clock
  3154. * @param __SDMMCCLKSource__ specifies clock source for SDMMC
  3155. * This parameter can be one of the following values:
  3156. * @arg RCC_SDMMCCLKSOURCE_PLL: PLLQ selected as SDMMC clock
  3157. * @arg RCC_SDMMCCLKSOURCE_PLL2: PLL2R selected as SDMMC clock
  3158. */
  3159. #if defined(RCC_D1CCIPR_SDMMCSEL)
  3160. #define __HAL_RCC_SDMMC_CONFIG(__SDMMCCLKSource__) \
  3161. MODIFY_REG(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL, (uint32_t)(__SDMMCCLKSource__))
  3162. #else
  3163. #define __HAL_RCC_SDMMC_CONFIG(__SDMMCCLKSource__) \
  3164. MODIFY_REG(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL, (uint32_t)(__SDMMCCLKSource__))
  3165. #endif /* RCC_D1CCIPR_SDMMCSEL */
  3166. /** @brief Macro to get the SDMMC clock
  3167. */
  3168. #if defined(RCC_D1CCIPR_SDMMCSEL)
  3169. #define __HAL_RCC_GET_SDMMC_SOURCE() ((uint32_t)(READ_BIT(RCC->D1CCIPR, RCC_D1CCIPR_SDMMCSEL)))
  3170. #else
  3171. #define __HAL_RCC_GET_SDMMC_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIPR, RCC_CDCCIPR_SDMMCSEL)))
  3172. #endif /* RCC_D1CCIPR_SDMMCSEL */
  3173. /** @brief macro to configure the RNG clock (RNGCLK).
  3174. *
  3175. * @param __RNGCLKSource__ specifies the RNG clock source.
  3176. * This parameter can be one of the following values:
  3177. * @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock
  3178. * @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock
  3179. * @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock
  3180. * @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock
  3181. */
  3182. #if defined(RCC_D2CCIP2R_RNGSEL)
  3183. #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \
  3184. MODIFY_REG(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL, (uint32_t)(__RNGCLKSource__))
  3185. #else
  3186. #define __HAL_RCC_RNG_CONFIG(__RNGCLKSource__) \
  3187. MODIFY_REG(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL, (uint32_t)(__RNGCLKSource__))
  3188. #endif /* RCC_D2CCIP2R_RNGSEL */
  3189. /** @brief macro to get the RNG clock source.
  3190. * @retval The clock source can be one of the following values:
  3191. * @arg RCC_RNGCLKSOURCE_HSI48: HSI48 selected as RNG clock
  3192. * @arg RCC_RNGCLKSOURCE_PLL: PLL1Q selected as RNG clock
  3193. * @arg RCC_RNGCLKSOURCE_LSE: LSE selected as RNG clock
  3194. * @arg RCC_RNGCLKSOURCE_LSI: LSI selected as RNG clock
  3195. */
  3196. #if defined(RCC_D2CCIP2R_RNGSEL)
  3197. #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->D2CCIP2R, RCC_D2CCIP2R_RNGSEL)))
  3198. #else
  3199. #define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->CDCCIP2R, RCC_CDCCIP2R_RNGSEL)))
  3200. #endif /* RCC_D2CCIP2R_RNGSEL */
  3201. #if defined(HRTIM1)
  3202. /** @brief Macro to configure the HRTIM1 prescaler clock source.
  3203. * @param __HRTIM1CLKSource__ specifies the HRTIM1 prescaler clock source.
  3204. * This parameter can be one of the following values:
  3205. * @arg @ref RCC_HRTIM1CLK_TIMCLK Timers clock selected as HRTIM1 prescaler clock
  3206. * @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock
  3207. */
  3208. #define __HAL_RCC_HRTIM1_CONFIG(__HRTIM1CLKSource__) \
  3209. MODIFY_REG(RCC->CFGR, RCC_CFGR_HRTIMSEL, (uint32_t)(__HRTIM1CLKSource__))
  3210. /** @brief Macro to get the HRTIM1 clock source.
  3211. * @retval The clock source can be one of the following values:
  3212. * @arg @ref RCC_HRTIM1CLK_TIMCLK Timers clock selected as HRTIM1 prescaler clock
  3213. * @arg @ref RCC_HRTIM1CLK_CPUCLK CPU Clock selected as HRTIM1 clock
  3214. */
  3215. #define __HAL_RCC_GET_HRTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HRTIMSEL)))
  3216. #endif /* HRTIM1 */
  3217. /** @brief Macro to configure the Timers clocks prescalers
  3218. * @param __PRESC__ specifies the Timers clocks prescalers selection
  3219. * This parameter can be one of the following values:
  3220. * @arg RCC_TIMPRES_DESACTIVATED: The Timers kernels clocks prescaler is
  3221. * equal to rcc_hclk1 if D2PPREx is corresponding to division by 1 or 2,
  3222. * else it is equal to 2 x Frcc_pclkx_d2 (default after reset)
  3223. * @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is
  3224. * equal to rcc_hclk1 if D2PPREx is corresponding to division by 1, 2 or 4,
  3225. * else it is equal to 4 x Frcc_pclkx_d2
  3226. */
  3227. #define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) do {RCC->CFGR &= ~(RCC_CFGR_TIMPRE);\
  3228. RCC->CFGR |= (__PRESC__); \
  3229. }while(0)
  3230. /**
  3231. * @brief Enable the RCC LSE CSS Extended Interrupt Line.
  3232. * @retval None
  3233. */
  3234. #define __HAL_RCC_LSECSS_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
  3235. /**
  3236. * @brief Disable the RCC LSE CSS Extended Interrupt Line.
  3237. * @retval None
  3238. */
  3239. #define __HAL_RCC_LSECSS_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, RCC_EXTI_LINE_LSECSS)
  3240. /**
  3241. * @brief Enable the RCC LSE CSS Event Line.
  3242. * @retval None.
  3243. */
  3244. #define __HAL_RCC_LSECSS_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
  3245. /**
  3246. * @brief Disable the RCC LSE CSS Event Line.
  3247. * @retval None.
  3248. */
  3249. #define __HAL_RCC_LSECSS_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, RCC_EXTI_LINE_LSECSS)
  3250. #if defined(DUAL_CORE)
  3251. /**
  3252. * @brief Enable the RCC LSE CSS Extended Interrupt Line for CM4.
  3253. * @retval None
  3254. */
  3255. #define __HAL_RCC_C2_LSECSS_EXTI_ENABLE_IT() SET_BIT(EXTI->C2IMR1, RCC_EXTI_LINE_LSECSS)
  3256. /**
  3257. * @brief Disable the RCC LSE CSS Extended Interrupt Line for CM4.
  3258. * @retval None
  3259. */
  3260. #define __HAL_RCC_C2_LSECSS_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->C2IMR1, RCC_EXTI_LINE_LSECSS)
  3261. /**
  3262. * @brief Enable the RCC LSE CSS Event Line for CM4.
  3263. * @retval None.
  3264. */
  3265. #define __HAL_RCC_C2_LSECSS_EXTI_ENABLE_EVENT() SET_BIT(EXTI->C2EMR1, RCC_EXTI_LINE_LSECSS)
  3266. /**
  3267. * @brief Disable the RCC LSE CSS Event Line for CM4.
  3268. * @retval None.
  3269. */
  3270. #define __HAL_RCC_C2_LSECSS_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->C2EMR1, RCC_EXTI_LINE_LSECSS)
  3271. #endif /* DUAL_CORE */
  3272. /**
  3273. * @brief Enable the RCC LSE CSS Extended Interrupt Falling Trigger.
  3274. * @retval None.
  3275. */
  3276. #define __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
  3277. /**
  3278. * @brief Disable the RCC LSE CSS Extended Interrupt Falling Trigger.
  3279. * @retval None.
  3280. */
  3281. #define __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, RCC_EXTI_LINE_LSECSS)
  3282. /**
  3283. * @brief Enable the RCC LSE CSS Extended Interrupt Rising Trigger.
  3284. * @retval None.
  3285. */
  3286. #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
  3287. /**
  3288. * @brief Disable the RCC LSE CSS Extended Interrupt Rising Trigger.
  3289. * @retval None.
  3290. */
  3291. #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, RCC_EXTI_LINE_LSECSS)
  3292. /**
  3293. * @brief Enable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
  3294. * @retval None.
  3295. */
  3296. #define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_FALLING_EDGE() \
  3297. do { \
  3298. __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE(); \
  3299. __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE(); \
  3300. } while(0)
  3301. /**
  3302. * @brief Disable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.
  3303. * @retval None.
  3304. */
  3305. #define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_FALLING_EDGE() \
  3306. do { \
  3307. __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE(); \
  3308. __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE(); \
  3309. } while(0)
  3310. /**
  3311. * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not.
  3312. * @retval EXTI RCC LSE CSS Line Status.
  3313. */
  3314. #define __HAL_RCC_LSECSS_EXTI_GET_FLAG() (READ_BIT(EXTI->PR1, RCC_EXTI_LINE_LSECSS) == RCC_EXTI_LINE_LSECSS)
  3315. /**
  3316. * @brief Clear the RCC LSE CSS EXTI flag.
  3317. * @retval None.
  3318. */
  3319. #define __HAL_RCC_LSECSS_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR1, RCC_EXTI_LINE_LSECSS)
  3320. #if defined(DUAL_CORE)
  3321. /**
  3322. * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not for CM4.
  3323. * @retval EXTI RCC LSE CSS Line Status.
  3324. */
  3325. #define __HAL_RCC_C2_LSECSS_EXTI_GET_FLAG() (READ_BIT(EXTI->C2PR1, RCC_EXTI_LINE_LSECSS) == RCC_EXTI_LINE_LSECSS)
  3326. /**
  3327. * @brief Clear the RCC LSE CSS EXTI flag or not for CM4.
  3328. * @retval None.
  3329. */
  3330. #define __HAL_RCC_C2_LSECSS_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->C2PR1, RCC_EXTI_LINE_LSECSS)
  3331. #endif /* DUAL_CORE */
  3332. /**
  3333. * @brief Generate a Software interrupt on the RCC LSE CSS EXTI line.
  3334. * @retval None.
  3335. */
  3336. #define __HAL_RCC_LSECSS_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, RCC_EXTI_LINE_LSECSS)
  3337. /**
  3338. * @brief Enable the specified CRS interrupts.
  3339. * @param __INTERRUPT__ specifies the CRS interrupt sources to be enabled.
  3340. * This parameter can be any combination of the following values:
  3341. * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
  3342. * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
  3343. * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
  3344. * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
  3345. * @retval None
  3346. */
  3347. #define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__) SET_BIT(CRS->CR, (__INTERRUPT__))
  3348. /**
  3349. * @brief Disable the specified CRS interrupts.
  3350. * @param __INTERRUPT__ specifies the CRS interrupt sources to be disabled.
  3351. * This parameter can be any combination of the following values:
  3352. * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
  3353. * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
  3354. * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
  3355. * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
  3356. * @retval None
  3357. */
  3358. #define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(CRS->CR, (__INTERRUPT__))
  3359. /** @brief Check whether the CRS interrupt has occurred or not.
  3360. * @param __INTERRUPT__ specifies the CRS interrupt source to check.
  3361. * This parameter can be one of the following values:
  3362. * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
  3363. * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
  3364. * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
  3365. * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
  3366. * @retval The new state of __INTERRUPT__ (SET or RESET).
  3367. */
  3368. #define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__) ((READ_BIT(CRS->CR, (__INTERRUPT__)) != 0U) ? SET : RESET)
  3369. /** @brief Clear the CRS interrupt pending bits
  3370. * @param __INTERRUPT__ specifies the interrupt pending bit to clear.
  3371. * This parameter can be any combination of the following values:
  3372. * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt
  3373. * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt
  3374. * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt
  3375. * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt
  3376. * @arg @ref RCC_CRS_IT_TRIMOVF Trimming overflow or underflow interrupt
  3377. * @arg @ref RCC_CRS_IT_SYNCERR SYNC error interrupt
  3378. * @arg @ref RCC_CRS_IT_SYNCMISS SYNC missed interrupt
  3379. */
  3380. /* CRS IT Error Mask */
  3381. #define RCC_CRS_IT_ERROR_MASK ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS))
  3382. #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__) do { \
  3383. if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != 0U) \
  3384. { \
  3385. WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \
  3386. } \
  3387. else \
  3388. { \
  3389. WRITE_REG(CRS->ICR, (__INTERRUPT__)); \
  3390. } \
  3391. } while(0)
  3392. /**
  3393. * @brief Check whether the specified CRS flag is set or not.
  3394. * @param __FLAG__ specifies the flag to check.
  3395. * This parameter can be one of the following values:
  3396. * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK
  3397. * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning
  3398. * @arg @ref RCC_CRS_FLAG_ERR Error
  3399. * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC
  3400. * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow
  3401. * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error
  3402. * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed
  3403. * @retval The new state of _FLAG_ (TRUE or FALSE).
  3404. */
  3405. #define __HAL_RCC_CRS_GET_FLAG(__FLAG__) (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__))
  3406. /**
  3407. * @brief Clear the CRS specified FLAG.
  3408. * @param __FLAG__ specifies the flag to clear.
  3409. * This parameter can be one of the following values:
  3410. * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK
  3411. * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning
  3412. * @arg @ref RCC_CRS_FLAG_ERR Error
  3413. * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC
  3414. * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow
  3415. * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error
  3416. * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed
  3417. * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS and consequently RCC_CRS_FLAG_ERR
  3418. * @retval None
  3419. */
  3420. /* CRS Flag Error Mask */
  3421. #define RCC_CRS_FLAG_ERROR_MASK ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS))
  3422. #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__) do { \
  3423. if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != 0U) \
  3424. { \
  3425. WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \
  3426. } \
  3427. else \
  3428. { \
  3429. WRITE_REG(CRS->ICR, (__FLAG__)); \
  3430. } \
  3431. } while(0)
  3432. /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features
  3433. * @{
  3434. */
  3435. /**
  3436. * @brief Enable the oscillator clock for frequency error counter.
  3437. * @note when the CEN bit is set the CRS_CFGR register becomes write-protected.
  3438. * @retval None
  3439. */
  3440. #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE() SET_BIT(CRS->CR, CRS_CR_CEN)
  3441. /**
  3442. * @brief Disable the oscillator clock for frequency error counter.
  3443. * @retval None
  3444. */
  3445. #define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN)
  3446. /**
  3447. * @brief Enable the automatic hardware adjustment of TRIM bits.
  3448. * @note When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected.
  3449. * @retval None
  3450. */
  3451. #define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE() SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
  3452. /**
  3453. * @brief Enable or disable the automatic hardware adjustment of TRIM bits.
  3454. * @retval None
  3455. */
  3456. #define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN)
  3457. /**
  3458. * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies
  3459. * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency
  3460. * of the synchronization source after pre-scaling. It is then decreased by one in order to
  3461. * reach the expected synchronization on the zero value. The formula is the following:
  3462. * RELOAD = (fTARGET / fSYNC) -1
  3463. * @param __FTARGET__ Target frequency (value in Hz)
  3464. * @param __FSYNC__ Synchronization signal frequency (value in Hz)
  3465. * @retval None
  3466. */
  3467. #define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U)
  3468. /**
  3469. * @}
  3470. */
  3471. /**
  3472. * @}
  3473. */
  3474. /* Exported functions --------------------------------------------------------*/
  3475. /** @addtogroup RCCEx_Exported_Functions
  3476. * @{
  3477. */
  3478. /** @addtogroup RCCEx_Exported_Functions_Group1
  3479. * @{
  3480. */
  3481. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  3482. void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  3483. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);
  3484. uint32_t HAL_RCCEx_GetD1PCLK1Freq(void);
  3485. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void);
  3486. uint32_t HAL_RCCEx_GetD1SysClockFreq(void);
  3487. void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef* PLL1_Clocks);
  3488. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef* PLL2_Clocks);
  3489. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef* PLL3_Clocks);
  3490. /**
  3491. * @}
  3492. */
  3493. /** @addtogroup RCCEx_Exported_Functions_Group2
  3494. * @{
  3495. */
  3496. void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk);
  3497. void HAL_RCCEx_KerWakeUpStopCLKConfig(uint32_t WakeUpClk);
  3498. void HAL_RCCEx_EnableLSECSS(void);
  3499. void HAL_RCCEx_DisableLSECSS(void);
  3500. void HAL_RCCEx_EnableLSECSS_IT(void);
  3501. void HAL_RCCEx_LSECSS_IRQHandler(void);
  3502. void HAL_RCCEx_LSECSS_Callback(void);
  3503. #if defined(DUAL_CORE)
  3504. void HAL_RCCEx_EnableBootCore(uint32_t RCC_BootCx);
  3505. #endif /*DUAL_CORE*/
  3506. #if defined(RCC_GCR_WW1RSC)
  3507. void HAL_RCCEx_WWDGxSysResetConfig(uint32_t RCC_WWDGx);
  3508. #endif /*RCC_GCR_WW1RSC*/
  3509. /**
  3510. * @}
  3511. */
  3512. /** @addtogroup RCCEx_Exported_Functions_Group3
  3513. * @{
  3514. */
  3515. void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit);
  3516. void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void);
  3517. void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo);
  3518. uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout);
  3519. void HAL_RCCEx_CRS_IRQHandler(void);
  3520. void HAL_RCCEx_CRS_SyncOkCallback(void);
  3521. void HAL_RCCEx_CRS_SyncWarnCallback(void);
  3522. void HAL_RCCEx_CRS_ExpectedSyncCallback(void);
  3523. void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error);
  3524. /**
  3525. * @}
  3526. */
  3527. /**
  3528. * @}
  3529. */
  3530. /* Private macros ------------------------------------------------------------*/
  3531. /** @addtogroup RCCEx_Private_Macros RCCEx Private Macros
  3532. * @{
  3533. */
  3534. /** @defgroup RCCEx_IS_RCC_Definitions RCC Private macros to check input parameters
  3535. * @{
  3536. */
  3537. #define IS_RCC_PLL2CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL2_DIVP) || \
  3538. ((VALUE) == RCC_PLL2_DIVQ) || \
  3539. ((VALUE) == RCC_PLL2_DIVR))
  3540. #define IS_RCC_PLL3CLOCKOUT_VALUE(VALUE) (((VALUE) == RCC_PLL3_DIVP) || \
  3541. ((VALUE) == RCC_PLL3_DIVQ) || \
  3542. ((VALUE) == RCC_PLL3_DIVR))
  3543. #if defined(RCC_D2CCIP2R_USART16SEL)
  3544. #define IS_RCC_USART16CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART16CLKSOURCE_D2PCLK2)|| \
  3545. ((SOURCE) == RCC_USART16CLKSOURCE_PLL2) || \
  3546. ((SOURCE) == RCC_USART16CLKSOURCE_PLL3) || \
  3547. ((SOURCE) == RCC_USART16CLKSOURCE_CSI) || \
  3548. ((SOURCE) == RCC_USART16CLKSOURCE_LSE) || \
  3549. ((SOURCE) == RCC_USART16CLKSOURCE_HSI))
  3550. #else
  3551. #define IS_RCC_USART16CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART16CLKSOURCE_D2PCLK2)|| \
  3552. ((SOURCE) == RCC_USART16CLKSOURCE_CDPCLK2)|| \
  3553. ((SOURCE) == RCC_USART16CLKSOURCE_PLL2) || \
  3554. ((SOURCE) == RCC_USART16CLKSOURCE_PLL3) || \
  3555. ((SOURCE) == RCC_USART16CLKSOURCE_CSI) || \
  3556. ((SOURCE) == RCC_USART16CLKSOURCE_LSE) || \
  3557. ((SOURCE) == RCC_USART16CLKSOURCE_HSI))
  3558. /* alias*/
  3559. #define IS_RCC_USART16910CLKSOURCE IS_RCC_USART16CLKSOURCE
  3560. #endif /* RCC_D2CCIP2R_USART16SEL */
  3561. #if defined(RCC_D2CCIP2R_USART28SEL)
  3562. #define IS_RCC_USART234578CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART234578CLKSOURCE_D2PCLK1)|| \
  3563. ((SOURCE) == RCC_USART234578CLKSOURCE_PLL2) || \
  3564. ((SOURCE) == RCC_USART234578CLKSOURCE_PLL3) || \
  3565. ((SOURCE) == RCC_USART234578CLKSOURCE_CSI) || \
  3566. ((SOURCE) == RCC_USART234578CLKSOURCE_LSE) || \
  3567. ((SOURCE) == RCC_USART234578CLKSOURCE_HSI))
  3568. #else
  3569. #define IS_RCC_USART234578CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART234578CLKSOURCE_D2PCLK1)|| \
  3570. ((SOURCE) == RCC_USART234578CLKSOURCE_CDPCLK1)|| \
  3571. ((SOURCE) == RCC_USART234578CLKSOURCE_PLL2) || \
  3572. ((SOURCE) == RCC_USART234578CLKSOURCE_PLL3) || \
  3573. ((SOURCE) == RCC_USART234578CLKSOURCE_CSI) || \
  3574. ((SOURCE) == RCC_USART234578CLKSOURCE_LSE) || \
  3575. ((SOURCE) == RCC_USART234578CLKSOURCE_HSI))
  3576. #endif /* RCC_D2CCIP2R_USART28SEL */
  3577. #define IS_RCC_USART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART1CLKSOURCE_D2PCLK2)|| \
  3578. ((SOURCE) == RCC_USART1CLKSOURCE_PLL2) || \
  3579. ((SOURCE) == RCC_USART1CLKSOURCE_PLL3) || \
  3580. ((SOURCE) == RCC_USART1CLKSOURCE_CSI) || \
  3581. ((SOURCE) == RCC_USART1CLKSOURCE_LSE) || \
  3582. ((SOURCE) == RCC_USART1CLKSOURCE_HSI))
  3583. #define IS_RCC_USART2CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART2CLKSOURCE_D2PCLK1)|| \
  3584. ((SOURCE) == RCC_USART2CLKSOURCE_PLL2) || \
  3585. ((SOURCE) == RCC_USART2CLKSOURCE_PLL3) || \
  3586. ((SOURCE) == RCC_USART2CLKSOURCE_CSI) || \
  3587. ((SOURCE) == RCC_USART2CLKSOURCE_LSE) || \
  3588. ((SOURCE) == RCC_USART2CLKSOURCE_HSI))
  3589. #define IS_RCC_USART3CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART3CLKSOURCE_D2PCLK1)|| \
  3590. ((SOURCE) == RCC_USART3CLKSOURCE_PLL2) || \
  3591. ((SOURCE) == RCC_USART3CLKSOURCE_PLL3) || \
  3592. ((SOURCE) == RCC_USART3CLKSOURCE_CSI) || \
  3593. ((SOURCE) == RCC_USART3CLKSOURCE_LSE) || \
  3594. ((SOURCE) == RCC_USART3CLKSOURCE_HSI))
  3595. #define IS_RCC_UART4CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART4CLKSOURCE_D2PCLK1) || \
  3596. ((SOURCE) == RCC_UART4CLKSOURCE_PLL2) || \
  3597. ((SOURCE) == RCC_UART4CLKSOURCE_PLL3) || \
  3598. ((SOURCE) == RCC_UART4CLKSOURCE_CSI) || \
  3599. ((SOURCE) == RCC_UART4CLKSOURCE_LSE) || \
  3600. ((SOURCE) == RCC_UART4CLKSOURCE_HSI))
  3601. #define IS_RCC_UART5CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART5CLKSOURCE_D2PCLK1) || \
  3602. ((SOURCE) == RCC_UART5CLKSOURCE_PLL2) || \
  3603. ((SOURCE) == RCC_UART5CLKSOURCE_PLL3) || \
  3604. ((SOURCE) == RCC_UART5CLKSOURCE_CSI) || \
  3605. ((SOURCE) == RCC_UART5CLKSOURCE_LSE) || \
  3606. ((SOURCE) == RCC_UART5CLKSOURCE_HSI))
  3607. #define IS_RCC_USART6CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART6CLKSOURCE_D2PCLK2)|| \
  3608. ((SOURCE) == RCC_USART6CLKSOURCE_PLL2) || \
  3609. ((SOURCE) == RCC_USART6CLKSOURCE_PLL3) || \
  3610. ((SOURCE) == RCC_USART6CLKSOURCE_CSI) || \
  3611. ((SOURCE) == RCC_USART6CLKSOURCE_LSE) || \
  3612. ((SOURCE) == RCC_USART6CLKSOURCE_HSI))
  3613. #define IS_RCC_UART7CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART7CLKSOURCE_D2PCLK1) || \
  3614. ((SOURCE) == RCC_UART7CLKSOURCE_PLL2) || \
  3615. ((SOURCE) == RCC_UART7CLKSOURCE_PLL3) || \
  3616. ((SOURCE) == RCC_UART7CLKSOURCE_CSI) || \
  3617. ((SOURCE) == RCC_UART7CLKSOURCE_LSE) || \
  3618. ((SOURCE) == RCC_UART7CLKSOURCE_HSI))
  3619. #define IS_RCC_UART8CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART8CLKSOURCE_D2PCLK1) || \
  3620. ((SOURCE) == RCC_UART8CLKSOURCE_PLL2) || \
  3621. ((SOURCE) == RCC_UART8CLKSOURCE_PLL3) || \
  3622. ((SOURCE) == RCC_UART8CLKSOURCE_CSI) || \
  3623. ((SOURCE) == RCC_UART8CLKSOURCE_LSE) || \
  3624. ((SOURCE) == RCC_UART8CLKSOURCE_HSI))
  3625. #if defined(UART9)
  3626. #define IS_RCC_UART9CLKSOURCE(SOURCE) (((SOURCE) == RCC_UART9CLKSOURCE_D2PCLK2)|| \
  3627. ((SOURCE) == RCC_UART9CLKSOURCE_PLL2) || \
  3628. ((SOURCE) == RCC_UART9CLKSOURCE_PLL3) || \
  3629. ((SOURCE) == RCC_UART9CLKSOURCE_CSI) || \
  3630. ((SOURCE) == RCC_UART9CLKSOURCE_LSE) || \
  3631. ((SOURCE) == RCC_UART9CLKSOURCE_HSI))
  3632. #endif
  3633. #if defined(USART10)
  3634. #define IS_RCC_USART10CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART10CLKSOURCE_D2PCLK2)|| \
  3635. ((SOURCE) == RCC_USART10CLKSOURCE_PLL2) || \
  3636. ((SOURCE) == RCC_USART10CLKSOURCE_PLL3) || \
  3637. ((SOURCE) == RCC_USART10CLKSOURCE_CSI) || \
  3638. ((SOURCE) == RCC_USART10CLKSOURCE_LSE) || \
  3639. ((SOURCE) == RCC_USART10CLKSOURCE_HSI))
  3640. #endif
  3641. #define IS_RCC_LPUART1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPUART1CLKSOURCE_D3PCLK1) || \
  3642. ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL2) || \
  3643. ((SOURCE) == RCC_LPUART1CLKSOURCE_PLL3) || \
  3644. ((SOURCE) == RCC_LPUART1CLKSOURCE_CSI) || \
  3645. ((SOURCE) == RCC_LPUART1CLKSOURCE_LSE) || \
  3646. ((SOURCE) == RCC_LPUART1CLKSOURCE_HSI))
  3647. #if defined(I2C5)
  3648. #define IS_RCC_I2C1235CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C1235CLKSOURCE_PLL3) || \
  3649. ((SOURCE) == RCC_I2C1235CLKSOURCE_HSI) || \
  3650. ((SOURCE) == RCC_I2C1235CLKSOURCE_D2PCLK1) || \
  3651. ((SOURCE) == RCC_I2C1235CLKSOURCE_CSI))
  3652. #define IS_RCC_I2C123CLKSOURCE IS_RCC_I2C1235CLKSOURCE /* For API Backward compatibility */
  3653. #else
  3654. #define IS_RCC_I2C123CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C123CLKSOURCE_PLL3) || \
  3655. ((SOURCE) == RCC_I2C123CLKSOURCE_HSI) || \
  3656. ((SOURCE) == RCC_I2C123CLKSOURCE_D2PCLK1)|| \
  3657. ((SOURCE) == RCC_I2C123CLKSOURCE_CSI))
  3658. #endif /*I2C5*/
  3659. #define IS_RCC_I2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C1CLKSOURCE_PLL3) || \
  3660. ((SOURCE) == RCC_I2C1CLKSOURCE_HSI) || \
  3661. ((SOURCE) == RCC_I2C1CLKSOURCE_D2PCLK1)|| \
  3662. ((SOURCE) == RCC_I2C1CLKSOURCE_CSI))
  3663. #define IS_RCC_I2C2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C2CLKSOURCE_PLL3) || \
  3664. ((SOURCE) == RCC_I2C2CLKSOURCE_HSI) || \
  3665. ((SOURCE) == RCC_I2C2CLKSOURCE_D2PCLK1)|| \
  3666. ((SOURCE) == RCC_I2C2CLKSOURCE_CSI))
  3667. #define IS_RCC_I2C3CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C3CLKSOURCE_PLL3) || \
  3668. ((SOURCE) == RCC_I2C3CLKSOURCE_HSI) || \
  3669. ((SOURCE) == RCC_I2C3CLKSOURCE_D2PCLK1)|| \
  3670. ((SOURCE) == RCC_I2C3CLKSOURCE_CSI))
  3671. #define IS_RCC_I2C4CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C4CLKSOURCE_PLL3) || \
  3672. ((SOURCE) == RCC_I2C4CLKSOURCE_HSI) || \
  3673. ((SOURCE) == RCC_I2C4CLKSOURCE_D3PCLK1)|| \
  3674. ((SOURCE) == RCC_I2C3CLKSOURCE_CSI))
  3675. #if defined(I2C5)
  3676. #define IS_RCC_I2C5CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2C5CLKSOURCE_PLL3) || \
  3677. ((SOURCE) == RCC_I2C5CLKSOURCE_HSI) || \
  3678. ((SOURCE) == RCC_I2C5CLKSOURCE_D2PCLK1)|| \
  3679. ((SOURCE) == RCC_I2C5CLKSOURCE_CSI))
  3680. #endif /*I2C5*/
  3681. #define IS_RCC_RNGCLKSOURCE(SOURCE) (((SOURCE) == RCC_RNGCLKSOURCE_HSI48)|| \
  3682. ((SOURCE) == RCC_RNGCLKSOURCE_PLL) || \
  3683. ((SOURCE) == RCC_RNGCLKSOURCE_LSE) || \
  3684. ((SOURCE) == RCC_RNGCLKSOURCE_LSI))
  3685. #if defined(HRTIM1)
  3686. #define IS_RCC_HRTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_HRTIM1CLK_TIMCLK) || \
  3687. ((SOURCE) == RCC_HRTIM1CLK_CPUCLK))
  3688. #endif
  3689. #define IS_RCC_USBCLKSOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSOURCE_PLL) || \
  3690. ((SOURCE) == RCC_USBCLKSOURCE_PLL3) || \
  3691. ((SOURCE) == RCC_USBCLKSOURCE_HSI48))
  3692. #define IS_RCC_SAI1CLK(__SOURCE__) \
  3693. (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL) || \
  3694. ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL2) || \
  3695. ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL3) || \
  3696. ((__SOURCE__) == RCC_SAI1CLKSOURCE_CLKP) || \
  3697. ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN))
  3698. #if defined(SAI3)
  3699. #define IS_RCC_SAI23CLK(__SOURCE__) \
  3700. (((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL) || \
  3701. ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL2) || \
  3702. ((__SOURCE__) == RCC_SAI23CLKSOURCE_PLL3) || \
  3703. ((__SOURCE__) == RCC_SAI23CLKSOURCE_CLKP) || \
  3704. ((__SOURCE__) == RCC_SAI23CLKSOURCE_PIN))
  3705. #define IS_RCC_SAI2CLK(__SOURCE__) \
  3706. (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL) || \
  3707. ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL2) || \
  3708. ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL3) || \
  3709. ((__SOURCE__) == RCC_SAI2CLKSOURCE_CLKP) || \
  3710. ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN))
  3711. #define IS_RCC_SAI3CLK(__SOURCE__) \
  3712. (((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL) || \
  3713. ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL2) || \
  3714. ((__SOURCE__) == RCC_SAI3CLKSOURCE_PLL3) || \
  3715. ((__SOURCE__) == RCC_SAI3CLKSOURCE_CLKP) || \
  3716. ((__SOURCE__) == RCC_SAI3CLKSOURCE_PIN))
  3717. #endif
  3718. #if defined(RCC_CDCCIP1R_SAI2ASEL)
  3719. #define IS_RCC_SAI2ACLK(__SOURCE__) \
  3720. (((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL) || \
  3721. ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL2) || \
  3722. ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PLL3) || \
  3723. ((__SOURCE__) == RCC_SAI2ACLKSOURCE_CLKP) || \
  3724. ((__SOURCE__) == RCC_SAI2ACLKSOURCE_PIN) || \
  3725. ((__SOURCE__) == RCC_SAI2ACLKSOURCE_SPDIF))
  3726. #endif
  3727. #if defined(RCC_CDCCIP1R_SAI2BSEL)
  3728. #define IS_RCC_SAI2BCLK(__SOURCE__) \
  3729. (((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL) || \
  3730. ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL2) || \
  3731. ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PLL3) || \
  3732. ((__SOURCE__) == RCC_SAI2BCLKSOURCE_CLKP) || \
  3733. ((__SOURCE__) == RCC_SAI2BCLKSOURCE_PIN) || \
  3734. ((__SOURCE__) == RCC_SAI2BCLKSOURCE_SPDIF))
  3735. #endif
  3736. #define IS_RCC_SPI123CLK(__SOURCE__) \
  3737. (((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL) || \
  3738. ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL2) || \
  3739. ((__SOURCE__) == RCC_SPI123CLKSOURCE_PLL3) || \
  3740. ((__SOURCE__) == RCC_SPI123CLKSOURCE_CLKP) || \
  3741. ((__SOURCE__) == RCC_SPI123CLKSOURCE_PIN))
  3742. #define IS_RCC_SPI1CLK(__SOURCE__) \
  3743. (((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL) || \
  3744. ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL2) || \
  3745. ((__SOURCE__) == RCC_SPI1CLKSOURCE_PLL3) || \
  3746. ((__SOURCE__) == RCC_SPI1CLKSOURCE_CLKP) || \
  3747. ((__SOURCE__) == RCC_SPI1CLKSOURCE_PIN))
  3748. #define IS_RCC_SPI2CLK(__SOURCE__) \
  3749. (((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL) || \
  3750. ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL2) || \
  3751. ((__SOURCE__) == RCC_SPI2CLKSOURCE_PLL3) || \
  3752. ((__SOURCE__) == RCC_SPI2CLKSOURCE_CLKP) || \
  3753. ((__SOURCE__) == RCC_SPI2CLKSOURCE_PIN))
  3754. #define IS_RCC_SPI3CLK(__SOURCE__) \
  3755. (((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL) || \
  3756. ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL2) || \
  3757. ((__SOURCE__) == RCC_SPI3CLKSOURCE_PLL3) || \
  3758. ((__SOURCE__) == RCC_SPI3CLKSOURCE_CLKP) || \
  3759. ((__SOURCE__) == RCC_SPI3CLKSOURCE_PIN))
  3760. #define IS_RCC_SPI45CLK(__SOURCE__) \
  3761. (((__SOURCE__) == RCC_SPI45CLKSOURCE_D2PCLK1) || \
  3762. ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL2) || \
  3763. ((__SOURCE__) == RCC_SPI45CLKSOURCE_PLL3) || \
  3764. ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSI) || \
  3765. ((__SOURCE__) == RCC_SPI45CLKSOURCE_CSI) || \
  3766. ((__SOURCE__) == RCC_SPI45CLKSOURCE_HSE))
  3767. #define IS_RCC_SPI4CLK(__SOURCE__) \
  3768. (((__SOURCE__) == RCC_SPI4CLKSOURCE_D2PCLK1) || \
  3769. ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL2) || \
  3770. ((__SOURCE__) == RCC_SPI4CLKSOURCE_PLL3) || \
  3771. ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSI) || \
  3772. ((__SOURCE__) == RCC_SPI4CLKSOURCE_CSI) || \
  3773. ((__SOURCE__) == RCC_SPI4CLKSOURCE_HSE))
  3774. #define IS_RCC_SPI5CLK(__SOURCE__) \
  3775. (((__SOURCE__) == RCC_SPI5CLKSOURCE_D2PCLK1)|| \
  3776. ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL2) || \
  3777. ((__SOURCE__) == RCC_SPI5CLKSOURCE_PLL3) || \
  3778. ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSI) || \
  3779. ((__SOURCE__) == RCC_SPI5CLKSOURCE_CSI) || \
  3780. ((__SOURCE__) == RCC_SPI5CLKSOURCE_HSE))
  3781. #if defined(RCC_D3CCIPR_SPI6SEL)
  3782. #define IS_RCC_SPI6CLK(__SOURCE__) \
  3783. (((__SOURCE__) == RCC_SPI6CLKSOURCE_D3PCLK1) || \
  3784. ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2) || \
  3785. ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3) || \
  3786. ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI) || \
  3787. ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI) || \
  3788. ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE))
  3789. #else
  3790. #define IS_RCC_SPI6CLK(__SOURCE__) \
  3791. (((__SOURCE__) == RCC_SPI6CLKSOURCE_D3PCLK1) || \
  3792. ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL2) || \
  3793. ((__SOURCE__) == RCC_SPI6CLKSOURCE_PLL3) || \
  3794. ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSI) || \
  3795. ((__SOURCE__) == RCC_SPI6CLKSOURCE_CSI) || \
  3796. ((__SOURCE__) == RCC_SPI6CLKSOURCE_HSE) || \
  3797. ((__SOURCE__) == RCC_SPI6CLKSOURCE_PIN))
  3798. #endif /* RCC_D3CCIPR_SPI6SEL */
  3799. #if defined(SAI4)
  3800. #define IS_RCC_SAI4ACLK(__SOURCE__) \
  3801. (((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL) || \
  3802. ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL2) || \
  3803. ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PLL3) || \
  3804. ((__SOURCE__) == RCC_SAI4ACLKSOURCE_CLKP) || \
  3805. ((__SOURCE__) == RCC_SAI4ACLKSOURCE_PIN))
  3806. #define IS_RCC_SAI4BCLK(__SOURCE__) \
  3807. (((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL) || \
  3808. ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL2) || \
  3809. ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PLL3) || \
  3810. ((__SOURCE__) == RCC_SAI4BCLKSOURCE_CLKP) || \
  3811. ((__SOURCE__) == RCC_SAI4BCLKSOURCE_PIN))
  3812. #endif /*SAI4*/
  3813. #define IS_RCC_PLL3M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))
  3814. #define IS_RCC_PLL3N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))
  3815. #define IS_RCC_PLL3P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3816. #define IS_RCC_PLL3Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3817. #define IS_RCC_PLL3R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3818. #define IS_RCC_PLL2M_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 63U))
  3819. #define IS_RCC_PLL2N_VALUE(VALUE) ((4U <= (VALUE)) && ((VALUE) <= 512U))
  3820. #define IS_RCC_PLL2P_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3821. #define IS_RCC_PLL2Q_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3822. #define IS_RCC_PLL2R_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 128U))
  3823. #define IS_RCC_PLL2RGE_VALUE(VALUE) (((VALUE) == RCC_PLL2VCIRANGE_0) || \
  3824. ((VALUE) == RCC_PLL2VCIRANGE_1) || \
  3825. ((VALUE) == RCC_PLL2VCIRANGE_2) || \
  3826. ((VALUE) == RCC_PLL2VCIRANGE_3))
  3827. #define IS_RCC_PLL3RGE_VALUE(VALUE) (((VALUE) == RCC_PLL3VCIRANGE_0) || \
  3828. ((VALUE) == RCC_PLL3VCIRANGE_1) || \
  3829. ((VALUE) == RCC_PLL3VCIRANGE_2) || \
  3830. ((VALUE) == RCC_PLL3VCIRANGE_3))
  3831. #define IS_RCC_PLL2VCO_VALUE(VALUE) (((VALUE) == RCC_PLL2VCOWIDE) || \
  3832. ((VALUE) == RCC_PLL2VCOMEDIUM))
  3833. #define IS_RCC_PLL3VCO_VALUE(VALUE) (((VALUE) == RCC_PLL3VCOWIDE) || \
  3834. ((VALUE) == RCC_PLL3VCOMEDIUM))
  3835. #define IS_RCC_LPTIM1CLK(SOURCE) (((SOURCE) == RCC_LPTIM1CLKSOURCE_D2PCLK1)|| \
  3836. ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL2) || \
  3837. ((SOURCE) == RCC_LPTIM1CLKSOURCE_PLL3) || \
  3838. ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE) || \
  3839. ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI) || \
  3840. ((SOURCE) == RCC_LPTIM1CLKSOURCE_CLKP))
  3841. #define IS_RCC_LPTIM2CLK(SOURCE) (((SOURCE) == RCC_LPTIM2CLKSOURCE_D3PCLK1)|| \
  3842. ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL2) || \
  3843. ((SOURCE) == RCC_LPTIM2CLKSOURCE_PLL3) || \
  3844. ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSE) || \
  3845. ((SOURCE) == RCC_LPTIM2CLKSOURCE_LSI) || \
  3846. ((SOURCE) == RCC_LPTIM2CLKSOURCE_CLKP))
  3847. #define IS_RCC_LPTIM345CLK(SOURCE) (((SOURCE) == RCC_LPTIM345CLKSOURCE_D3PCLK1)|| \
  3848. ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL2) || \
  3849. ((SOURCE) == RCC_LPTIM345CLKSOURCE_PLL3) || \
  3850. ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSE) || \
  3851. ((SOURCE) == RCC_LPTIM345CLKSOURCE_LSI) || \
  3852. ((SOURCE) == RCC_LPTIM345CLKSOURCE_CLKP))
  3853. #define IS_RCC_LPTIM3CLK(SOURCE) (((SOURCE) == RCC_LPTIM3CLKSOURCE_D3PCLK1) || \
  3854. ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL2) || \
  3855. ((SOURCE) == RCC_LPTIM3CLKSOURCE_PLL3) || \
  3856. ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSE) || \
  3857. ((SOURCE) == RCC_LPTIM3CLKSOURCE_LSI) || \
  3858. ((SOURCE) == RCC_LPTIM3CLKSOURCE_CLKP))
  3859. #if defined(LPTIM4)
  3860. #define IS_RCC_LPTIM4CLK(SOURCE) (((SOURCE) == RCC_LPTIM4CLKSOURCE_D3PCLK1)|| \
  3861. ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL2) || \
  3862. ((SOURCE) == RCC_LPTIM4CLKSOURCE_PLL3) || \
  3863. ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSE) || \
  3864. ((SOURCE) == RCC_LPTIM4CLKSOURCE_LSI) || \
  3865. ((SOURCE) == RCC_LPTIM4CLKSOURCE_CLKP))
  3866. #endif /* LPTIM4*/
  3867. #if defined(LPTIM5)
  3868. #define IS_RCC_LPTIM5CLK(SOURCE) (((SOURCE) == RCC_LPTIM5CLKSOURCE_D3PCLK1)|| \
  3869. ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL2) || \
  3870. ((SOURCE) == RCC_LPTIM5CLKSOURCE_PLL3) || \
  3871. ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSE) || \
  3872. ((SOURCE) == RCC_LPTIM5CLKSOURCE_LSI) || \
  3873. ((SOURCE) == RCC_LPTIM5CLKSOURCE_CLKP))
  3874. #endif /*LPTIM5*/
  3875. #if defined(QUADSPI)
  3876. #define IS_RCC_QSPICLK(__SOURCE__) \
  3877. (((__SOURCE__) == RCC_QSPICLKSOURCE_D1HCLK) || \
  3878. ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL) || \
  3879. ((__SOURCE__) == RCC_QSPICLKSOURCE_PLL2) || \
  3880. ((__SOURCE__) == RCC_QSPICLKSOURCE_CLKP))
  3881. #endif /*QUADSPI*/
  3882. #if defined(OCTOSPI1) || defined(OCTOSPI1)
  3883. #define IS_RCC_OSPICLK(__SOURCE__) \
  3884. (((__SOURCE__) == RCC_OSPICLKSOURCE_D1HCLK) || \
  3885. ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL) || \
  3886. ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL2) || \
  3887. ((__SOURCE__) == RCC_OSPICLKSOURCE_CLKP))
  3888. #endif /*OCTOSPI1 || OCTOSPI1*/
  3889. #if defined(DSI)
  3890. #define IS_RCC_DSICLK(__SOURCE__) \
  3891. (((__SOURCE__) == RCC_DSICLKSOURCE_PHY) || \
  3892. ((__SOURCE__) == RCC_DSICLKSOURCE_PLL2))
  3893. #endif /*DSI*/
  3894. #define IS_RCC_FMCCLK(__SOURCE__) \
  3895. (((__SOURCE__) == RCC_FMCCLKSOURCE_D1HCLK) || \
  3896. ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL) || \
  3897. ((__SOURCE__) == RCC_FMCCLKSOURCE_PLL2) || \
  3898. ((__SOURCE__) == RCC_FMCCLKSOURCE_CLKP))
  3899. #if defined(FDCAN1) || defined(FDCAN2)
  3900. #define IS_RCC_FDCANCLK(__SOURCE__) \
  3901. (((__SOURCE__) == RCC_FDCANCLKSOURCE_HSE) || \
  3902. ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL) || \
  3903. ((__SOURCE__) == RCC_FDCANCLKSOURCE_PLL2))
  3904. #endif /*FDCAN1 || FDCAN2*/
  3905. #define IS_RCC_SDMMC(__SOURCE__) \
  3906. (((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL) || \
  3907. ((__SOURCE__) == RCC_SDMMCCLKSOURCE_PLL2))
  3908. #define IS_RCC_ADCCLKSOURCE(SOURCE) (((SOURCE) == RCC_ADCCLKSOURCE_PLL2) || \
  3909. ((SOURCE) == RCC_ADCCLKSOURCE_PLL3) || \
  3910. ((SOURCE) == RCC_ADCCLKSOURCE_CLKP))
  3911. #define IS_RCC_SWPMI1CLKSOURCE(SOURCE) (((SOURCE) == RCC_SWPMI1CLKSOURCE_D2PCLK1) || \
  3912. ((SOURCE) == RCC_SWPMI1CLKSOURCE_HSI))
  3913. #define IS_RCC_DFSDM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_DFSDM1CLKSOURCE_D2PCLK1) || \
  3914. ((SOURCE) == RCC_DFSDM1CLKSOURCE_SYS))
  3915. #if defined(DFSDM2_BASE)
  3916. #define IS_RCC_DFSDM2CLKSOURCE(SOURCE) (((SOURCE) == RCC_DFSDM2CLKSOURCE_SRDPCLK1) || \
  3917. ((SOURCE) == RCC_DFSDM2CLKSOURCE_SYS))
  3918. #endif /*DFSDM2*/
  3919. #define IS_RCC_SPDIFRXCLKSOURCE(SOURCE)(((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL) || \
  3920. ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL2) || \
  3921. ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLL3) || \
  3922. ((SOURCE) == RCC_SPDIFRXCLKSOURCE_HSI))
  3923. #define IS_RCC_CECCLKSOURCE(SOURCE) (((SOURCE) == RCC_CECCLKSOURCE_LSE) || \
  3924. ((SOURCE) == RCC_CECCLKSOURCE_LSI) || \
  3925. ((SOURCE) == RCC_CECCLKSOURCE_CSI))
  3926. #define IS_RCC_CLKPSOURCE(SOURCE) (((SOURCE) == RCC_CLKPSOURCE_HSI) || \
  3927. ((SOURCE) == RCC_CLKPSOURCE_CSI) || \
  3928. ((SOURCE) == RCC_CLKPSOURCE_HSE))
  3929. #define IS_RCC_TIMPRES(VALUE) \
  3930. (((VALUE) == RCC_TIMPRES_DESACTIVATED) || \
  3931. ((VALUE) == RCC_TIMPRES_ACTIVATED))
  3932. #if defined(DUAL_CORE)
  3933. #define IS_RCC_BOOT_CORE(CORE) (((CORE) == RCC_BOOT_C1) || \
  3934. ((CORE) == RCC_BOOT_C2))
  3935. #endif /*DUAL_CORE*/
  3936. #if defined(DUAL_CORE)
  3937. #define IS_RCC_SCOPE_WWDG(WWDG) (((WWDG) == RCC_WWDG1) || \
  3938. ((WWDG) == RCC_WWDG2))
  3939. #else
  3940. #define IS_RCC_SCOPE_WWDG(WWDG) ((WWDG) == RCC_WWDG1)
  3941. #endif /*DUAL_CORE*/
  3942. #define IS_RCC_CRS_SYNC_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB2) || \
  3943. ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_LSE) || \
  3944. ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_USB1) || \
  3945. ((__SOURCE__) == RCC_CRS_SYNC_SOURCE_PIN))
  3946. #define IS_RCC_CRS_SYNC_DIV(__DIV__) (((__DIV__) == RCC_CRS_SYNC_DIV1) || ((__DIV__) == RCC_CRS_SYNC_DIV2) || \
  3947. ((__DIV__) == RCC_CRS_SYNC_DIV4) || ((__DIV__) == RCC_CRS_SYNC_DIV8) || \
  3948. ((__DIV__) == RCC_CRS_SYNC_DIV16) || ((__DIV__) == RCC_CRS_SYNC_DIV32) || \
  3949. ((__DIV__) == RCC_CRS_SYNC_DIV64) || ((__DIV__) == RCC_CRS_SYNC_DIV128))
  3950. #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \
  3951. ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING))
  3952. #define IS_RCC_CRS_RELOADVALUE(__VALUE__) (((__VALUE__) <= 0xFFFFU))
  3953. #define IS_RCC_CRS_ERRORLIMIT(__VALUE__) (((__VALUE__) <= 0xFFU))
  3954. #define IS_RCC_CRS_HSI48CALIBRATION(__VALUE__) (((__VALUE__) <= 0x3FU))
  3955. #define IS_RCC_CRS_FREQERRORDIR(__DIR__) (((__DIR__) == RCC_CRS_FREQERRORDIR_UP) || \
  3956. ((__DIR__) == RCC_CRS_FREQERRORDIR_DOWN))
  3957. /**
  3958. * @}
  3959. */
  3960. /**
  3961. * @}
  3962. */
  3963. /**
  3964. * @}
  3965. */
  3966. /**
  3967. * @}
  3968. */
  3969. #ifdef __cplusplus
  3970. }
  3971. #endif
  3972. #endif /* STM32H7xx_HAL_RCC_EX_H */