stm32f1xx_hal_rcc_ex.h 97 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908
  1. /**
  2. ******************************************************************************
  3. * @file stm32f1xx_hal_rcc_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of RCC HAL Extension module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef __STM32F1xx_HAL_RCC_EX_H
  21. #define __STM32F1xx_HAL_RCC_EX_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32f1xx_hal_def.h"
  27. /** @addtogroup STM32F1xx_HAL_Driver
  28. * @{
  29. */
  30. /** @addtogroup RCCEx
  31. * @{
  32. */
  33. /** @addtogroup RCCEx_Private_Constants
  34. * @{
  35. */
  36. #if defined(STM32F105xC) || defined(STM32F107xC)
  37. /* Alias word address of PLLI2SON bit */
  38. #define PLLI2SON_BITNUMBER RCC_CR_PLL3ON_Pos
  39. #define RCC_CR_PLLI2SON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLLI2SON_BITNUMBER * 4U)))
  40. /* Alias word address of PLL2ON bit */
  41. #define PLL2ON_BITNUMBER RCC_CR_PLL2ON_Pos
  42. #define RCC_CR_PLL2ON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLL2ON_BITNUMBER * 4U)))
  43. #define PLLI2S_TIMEOUT_VALUE 100U /* 100 ms */
  44. #define PLL2_TIMEOUT_VALUE 100U /* 100 ms */
  45. #endif /* STM32F105xC || STM32F107xC */
  46. #define CR_REG_INDEX ((uint8_t)1)
  47. /**
  48. * @}
  49. */
  50. /** @addtogroup RCCEx_Private_Macros
  51. * @{
  52. */
  53. #if defined(STM32F105xC) || defined(STM32F107xC)
  54. #define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || \
  55. ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2))
  56. #endif /* STM32F105xC || STM32F107xC */
  57. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  58. || defined(STM32F100xE)
  59. #define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2) || \
  60. ((__DIV__) == RCC_HSE_PREDIV_DIV3) || ((__DIV__) == RCC_HSE_PREDIV_DIV4) || \
  61. ((__DIV__) == RCC_HSE_PREDIV_DIV5) || ((__DIV__) == RCC_HSE_PREDIV_DIV6) || \
  62. ((__DIV__) == RCC_HSE_PREDIV_DIV7) || ((__DIV__) == RCC_HSE_PREDIV_DIV8) || \
  63. ((__DIV__) == RCC_HSE_PREDIV_DIV9) || ((__DIV__) == RCC_HSE_PREDIV_DIV10) || \
  64. ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || \
  65. ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || \
  66. ((__DIV__) == RCC_HSE_PREDIV_DIV15) || ((__DIV__) == RCC_HSE_PREDIV_DIV16))
  67. #else
  68. #define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2))
  69. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  70. #if defined(STM32F105xC) || defined(STM32F107xC)
  71. #define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \
  72. ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \
  73. ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \
  74. ((__MUL__) == RCC_PLL_MUL6_5))
  75. #define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \
  76. || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \
  77. || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) \
  78. || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \
  79. || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))
  80. #else
  81. #define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || \
  82. ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \
  83. ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \
  84. ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \
  85. ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || \
  86. ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) || \
  87. ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || \
  88. ((__MUL__) == RCC_PLL_MUL16))
  89. #define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \
  90. || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \
  91. || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))
  92. #endif /* STM32F105xC || STM32F107xC*/
  93. #define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4) || \
  94. ((__ADCCLK__) == RCC_ADCPCLK2_DIV6) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8))
  95. #if defined(STM32F105xC) || defined(STM32F107xC)
  96. #define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO))
  97. #define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO))
  98. #define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3))
  99. #define IS_RCC_PLLI2S_MUL(__MUL__) (((__MUL__) == RCC_PLLI2S_MUL8) || ((__MUL__) == RCC_PLLI2S_MUL9) || \
  100. ((__MUL__) == RCC_PLLI2S_MUL10) || ((__MUL__) == RCC_PLLI2S_MUL11) || \
  101. ((__MUL__) == RCC_PLLI2S_MUL12) || ((__MUL__) == RCC_PLLI2S_MUL13) || \
  102. ((__MUL__) == RCC_PLLI2S_MUL14) || ((__MUL__) == RCC_PLLI2S_MUL16) || \
  103. ((__MUL__) == RCC_PLLI2S_MUL20))
  104. #define IS_RCC_HSE_PREDIV2(__DIV__) (((__DIV__) == RCC_HSE_PREDIV2_DIV1) || ((__DIV__) == RCC_HSE_PREDIV2_DIV2) || \
  105. ((__DIV__) == RCC_HSE_PREDIV2_DIV3) || ((__DIV__) == RCC_HSE_PREDIV2_DIV4) || \
  106. ((__DIV__) == RCC_HSE_PREDIV2_DIV5) || ((__DIV__) == RCC_HSE_PREDIV2_DIV6) || \
  107. ((__DIV__) == RCC_HSE_PREDIV2_DIV7) || ((__DIV__) == RCC_HSE_PREDIV2_DIV8) || \
  108. ((__DIV__) == RCC_HSE_PREDIV2_DIV9) || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) || \
  109. ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || \
  110. ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14) || \
  111. ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16))
  112. #define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || \
  113. ((__PLL__) == RCC_PLL2_ON))
  114. #define IS_RCC_PLL2_MUL(__MUL__) (((__MUL__) == RCC_PLL2_MUL8) || ((__MUL__) == RCC_PLL2_MUL9) || \
  115. ((__MUL__) == RCC_PLL2_MUL10) || ((__MUL__) == RCC_PLL2_MUL11) || \
  116. ((__MUL__) == RCC_PLL2_MUL12) || ((__MUL__) == RCC_PLL2_MUL13) || \
  117. ((__MUL__) == RCC_PLL2_MUL14) || ((__MUL__) == RCC_PLL2_MUL16) || \
  118. ((__MUL__) == RCC_PLL2_MUL20))
  119. #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
  120. ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
  121. (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
  122. (((__SELECTION__) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) || \
  123. (((__SELECTION__) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || \
  124. (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))
  125. #elif defined(STM32F103xE) || defined(STM32F103xG)
  126. #define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)
  127. #define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)
  128. #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
  129. ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
  130. (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
  131. (((__SELECTION__) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) || \
  132. (((__SELECTION__) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || \
  133. (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))
  134. #elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  135. || defined(STM32F103xB)
  136. #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
  137. ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
  138. (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \
  139. (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))
  140. #else
  141. #define IS_RCC_PERIPHCLOCK(__SELECTION__) \
  142. ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \
  143. (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC))
  144. #endif /* STM32F105xC || STM32F107xC */
  145. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  146. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  147. #define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5))
  148. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  149. /**
  150. * @}
  151. */
  152. /* Exported types ------------------------------------------------------------*/
  153. /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
  154. * @{
  155. */
  156. #if defined(STM32F105xC) || defined(STM32F107xC)
  157. /**
  158. * @brief RCC PLL2 configuration structure definition
  159. */
  160. typedef struct
  161. {
  162. uint32_t PLL2State; /*!< The new state of the PLL2.
  163. This parameter can be a value of @ref RCCEx_PLL2_Config */
  164. uint32_t PLL2MUL; /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock
  165. This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/
  166. #if defined(STM32F105xC) || defined(STM32F107xC)
  167. uint32_t HSEPrediv2Value; /*!< The Prediv2 factor value.
  168. This parameter can be a value of @ref RCCEx_Prediv2_Factor */
  169. #endif /* STM32F105xC || STM32F107xC */
  170. } RCC_PLL2InitTypeDef;
  171. #endif /* STM32F105xC || STM32F107xC */
  172. /**
  173. * @brief RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition
  174. */
  175. typedef struct
  176. {
  177. uint32_t OscillatorType; /*!< The oscillators to be configured.
  178. This parameter can be a value of @ref RCC_Oscillator_Type */
  179. #if defined(STM32F105xC) || defined(STM32F107xC)
  180. uint32_t Prediv1Source; /*!< The Prediv1 source value.
  181. This parameter can be a value of @ref RCCEx_Prediv1_Source */
  182. #endif /* STM32F105xC || STM32F107xC */
  183. uint32_t HSEState; /*!< The new state of the HSE.
  184. This parameter can be a value of @ref RCC_HSE_Config */
  185. uint32_t HSEPredivValue; /*!< The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM)
  186. This parameter can be a value of @ref RCCEx_Prediv1_Factor */
  187. uint32_t LSEState; /*!< The new state of the LSE.
  188. This parameter can be a value of @ref RCC_LSE_Config */
  189. uint32_t HSIState; /*!< The new state of the HSI.
  190. This parameter can be a value of @ref RCC_HSI_Config */
  191. uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).
  192. This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */
  193. uint32_t LSIState; /*!< The new state of the LSI.
  194. This parameter can be a value of @ref RCC_LSI_Config */
  195. RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */
  196. #if defined(STM32F105xC) || defined(STM32F107xC)
  197. RCC_PLL2InitTypeDef PLL2; /*!< PLL2 structure parameters */
  198. #endif /* STM32F105xC || STM32F107xC */
  199. } RCC_OscInitTypeDef;
  200. #if defined(STM32F105xC) || defined(STM32F107xC)
  201. /**
  202. * @brief RCC PLLI2S configuration structure definition
  203. */
  204. typedef struct
  205. {
  206. uint32_t PLLI2SMUL; /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock
  207. This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/
  208. #if defined(STM32F105xC) || defined(STM32F107xC)
  209. uint32_t HSEPrediv2Value; /*!< The Prediv2 factor value.
  210. This parameter can be a value of @ref RCCEx_Prediv2_Factor */
  211. #endif /* STM32F105xC || STM32F107xC */
  212. } RCC_PLLI2SInitTypeDef;
  213. #endif /* STM32F105xC || STM32F107xC */
  214. /**
  215. * @brief RCC extended clocks structure definition
  216. */
  217. typedef struct
  218. {
  219. uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.
  220. This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
  221. uint32_t RTCClockSelection; /*!< specifies the RTC clock source.
  222. This parameter can be a value of @ref RCC_RTC_Clock_Source */
  223. uint32_t AdcClockSelection; /*!< ADC clock source
  224. This parameter can be a value of @ref RCCEx_ADC_Prescaler */
  225. #if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  226. || defined(STM32F107xC)
  227. uint32_t I2s2ClockSelection; /*!< I2S2 clock source
  228. This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */
  229. uint32_t I2s3ClockSelection; /*!< I2S3 clock source
  230. This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */
  231. #if defined(STM32F105xC) || defined(STM32F107xC)
  232. RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters
  233. This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */
  234. #endif /* STM32F105xC || STM32F107xC */
  235. #endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  236. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  237. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  238. || defined(STM32F105xC) || defined(STM32F107xC)
  239. uint32_t UsbClockSelection; /*!< USB clock source
  240. This parameter can be a value of @ref RCCEx_USB_Prescaler */
  241. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  242. } RCC_PeriphCLKInitTypeDef;
  243. /**
  244. * @}
  245. */
  246. /* Exported constants --------------------------------------------------------*/
  247. /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
  248. * @{
  249. */
  250. /** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection
  251. * @{
  252. */
  253. #define RCC_PERIPHCLK_RTC 0x00000001U
  254. #define RCC_PERIPHCLK_ADC 0x00000002U
  255. #if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE)\
  256. || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  257. #define RCC_PERIPHCLK_I2S2 0x00000004U
  258. #define RCC_PERIPHCLK_I2S3 0x00000008U
  259. #endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  260. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  261. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  262. || defined(STM32F105xC) || defined(STM32F107xC)
  263. #define RCC_PERIPHCLK_USB 0x00000010U
  264. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  265. /**
  266. * @}
  267. */
  268. /** @defgroup RCCEx_ADC_Prescaler ADC Prescaler
  269. * @{
  270. */
  271. #define RCC_ADCPCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2
  272. #define RCC_ADCPCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4
  273. #define RCC_ADCPCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6
  274. #define RCC_ADCPCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8
  275. /**
  276. * @}
  277. */
  278. #if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  279. || defined(STM32F107xC)
  280. /** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source
  281. * @{
  282. */
  283. #define RCC_I2S2CLKSOURCE_SYSCLK 0x00000000U
  284. #if defined(STM32F105xC) || defined(STM32F107xC)
  285. #define RCC_I2S2CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S2SRC
  286. #endif /* STM32F105xC || STM32F107xC */
  287. /**
  288. * @}
  289. */
  290. /** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source
  291. * @{
  292. */
  293. #define RCC_I2S3CLKSOURCE_SYSCLK 0x00000000U
  294. #if defined(STM32F105xC) || defined(STM32F107xC)
  295. #define RCC_I2S3CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S3SRC
  296. #endif /* STM32F105xC || STM32F107xC */
  297. /**
  298. * @}
  299. */
  300. #endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  301. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  302. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  303. /** @defgroup RCCEx_USB_Prescaler USB Prescaler
  304. * @{
  305. */
  306. #define RCC_USBCLKSOURCE_PLL RCC_CFGR_USBPRE
  307. #define RCC_USBCLKSOURCE_PLL_DIV1_5 0x00000000U
  308. /**
  309. * @}
  310. */
  311. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  312. #if defined(STM32F105xC) || defined(STM32F107xC)
  313. /** @defgroup RCCEx_USB_Prescaler USB Prescaler
  314. * @{
  315. */
  316. #define RCC_USBCLKSOURCE_PLL_DIV2 RCC_CFGR_OTGFSPRE
  317. #define RCC_USBCLKSOURCE_PLL_DIV3 0x00000000U
  318. /**
  319. * @}
  320. */
  321. /** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor
  322. * @{
  323. */
  324. #define RCC_PLLI2S_MUL8 RCC_CFGR2_PLL3MUL8 /*!< PLLI2S input clock * 8 */
  325. #define RCC_PLLI2S_MUL9 RCC_CFGR2_PLL3MUL9 /*!< PLLI2S input clock * 9 */
  326. #define RCC_PLLI2S_MUL10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */
  327. #define RCC_PLLI2S_MUL11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */
  328. #define RCC_PLLI2S_MUL12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */
  329. #define RCC_PLLI2S_MUL13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */
  330. #define RCC_PLLI2S_MUL14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */
  331. #define RCC_PLLI2S_MUL16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */
  332. #define RCC_PLLI2S_MUL20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */
  333. /**
  334. * @}
  335. */
  336. #endif /* STM32F105xC || STM32F107xC */
  337. #if defined(STM32F105xC) || defined(STM32F107xC)
  338. /** @defgroup RCCEx_Prediv1_Source Prediv1 Source
  339. * @{
  340. */
  341. #define RCC_PREDIV1_SOURCE_HSE RCC_CFGR2_PREDIV1SRC_HSE
  342. #define RCC_PREDIV1_SOURCE_PLL2 RCC_CFGR2_PREDIV1SRC_PLL2
  343. /**
  344. * @}
  345. */
  346. #endif /* STM32F105xC || STM32F107xC */
  347. /** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor
  348. * @{
  349. */
  350. #define RCC_HSE_PREDIV_DIV1 0x00000000U
  351. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  352. || defined(STM32F100xE)
  353. #define RCC_HSE_PREDIV_DIV2 RCC_CFGR2_PREDIV1_DIV2
  354. #define RCC_HSE_PREDIV_DIV3 RCC_CFGR2_PREDIV1_DIV3
  355. #define RCC_HSE_PREDIV_DIV4 RCC_CFGR2_PREDIV1_DIV4
  356. #define RCC_HSE_PREDIV_DIV5 RCC_CFGR2_PREDIV1_DIV5
  357. #define RCC_HSE_PREDIV_DIV6 RCC_CFGR2_PREDIV1_DIV6
  358. #define RCC_HSE_PREDIV_DIV7 RCC_CFGR2_PREDIV1_DIV7
  359. #define RCC_HSE_PREDIV_DIV8 RCC_CFGR2_PREDIV1_DIV8
  360. #define RCC_HSE_PREDIV_DIV9 RCC_CFGR2_PREDIV1_DIV9
  361. #define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV1_DIV10
  362. #define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV1_DIV11
  363. #define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV1_DIV12
  364. #define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV1_DIV13
  365. #define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV1_DIV14
  366. #define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV1_DIV15
  367. #define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV1_DIV16
  368. #else
  369. #define RCC_HSE_PREDIV_DIV2 RCC_CFGR_PLLXTPRE
  370. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  371. /**
  372. * @}
  373. */
  374. #if defined(STM32F105xC) || defined(STM32F107xC)
  375. /** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor
  376. * @{
  377. */
  378. #define RCC_HSE_PREDIV2_DIV1 RCC_CFGR2_PREDIV2_DIV1 /*!< PREDIV2 input clock not divided */
  379. #define RCC_HSE_PREDIV2_DIV2 RCC_CFGR2_PREDIV2_DIV2 /*!< PREDIV2 input clock divided by 2 */
  380. #define RCC_HSE_PREDIV2_DIV3 RCC_CFGR2_PREDIV2_DIV3 /*!< PREDIV2 input clock divided by 3 */
  381. #define RCC_HSE_PREDIV2_DIV4 RCC_CFGR2_PREDIV2_DIV4 /*!< PREDIV2 input clock divided by 4 */
  382. #define RCC_HSE_PREDIV2_DIV5 RCC_CFGR2_PREDIV2_DIV5 /*!< PREDIV2 input clock divided by 5 */
  383. #define RCC_HSE_PREDIV2_DIV6 RCC_CFGR2_PREDIV2_DIV6 /*!< PREDIV2 input clock divided by 6 */
  384. #define RCC_HSE_PREDIV2_DIV7 RCC_CFGR2_PREDIV2_DIV7 /*!< PREDIV2 input clock divided by 7 */
  385. #define RCC_HSE_PREDIV2_DIV8 RCC_CFGR2_PREDIV2_DIV8 /*!< PREDIV2 input clock divided by 8 */
  386. #define RCC_HSE_PREDIV2_DIV9 RCC_CFGR2_PREDIV2_DIV9 /*!< PREDIV2 input clock divided by 9 */
  387. #define RCC_HSE_PREDIV2_DIV10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */
  388. #define RCC_HSE_PREDIV2_DIV11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */
  389. #define RCC_HSE_PREDIV2_DIV12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */
  390. #define RCC_HSE_PREDIV2_DIV13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */
  391. #define RCC_HSE_PREDIV2_DIV14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */
  392. #define RCC_HSE_PREDIV2_DIV15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */
  393. #define RCC_HSE_PREDIV2_DIV16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */
  394. /**
  395. * @}
  396. */
  397. /** @defgroup RCCEx_PLL2_Config PLL Config
  398. * @{
  399. */
  400. #define RCC_PLL2_NONE 0x00000000U
  401. #define RCC_PLL2_OFF 0x00000001U
  402. #define RCC_PLL2_ON 0x00000002U
  403. /**
  404. * @}
  405. */
  406. /** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor
  407. * @{
  408. */
  409. #define RCC_PLL2_MUL8 RCC_CFGR2_PLL2MUL8 /*!< PLL2 input clock * 8 */
  410. #define RCC_PLL2_MUL9 RCC_CFGR2_PLL2MUL9 /*!< PLL2 input clock * 9 */
  411. #define RCC_PLL2_MUL10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */
  412. #define RCC_PLL2_MUL11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */
  413. #define RCC_PLL2_MUL12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */
  414. #define RCC_PLL2_MUL13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */
  415. #define RCC_PLL2_MUL14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */
  416. #define RCC_PLL2_MUL16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */
  417. #define RCC_PLL2_MUL20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */
  418. /**
  419. * @}
  420. */
  421. #endif /* STM32F105xC || STM32F107xC */
  422. /** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor
  423. * @{
  424. */
  425. #if defined(STM32F105xC) || defined(STM32F107xC)
  426. #else
  427. #define RCC_PLL_MUL2 RCC_CFGR_PLLMULL2
  428. #define RCC_PLL_MUL3 RCC_CFGR_PLLMULL3
  429. #endif /* STM32F105xC || STM32F107xC */
  430. #define RCC_PLL_MUL4 RCC_CFGR_PLLMULL4
  431. #define RCC_PLL_MUL5 RCC_CFGR_PLLMULL5
  432. #define RCC_PLL_MUL6 RCC_CFGR_PLLMULL6
  433. #define RCC_PLL_MUL7 RCC_CFGR_PLLMULL7
  434. #define RCC_PLL_MUL8 RCC_CFGR_PLLMULL8
  435. #define RCC_PLL_MUL9 RCC_CFGR_PLLMULL9
  436. #if defined(STM32F105xC) || defined(STM32F107xC)
  437. #define RCC_PLL_MUL6_5 RCC_CFGR_PLLMULL6_5
  438. #else
  439. #define RCC_PLL_MUL10 RCC_CFGR_PLLMULL10
  440. #define RCC_PLL_MUL11 RCC_CFGR_PLLMULL11
  441. #define RCC_PLL_MUL12 RCC_CFGR_PLLMULL12
  442. #define RCC_PLL_MUL13 RCC_CFGR_PLLMULL13
  443. #define RCC_PLL_MUL14 RCC_CFGR_PLLMULL14
  444. #define RCC_PLL_MUL15 RCC_CFGR_PLLMULL15
  445. #define RCC_PLL_MUL16 RCC_CFGR_PLLMULL16
  446. #endif /* STM32F105xC || STM32F107xC */
  447. /**
  448. * @}
  449. */
  450. /** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source
  451. * @{
  452. */
  453. #define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)RCC_CFGR_MCO_NOCLOCK)
  454. #define RCC_MCO1SOURCE_SYSCLK ((uint32_t)RCC_CFGR_MCO_SYSCLK)
  455. #define RCC_MCO1SOURCE_HSI ((uint32_t)RCC_CFGR_MCO_HSI)
  456. #define RCC_MCO1SOURCE_HSE ((uint32_t)RCC_CFGR_MCO_HSE)
  457. #define RCC_MCO1SOURCE_PLLCLK ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2)
  458. #if defined(STM32F105xC) || defined(STM32F107xC)
  459. #define RCC_MCO1SOURCE_PLL2CLK ((uint32_t)RCC_CFGR_MCO_PLL2CLK)
  460. #define RCC_MCO1SOURCE_PLL3CLK_DIV2 ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2)
  461. #define RCC_MCO1SOURCE_EXT_HSE ((uint32_t)RCC_CFGR_MCO_EXT_HSE)
  462. #define RCC_MCO1SOURCE_PLL3CLK ((uint32_t)RCC_CFGR_MCO_PLL3CLK)
  463. #endif /* STM32F105xC || STM32F107xC*/
  464. /**
  465. * @}
  466. */
  467. #if defined(STM32F105xC) || defined(STM32F107xC)
  468. /** @defgroup RCCEx_Interrupt RCCEx Interrupt
  469. * @{
  470. */
  471. #define RCC_IT_PLL2RDY ((uint8_t)RCC_CIR_PLL2RDYF)
  472. #define RCC_IT_PLLI2SRDY ((uint8_t)RCC_CIR_PLL3RDYF)
  473. /**
  474. * @}
  475. */
  476. /** @defgroup RCCEx_Flag RCCEx Flag
  477. * Elements values convention: 0XXYYYYYb
  478. * - YYYYY : Flag position in the register
  479. * - XX : Register index
  480. * - 01: CR register
  481. * @{
  482. */
  483. /* Flags in the CR register */
  484. #define RCC_FLAG_PLL2RDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL2RDY_Pos))
  485. #define RCC_FLAG_PLLI2SRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL3RDY_Pos))
  486. /**
  487. * @}
  488. */
  489. #endif /* STM32F105xC || STM32F107xC*/
  490. /**
  491. * @}
  492. */
  493. /* Exported macro ------------------------------------------------------------*/
  494. /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
  495. * @{
  496. */
  497. /** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable
  498. * @brief Enable or disable the AHB1 peripheral clock.
  499. * @note After reset, the peripheral clock (used for registers read/write access)
  500. * is disabled and the application software has to enable this clock before
  501. * using it.
  502. * @{
  503. */
  504. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  505. || defined(STM32F103xG) || defined(STM32F105xC) || defined (STM32F107xC)\
  506. || defined (STM32F100xE)
  507. #define __HAL_RCC_DMA2_CLK_ENABLE() do { \
  508. __IO uint32_t tmpreg; \
  509. SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\
  510. /* Delay after an RCC peripheral clock enabling */ \
  511. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\
  512. UNUSED(tmpreg); \
  513. } while(0U)
  514. #define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))
  515. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */
  516. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  517. || defined(STM32F103xG) || defined (STM32F100xE)
  518. #define __HAL_RCC_FSMC_CLK_ENABLE() do { \
  519. __IO uint32_t tmpreg; \
  520. SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\
  521. /* Delay after an RCC peripheral clock enabling */ \
  522. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\
  523. UNUSED(tmpreg); \
  524. } while(0U)
  525. #define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))
  526. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */
  527. #if defined(STM32F103xE) || defined(STM32F103xG)
  528. #define __HAL_RCC_SDIO_CLK_ENABLE() do { \
  529. __IO uint32_t tmpreg; \
  530. SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\
  531. /* Delay after an RCC peripheral clock enabling */ \
  532. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\
  533. UNUSED(tmpreg); \
  534. } while(0U)
  535. #define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN))
  536. #endif /* STM32F103xE || STM32F103xG */
  537. #if defined(STM32F105xC) || defined(STM32F107xC)
  538. #define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do { \
  539. __IO uint32_t tmpreg; \
  540. SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\
  541. /* Delay after an RCC peripheral clock enabling */ \
  542. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\
  543. UNUSED(tmpreg); \
  544. } while(0U)
  545. #define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN))
  546. #endif /* STM32F105xC || STM32F107xC*/
  547. #if defined(STM32F107xC)
  548. #define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \
  549. __IO uint32_t tmpreg; \
  550. SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\
  551. /* Delay after an RCC peripheral clock enabling */ \
  552. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\
  553. UNUSED(tmpreg); \
  554. } while(0U)
  555. #define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \
  556. __IO uint32_t tmpreg; \
  557. SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\
  558. /* Delay after an RCC peripheral clock enabling */ \
  559. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\
  560. UNUSED(tmpreg); \
  561. } while(0U)
  562. #define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \
  563. __IO uint32_t tmpreg; \
  564. SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\
  565. /* Delay after an RCC peripheral clock enabling */ \
  566. tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\
  567. UNUSED(tmpreg); \
  568. } while(0U)
  569. #define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN))
  570. #define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN))
  571. #define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN))
  572. /**
  573. * @brief Enable ETHERNET clock.
  574. */
  575. #define __HAL_RCC_ETH_CLK_ENABLE() do { \
  576. __HAL_RCC_ETHMAC_CLK_ENABLE(); \
  577. __HAL_RCC_ETHMACTX_CLK_ENABLE(); \
  578. __HAL_RCC_ETHMACRX_CLK_ENABLE(); \
  579. } while(0U)
  580. /**
  581. * @brief Disable ETHERNET clock.
  582. */
  583. #define __HAL_RCC_ETH_CLK_DISABLE() do { \
  584. __HAL_RCC_ETHMACTX_CLK_DISABLE(); \
  585. __HAL_RCC_ETHMACRX_CLK_DISABLE(); \
  586. __HAL_RCC_ETHMAC_CLK_DISABLE(); \
  587. } while(0U)
  588. #endif /* STM32F107xC*/
  589. /**
  590. * @}
  591. */
  592. /** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status
  593. * @brief Get the enable or disable status of the AHB1 peripheral clock.
  594. * @note After reset, the peripheral clock (used for registers read/write access)
  595. * is disabled and the application software has to enable this clock before
  596. * using it.
  597. * @{
  598. */
  599. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  600. || defined(STM32F103xG) || defined(STM32F105xC) || defined (STM32F107xC)\
  601. || defined (STM32F100xE)
  602. #define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET)
  603. #define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET)
  604. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */
  605. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  606. || defined(STM32F103xG) || defined (STM32F100xE)
  607. #define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET)
  608. #define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET)
  609. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */
  610. #if defined(STM32F103xE) || defined(STM32F103xG)
  611. #define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET)
  612. #define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET)
  613. #endif /* STM32F103xE || STM32F103xG */
  614. #if defined(STM32F105xC) || defined(STM32F107xC)
  615. #define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET)
  616. #define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET)
  617. #endif /* STM32F105xC || STM32F107xC*/
  618. #if defined(STM32F107xC)
  619. #define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET)
  620. #define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET)
  621. #define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET)
  622. #define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET)
  623. #define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET)
  624. #define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET)
  625. #endif /* STM32F107xC*/
  626. /**
  627. * @}
  628. */
  629. /** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable
  630. * @brief Enable or disable the Low Speed APB (APB1) peripheral clock.
  631. * @note After reset, the peripheral clock (used for registers read/write access)
  632. * is disabled and the application software has to enable this clock before
  633. * using it.
  634. * @{
  635. */
  636. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  637. || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  638. #define __HAL_RCC_CAN1_CLK_ENABLE() do { \
  639. __IO uint32_t tmpreg; \
  640. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\
  641. /* Delay after an RCC peripheral clock enabling */ \
  642. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\
  643. UNUSED(tmpreg); \
  644. } while(0U)
  645. #define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN))
  646. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  647. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  648. || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  649. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  650. || defined(STM32F105xC) || defined(STM32F107xC)
  651. #define __HAL_RCC_TIM4_CLK_ENABLE() do { \
  652. __IO uint32_t tmpreg; \
  653. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\
  654. /* Delay after an RCC peripheral clock enabling */ \
  655. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\
  656. UNUSED(tmpreg); \
  657. } while(0U)
  658. #define __HAL_RCC_SPI2_CLK_ENABLE() do { \
  659. __IO uint32_t tmpreg; \
  660. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\
  661. /* Delay after an RCC peripheral clock enabling */ \
  662. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\
  663. UNUSED(tmpreg); \
  664. } while(0U)
  665. #define __HAL_RCC_USART3_CLK_ENABLE() do { \
  666. __IO uint32_t tmpreg; \
  667. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\
  668. /* Delay after an RCC peripheral clock enabling */ \
  669. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\
  670. UNUSED(tmpreg); \
  671. } while(0U)
  672. #define __HAL_RCC_I2C2_CLK_ENABLE() do { \
  673. __IO uint32_t tmpreg; \
  674. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
  675. /* Delay after an RCC peripheral clock enabling */ \
  676. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
  677. UNUSED(tmpreg); \
  678. } while(0U)
  679. #define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))
  680. #define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))
  681. #define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))
  682. #define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))
  683. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  684. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  685. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  686. #define __HAL_RCC_USB_CLK_ENABLE() do { \
  687. __IO uint32_t tmpreg; \
  688. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\
  689. /* Delay after an RCC peripheral clock enabling */ \
  690. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\
  691. UNUSED(tmpreg); \
  692. } while(0U)
  693. #define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))
  694. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  695. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  696. || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  697. #define __HAL_RCC_TIM5_CLK_ENABLE() do { \
  698. __IO uint32_t tmpreg; \
  699. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  700. /* Delay after an RCC peripheral clock enabling */ \
  701. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  702. UNUSED(tmpreg); \
  703. } while(0U)
  704. #define __HAL_RCC_TIM6_CLK_ENABLE() do { \
  705. __IO uint32_t tmpreg; \
  706. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  707. /* Delay after an RCC peripheral clock enabling */ \
  708. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  709. UNUSED(tmpreg); \
  710. } while(0U)
  711. #define __HAL_RCC_TIM7_CLK_ENABLE() do { \
  712. __IO uint32_t tmpreg; \
  713. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  714. /* Delay after an RCC peripheral clock enabling */ \
  715. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  716. UNUSED(tmpreg); \
  717. } while(0U)
  718. #define __HAL_RCC_SPI3_CLK_ENABLE() do { \
  719. __IO uint32_t tmpreg; \
  720. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  721. /* Delay after an RCC peripheral clock enabling */ \
  722. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  723. UNUSED(tmpreg); \
  724. } while(0U)
  725. #define __HAL_RCC_UART4_CLK_ENABLE() do { \
  726. __IO uint32_t tmpreg; \
  727. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  728. /* Delay after an RCC peripheral clock enabling */ \
  729. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  730. UNUSED(tmpreg); \
  731. } while(0U)
  732. #define __HAL_RCC_UART5_CLK_ENABLE() do { \
  733. __IO uint32_t tmpreg; \
  734. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  735. /* Delay after an RCC peripheral clock enabling */ \
  736. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  737. UNUSED(tmpreg); \
  738. } while(0U)
  739. #define __HAL_RCC_DAC_CLK_ENABLE() do { \
  740. __IO uint32_t tmpreg; \
  741. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  742. /* Delay after an RCC peripheral clock enabling */ \
  743. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  744. UNUSED(tmpreg); \
  745. } while(0U)
  746. #define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
  747. #define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))
  748. #define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))
  749. #define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
  750. #define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
  751. #define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
  752. #define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))
  753. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  754. #if defined(STM32F100xB) || defined (STM32F100xE)
  755. #define __HAL_RCC_TIM6_CLK_ENABLE() do { \
  756. __IO uint32_t tmpreg; \
  757. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  758. /* Delay after an RCC peripheral clock enabling */ \
  759. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  760. UNUSED(tmpreg); \
  761. } while(0U)
  762. #define __HAL_RCC_TIM7_CLK_ENABLE() do { \
  763. __IO uint32_t tmpreg; \
  764. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  765. /* Delay after an RCC peripheral clock enabling */ \
  766. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  767. UNUSED(tmpreg); \
  768. } while(0U)
  769. #define __HAL_RCC_DAC_CLK_ENABLE() do { \
  770. __IO uint32_t tmpreg; \
  771. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  772. /* Delay after an RCC peripheral clock enabling */ \
  773. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  774. UNUSED(tmpreg); \
  775. } while(0U)
  776. #define __HAL_RCC_CEC_CLK_ENABLE() do { \
  777. __IO uint32_t tmpreg; \
  778. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\
  779. /* Delay after an RCC peripheral clock enabling */ \
  780. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\
  781. UNUSED(tmpreg); \
  782. } while(0U)
  783. #define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))
  784. #define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))
  785. #define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))
  786. #define __HAL_RCC_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN))
  787. #endif /* STM32F100xB || STM32F100xE */
  788. #ifdef STM32F100xE
  789. #define __HAL_RCC_TIM5_CLK_ENABLE() do { \
  790. __IO uint32_t tmpreg; \
  791. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  792. /* Delay after an RCC peripheral clock enabling */ \
  793. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  794. UNUSED(tmpreg); \
  795. } while(0U)
  796. #define __HAL_RCC_TIM12_CLK_ENABLE() do { \
  797. __IO uint32_t tmpreg; \
  798. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  799. /* Delay after an RCC peripheral clock enabling */ \
  800. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  801. UNUSED(tmpreg); \
  802. } while(0U)
  803. #define __HAL_RCC_TIM13_CLK_ENABLE() do { \
  804. __IO uint32_t tmpreg; \
  805. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  806. /* Delay after an RCC peripheral clock enabling */ \
  807. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  808. UNUSED(tmpreg); \
  809. } while(0U)
  810. #define __HAL_RCC_TIM14_CLK_ENABLE() do { \
  811. __IO uint32_t tmpreg; \
  812. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  813. /* Delay after an RCC peripheral clock enabling */ \
  814. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  815. UNUSED(tmpreg); \
  816. } while(0U)
  817. #define __HAL_RCC_SPI3_CLK_ENABLE() do { \
  818. __IO uint32_t tmpreg; \
  819. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  820. /* Delay after an RCC peripheral clock enabling */ \
  821. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  822. UNUSED(tmpreg); \
  823. } while(0U)
  824. #define __HAL_RCC_UART4_CLK_ENABLE() do { \
  825. __IO uint32_t tmpreg; \
  826. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  827. /* Delay after an RCC peripheral clock enabling */ \
  828. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  829. UNUSED(tmpreg); \
  830. } while(0U)
  831. #define __HAL_RCC_UART5_CLK_ENABLE() do { \
  832. __IO uint32_t tmpreg; \
  833. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  834. /* Delay after an RCC peripheral clock enabling */ \
  835. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  836. UNUSED(tmpreg); \
  837. } while(0U)
  838. #define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
  839. #define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))
  840. #define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))
  841. #define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))
  842. #define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
  843. #define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
  844. #define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
  845. #endif /* STM32F100xE */
  846. #if defined(STM32F105xC) || defined(STM32F107xC)
  847. #define __HAL_RCC_CAN2_CLK_ENABLE() do { \
  848. __IO uint32_t tmpreg; \
  849. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\
  850. /* Delay after an RCC peripheral clock enabling */ \
  851. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\
  852. UNUSED(tmpreg); \
  853. } while(0U)
  854. #define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN))
  855. #endif /* STM32F105xC || STM32F107xC */
  856. #if defined(STM32F101xG) || defined(STM32F103xG)
  857. #define __HAL_RCC_TIM12_CLK_ENABLE() do { \
  858. __IO uint32_t tmpreg; \
  859. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  860. /* Delay after an RCC peripheral clock enabling */ \
  861. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  862. UNUSED(tmpreg); \
  863. } while(0U)
  864. #define __HAL_RCC_TIM13_CLK_ENABLE() do { \
  865. __IO uint32_t tmpreg; \
  866. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  867. /* Delay after an RCC peripheral clock enabling */ \
  868. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  869. UNUSED(tmpreg); \
  870. } while(0U)
  871. #define __HAL_RCC_TIM14_CLK_ENABLE() do { \
  872. __IO uint32_t tmpreg; \
  873. SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  874. /* Delay after an RCC peripheral clock enabling */ \
  875. tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  876. UNUSED(tmpreg); \
  877. } while(0U)
  878. #define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))
  879. #define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))
  880. #define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))
  881. #endif /* STM32F101xG || STM32F103xG*/
  882. /**
  883. * @}
  884. */
  885. /** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status
  886. * @brief Get the enable or disable status of the APB1 peripheral clock.
  887. * @note After reset, the peripheral clock (used for registers read/write access)
  888. * is disabled and the application software has to enable this clock before
  889. * using it.
  890. * @{
  891. */
  892. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  893. || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  894. #define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET)
  895. #define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET)
  896. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  897. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  898. || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  899. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  900. || defined(STM32F105xC) || defined(STM32F107xC)
  901. #define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET)
  902. #define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET)
  903. #define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET)
  904. #define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET)
  905. #define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET)
  906. #define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET)
  907. #define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET)
  908. #define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET)
  909. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  910. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  911. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  912. #define __HAL_RCC_USB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET)
  913. #define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET)
  914. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  915. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  916. || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  917. #define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)
  918. #define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)
  919. #define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)
  920. #define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)
  921. #define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)
  922. #define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)
  923. #define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)
  924. #define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)
  925. #define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)
  926. #define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)
  927. #define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)
  928. #define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)
  929. #define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)
  930. #define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)
  931. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  932. #if defined(STM32F100xB) || defined (STM32F100xE)
  933. #define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)
  934. #define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)
  935. #define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)
  936. #define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)
  937. #define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)
  938. #define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)
  939. #define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET)
  940. #define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET)
  941. #endif /* STM32F100xB || STM32F100xE */
  942. #ifdef STM32F100xE
  943. #define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)
  944. #define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)
  945. #define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)
  946. #define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)
  947. #define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)
  948. #define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)
  949. #define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)
  950. #define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)
  951. #define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)
  952. #define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)
  953. #define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)
  954. #define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)
  955. #define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)
  956. #define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)
  957. #define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET)
  958. #define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET)
  959. #endif /* STM32F100xE */
  960. #if defined(STM32F105xC) || defined(STM32F107xC)
  961. #define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)
  962. #define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)
  963. #endif /* STM32F105xC || STM32F107xC */
  964. #if defined(STM32F101xG) || defined(STM32F103xG)
  965. #define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)
  966. #define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)
  967. #define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)
  968. #define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)
  969. #endif /* STM32F101xG || STM32F103xG*/
  970. /**
  971. * @}
  972. */
  973. /** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable
  974. * @brief Enable or disable the High Speed APB (APB2) peripheral clock.
  975. * @note After reset, the peripheral clock (used for registers read/write access)
  976. * is disabled and the application software has to enable this clock before
  977. * using it.
  978. * @{
  979. */
  980. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  981. || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  982. || defined(STM32F103xG)
  983. #define __HAL_RCC_ADC2_CLK_ENABLE() do { \
  984. __IO uint32_t tmpreg; \
  985. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\
  986. /* Delay after an RCC peripheral clock enabling */ \
  987. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\
  988. UNUSED(tmpreg); \
  989. } while(0U)
  990. #define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN))
  991. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  992. #if defined(STM32F100xB) || defined(STM32F100xE)
  993. #define __HAL_RCC_TIM15_CLK_ENABLE() do { \
  994. __IO uint32_t tmpreg; \
  995. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\
  996. /* Delay after an RCC peripheral clock enabling */ \
  997. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\
  998. UNUSED(tmpreg); \
  999. } while(0U)
  1000. #define __HAL_RCC_TIM16_CLK_ENABLE() do { \
  1001. __IO uint32_t tmpreg; \
  1002. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\
  1003. /* Delay after an RCC peripheral clock enabling */ \
  1004. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\
  1005. UNUSED(tmpreg); \
  1006. } while(0U)
  1007. #define __HAL_RCC_TIM17_CLK_ENABLE() do { \
  1008. __IO uint32_t tmpreg; \
  1009. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\
  1010. /* Delay after an RCC peripheral clock enabling */ \
  1011. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\
  1012. UNUSED(tmpreg); \
  1013. } while(0U)
  1014. #define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN))
  1015. #define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN))
  1016. #define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN))
  1017. #endif /* STM32F100xB || STM32F100xE */
  1018. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1019. || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1020. || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1021. || defined(STM32F107xC)
  1022. #define __HAL_RCC_GPIOE_CLK_ENABLE() do { \
  1023. __IO uint32_t tmpreg; \
  1024. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\
  1025. /* Delay after an RCC peripheral clock enabling */ \
  1026. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\
  1027. UNUSED(tmpreg); \
  1028. } while(0U)
  1029. #define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN))
  1030. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1031. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1032. || defined(STM32F103xG)
  1033. #define __HAL_RCC_GPIOF_CLK_ENABLE() do { \
  1034. __IO uint32_t tmpreg; \
  1035. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1036. /* Delay after an RCC peripheral clock enabling */ \
  1037. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1038. UNUSED(tmpreg); \
  1039. } while(0U)
  1040. #define __HAL_RCC_GPIOG_CLK_ENABLE() do { \
  1041. __IO uint32_t tmpreg; \
  1042. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1043. /* Delay after an RCC peripheral clock enabling */ \
  1044. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1045. UNUSED(tmpreg); \
  1046. } while(0U)
  1047. #define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))
  1048. #define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))
  1049. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1050. #if defined(STM32F103xE) || defined(STM32F103xG)
  1051. #define __HAL_RCC_TIM8_CLK_ENABLE() do { \
  1052. __IO uint32_t tmpreg; \
  1053. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\
  1054. /* Delay after an RCC peripheral clock enabling */ \
  1055. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\
  1056. UNUSED(tmpreg); \
  1057. } while(0U)
  1058. #define __HAL_RCC_ADC3_CLK_ENABLE() do { \
  1059. __IO uint32_t tmpreg; \
  1060. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\
  1061. /* Delay after an RCC peripheral clock enabling */ \
  1062. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\
  1063. UNUSED(tmpreg); \
  1064. } while(0U)
  1065. #define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN))
  1066. #define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN))
  1067. #endif /* STM32F103xE || STM32F103xG */
  1068. #if defined(STM32F100xE)
  1069. #define __HAL_RCC_GPIOF_CLK_ENABLE() do { \
  1070. __IO uint32_t tmpreg; \
  1071. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1072. /* Delay after an RCC peripheral clock enabling */ \
  1073. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1074. UNUSED(tmpreg); \
  1075. } while(0U)
  1076. #define __HAL_RCC_GPIOG_CLK_ENABLE() do { \
  1077. __IO uint32_t tmpreg; \
  1078. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1079. /* Delay after an RCC peripheral clock enabling */ \
  1080. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1081. UNUSED(tmpreg); \
  1082. } while(0U)
  1083. #define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))
  1084. #define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))
  1085. #endif /* STM32F100xE */
  1086. #if defined(STM32F101xG) || defined(STM32F103xG)
  1087. #define __HAL_RCC_TIM9_CLK_ENABLE() do { \
  1088. __IO uint32_t tmpreg; \
  1089. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\
  1090. /* Delay after an RCC peripheral clock enabling */ \
  1091. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\
  1092. UNUSED(tmpreg); \
  1093. } while(0U)
  1094. #define __HAL_RCC_TIM10_CLK_ENABLE() do { \
  1095. __IO uint32_t tmpreg; \
  1096. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\
  1097. /* Delay after an RCC peripheral clock enabling */ \
  1098. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\
  1099. UNUSED(tmpreg); \
  1100. } while(0U)
  1101. #define __HAL_RCC_TIM11_CLK_ENABLE() do { \
  1102. __IO uint32_t tmpreg; \
  1103. SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\
  1104. /* Delay after an RCC peripheral clock enabling */ \
  1105. tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\
  1106. UNUSED(tmpreg); \
  1107. } while(0U)
  1108. #define __HAL_RCC_TIM9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))
  1109. #define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))
  1110. #define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))
  1111. #endif /* STM32F101xG || STM32F103xG */
  1112. /**
  1113. * @}
  1114. */
  1115. /** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status
  1116. * @brief Get the enable or disable status of the APB2 peripheral clock.
  1117. * @note After reset, the peripheral clock (used for registers read/write access)
  1118. * is disabled and the application software has to enable this clock before
  1119. * using it.
  1120. * @{
  1121. */
  1122. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  1123. || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  1124. || defined(STM32F103xG)
  1125. #define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET)
  1126. #define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET)
  1127. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  1128. #if defined(STM32F100xB) || defined(STM32F100xE)
  1129. #define __HAL_RCC_TIM15_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET)
  1130. #define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET)
  1131. #define __HAL_RCC_TIM16_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET)
  1132. #define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET)
  1133. #define __HAL_RCC_TIM17_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET)
  1134. #define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET)
  1135. #endif /* STM32F100xB || STM32F100xE */
  1136. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1137. || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1138. || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1139. || defined(STM32F107xC)
  1140. #define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET)
  1141. #define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET)
  1142. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1143. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1144. || defined(STM32F103xG)
  1145. #define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)
  1146. #define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)
  1147. #define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)
  1148. #define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)
  1149. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1150. #if defined(STM32F103xE) || defined(STM32F103xG)
  1151. #define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET)
  1152. #define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET)
  1153. #define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET)
  1154. #define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET)
  1155. #endif /* STM32F103xE || STM32F103xG */
  1156. #if defined(STM32F100xE)
  1157. #define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)
  1158. #define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)
  1159. #define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)
  1160. #define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)
  1161. #endif /* STM32F100xE */
  1162. #if defined(STM32F101xG) || defined(STM32F103xG)
  1163. #define __HAL_RCC_TIM9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET)
  1164. #define __HAL_RCC_TIM9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET)
  1165. #define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET)
  1166. #define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET)
  1167. #define __HAL_RCC_TIM11_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET)
  1168. #define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET)
  1169. #endif /* STM32F101xG || STM32F103xG */
  1170. /**
  1171. * @}
  1172. */
  1173. #if defined(STM32F105xC) || defined(STM32F107xC)
  1174. /** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release
  1175. * @brief Force or release AHB peripheral reset.
  1176. * @{
  1177. */
  1178. #define __HAL_RCC_AHB_FORCE_RESET() (RCC->AHBRSTR = 0xFFFFFFFFU)
  1179. #define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST))
  1180. #if defined(STM32F107xC)
  1181. #define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST))
  1182. #endif /* STM32F107xC */
  1183. #define __HAL_RCC_AHB_RELEASE_RESET() (RCC->AHBRSTR = 0x00)
  1184. #define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST))
  1185. #if defined(STM32F107xC)
  1186. #define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST))
  1187. #endif /* STM32F107xC */
  1188. /**
  1189. * @}
  1190. */
  1191. #endif /* STM32F105xC || STM32F107xC */
  1192. /** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset
  1193. * @brief Force or release APB1 peripheral reset.
  1194. * @{
  1195. */
  1196. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  1197. || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  1198. #define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST))
  1199. #define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST))
  1200. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  1201. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  1202. || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  1203. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  1204. || defined(STM32F105xC) || defined(STM32F107xC)
  1205. #define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))
  1206. #define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))
  1207. #define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))
  1208. #define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))
  1209. #define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))
  1210. #define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))
  1211. #define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))
  1212. #define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))
  1213. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1214. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  1215. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  1216. #define __HAL_RCC_USB_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))
  1217. #define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))
  1218. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  1219. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1220. || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  1221. #define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
  1222. #define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))
  1223. #define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))
  1224. #define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
  1225. #define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
  1226. #define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
  1227. #define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))
  1228. #define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
  1229. #define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))
  1230. #define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))
  1231. #define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
  1232. #define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
  1233. #define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
  1234. #define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))
  1235. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  1236. #if defined(STM32F100xB) || defined (STM32F100xE)
  1237. #define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))
  1238. #define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))
  1239. #define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))
  1240. #define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST))
  1241. #define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))
  1242. #define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))
  1243. #define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))
  1244. #define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST))
  1245. #endif /* STM32F100xB || STM32F100xE */
  1246. #if defined (STM32F100xE)
  1247. #define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
  1248. #define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))
  1249. #define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))
  1250. #define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))
  1251. #define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
  1252. #define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
  1253. #define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
  1254. #define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
  1255. #define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))
  1256. #define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))
  1257. #define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))
  1258. #define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
  1259. #define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
  1260. #define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
  1261. #endif /* STM32F100xE */
  1262. #if defined(STM32F105xC) || defined(STM32F107xC)
  1263. #define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST))
  1264. #define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST))
  1265. #endif /* STM32F105xC || STM32F107xC */
  1266. #if defined(STM32F101xG) || defined(STM32F103xG)
  1267. #define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))
  1268. #define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))
  1269. #define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))
  1270. #define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))
  1271. #define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))
  1272. #define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))
  1273. #endif /* STM32F101xG || STM32F103xG */
  1274. /**
  1275. * @}
  1276. */
  1277. /** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset
  1278. * @brief Force or release APB2 peripheral reset.
  1279. * @{
  1280. */
  1281. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  1282. || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  1283. || defined(STM32F103xG)
  1284. #define __HAL_RCC_ADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST))
  1285. #define __HAL_RCC_ADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST))
  1286. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  1287. #if defined(STM32F100xB) || defined(STM32F100xE)
  1288. #define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST))
  1289. #define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST))
  1290. #define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST))
  1291. #define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST))
  1292. #define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST))
  1293. #define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST))
  1294. #endif /* STM32F100xB || STM32F100xE */
  1295. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1296. || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1297. || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1298. || defined(STM32F107xC)
  1299. #define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST))
  1300. #define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST))
  1301. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1302. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1303. || defined(STM32F103xG)
  1304. #define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))
  1305. #define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))
  1306. #define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))
  1307. #define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))
  1308. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1309. #if defined(STM32F103xE) || defined(STM32F103xG)
  1310. #define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST))
  1311. #define __HAL_RCC_ADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST))
  1312. #define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST))
  1313. #define __HAL_RCC_ADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST))
  1314. #endif /* STM32F103xE || STM32F103xG */
  1315. #if defined(STM32F100xE)
  1316. #define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))
  1317. #define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))
  1318. #define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))
  1319. #define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))
  1320. #endif /* STM32F100xE */
  1321. #if defined(STM32F101xG) || defined(STM32F103xG)
  1322. #define __HAL_RCC_TIM9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))
  1323. #define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))
  1324. #define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))
  1325. #define __HAL_RCC_TIM9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))
  1326. #define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))
  1327. #define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))
  1328. #endif /* STM32F101xG || STM32F103xG*/
  1329. /**
  1330. * @}
  1331. */
  1332. /** @defgroup RCCEx_HSE_Configuration HSE Configuration
  1333. * @{
  1334. */
  1335. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  1336. || defined(STM32F100xE)
  1337. /**
  1338. * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.
  1339. * @note Predivision factor can not be changed if PLL is used as system clock
  1340. * In this case, you have to select another source of the system clock, disable the PLL and
  1341. * then change the HSE predivision factor.
  1342. * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.
  1343. * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16.
  1344. */
  1345. #define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__))
  1346. #else
  1347. /**
  1348. * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.
  1349. * @note Predivision factor can not be changed if PLL is used as system clock
  1350. * In this case, you have to select another source of the system clock, disable the PLL and
  1351. * then change the HSE predivision factor.
  1352. * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.
  1353. * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2.
  1354. */
  1355. #define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) \
  1356. MODIFY_REG(RCC->CFGR,RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__))
  1357. #endif /* STM32F105xC || STM32F107xC */
  1358. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  1359. || defined(STM32F100xE)
  1360. /**
  1361. * @brief Macro to get prediv1 factor for PLL.
  1362. */
  1363. #define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)
  1364. #else
  1365. /**
  1366. * @brief Macro to get prediv1 factor for PLL.
  1367. */
  1368. #define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE)
  1369. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  1370. /**
  1371. * @}
  1372. */
  1373. #if defined(STM32F105xC) || defined(STM32F107xC)
  1374. /** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration
  1375. * @{
  1376. */
  1377. /** @brief Macros to enable the main PLLI2S.
  1378. * @note After enabling the main PLLI2S, the application software should wait on
  1379. * PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can
  1380. * be used as system clock source.
  1381. * @note The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.
  1382. */
  1383. #define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = ENABLE)
  1384. /** @brief Macros to disable the main PLLI2S.
  1385. * @note The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.
  1386. */
  1387. #define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = DISABLE)
  1388. /** @brief macros to configure the main PLLI2S multiplication factor.
  1389. * @note This function must be used only when the main PLLI2S is disabled.
  1390. *
  1391. * @param __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock
  1392. * This parameter can be one of the following values:
  1393. * @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8
  1394. * @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9
  1395. * @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10
  1396. * @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11
  1397. * @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12
  1398. * @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13
  1399. * @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14
  1400. * @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16
  1401. * @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20
  1402. *
  1403. */
  1404. #define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__)\
  1405. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL,(__PLLI2SMUL__))
  1406. /**
  1407. * @}
  1408. */
  1409. #endif /* STM32F105xC || STM32F107xC */
  1410. /** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration
  1411. * @brief Macros to configure clock source of different peripherals.
  1412. * @{
  1413. */
  1414. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  1415. || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  1416. /** @brief Macro to configure the USB clock.
  1417. * @param __USBCLKSOURCE__ specifies the USB clock source.
  1418. * This parameter can be one of the following values:
  1419. * @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock
  1420. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock
  1421. */
  1422. #define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \
  1423. MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__))
  1424. /** @brief Macro to get the USB clock (USBCLK).
  1425. * @retval The clock source can be one of the following values:
  1426. * @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock
  1427. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock
  1428. */
  1429. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE)))
  1430. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  1431. #if defined(STM32F105xC) || defined(STM32F107xC)
  1432. /** @brief Macro to configure the USB OTSclock.
  1433. * @param __USBCLKSOURCE__ specifies the USB clock source.
  1434. * This parameter can be one of the following values:
  1435. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock
  1436. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock
  1437. */
  1438. #define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \
  1439. MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__))
  1440. /** @brief Macro to get the USB clock (USBCLK).
  1441. * @retval The clock source can be one of the following values:
  1442. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock
  1443. * @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock
  1444. */
  1445. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE)))
  1446. #endif /* STM32F105xC || STM32F107xC */
  1447. /** @brief Macro to configure the ADCx clock (x=1 to 3 depending on devices).
  1448. * @param __ADCCLKSOURCE__ specifies the ADC clock source.
  1449. * This parameter can be one of the following values:
  1450. * @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock
  1451. * @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock
  1452. * @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock
  1453. * @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock
  1454. */
  1455. #define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) \
  1456. MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__))
  1457. /** @brief Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices).
  1458. * @retval The clock source can be one of the following values:
  1459. * @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock
  1460. * @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock
  1461. * @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock
  1462. * @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock
  1463. */
  1464. #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE)))
  1465. /**
  1466. * @}
  1467. */
  1468. #if defined(STM32F105xC) || defined(STM32F107xC)
  1469. /** @addtogroup RCCEx_HSE_Configuration
  1470. * @{
  1471. */
  1472. /**
  1473. * @brief Macro to configure the PLL2 & PLLI2S Predivision factor.
  1474. * @note Predivision factor can not be changed if PLL2 is used indirectly as system clock
  1475. * In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and
  1476. * then change the PREDIV2 factor.
  1477. * @param __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S.
  1478. * This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16.
  1479. */
  1480. #define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) \
  1481. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__))
  1482. /**
  1483. * @brief Macro to get prediv2 factor for PLL2 & PLL3.
  1484. */
  1485. #define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2)
  1486. /**
  1487. * @}
  1488. */
  1489. /** @addtogroup RCCEx_PLLI2S_Configuration
  1490. * @{
  1491. */
  1492. /** @brief Macros to enable the main PLL2.
  1493. * @note After enabling the main PLL2, the application software should wait on
  1494. * PLL2RDY flag to be set indicating that PLL2 clock is stable and can
  1495. * be used as system clock source.
  1496. * @note The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.
  1497. */
  1498. #define __HAL_RCC_PLL2_ENABLE() (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = ENABLE)
  1499. /** @brief Macros to disable the main PLL2.
  1500. * @note The main PLL2 can not be disabled if it is used indirectly as system clock source
  1501. * @note The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.
  1502. */
  1503. #define __HAL_RCC_PLL2_DISABLE() (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = DISABLE)
  1504. /** @brief macros to configure the main PLL2 multiplication factor.
  1505. * @note This function must be used only when the main PLL2 is disabled.
  1506. *
  1507. * @param __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock
  1508. * This parameter can be one of the following values:
  1509. * @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8
  1510. * @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9
  1511. * @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10
  1512. * @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11
  1513. * @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12
  1514. * @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13
  1515. * @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14
  1516. * @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16
  1517. * @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20
  1518. *
  1519. */
  1520. #define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__)\
  1521. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL,(__PLL2MUL__))
  1522. /**
  1523. * @}
  1524. */
  1525. /** @defgroup RCCEx_I2S_Configuration I2S Configuration
  1526. * @brief Macros to configure clock source of I2S peripherals.
  1527. * @{
  1528. */
  1529. /** @brief Macro to configure the I2S2 clock.
  1530. * @param __I2S2CLKSOURCE__ specifies the I2S2 clock source.
  1531. * This parameter can be one of the following values:
  1532. * @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1533. * @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1534. */
  1535. #define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) \
  1536. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__))
  1537. /** @brief Macro to get the I2S2 clock (I2S2CLK).
  1538. * @retval The clock source can be one of the following values:
  1539. * @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1540. * @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1541. */
  1542. #define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC)))
  1543. /** @brief Macro to configure the I2S3 clock.
  1544. * @param __I2S2CLKSOURCE__ specifies the I2S3 clock source.
  1545. * This parameter can be one of the following values:
  1546. * @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1547. * @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1548. */
  1549. #define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) \
  1550. MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__))
  1551. /** @brief Macro to get the I2S3 clock (I2S3CLK).
  1552. * @retval The clock source can be one of the following values:
  1553. * @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1554. * @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1555. */
  1556. #define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC)))
  1557. /**
  1558. * @}
  1559. */
  1560. #endif /* STM32F105xC || STM32F107xC */
  1561. /**
  1562. * @}
  1563. */
  1564. /* Exported functions --------------------------------------------------------*/
  1565. /** @addtogroup RCCEx_Exported_Functions
  1566. * @{
  1567. */
  1568. /** @addtogroup RCCEx_Exported_Functions_Group1
  1569. * @{
  1570. */
  1571. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  1572. void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  1573. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);
  1574. /**
  1575. * @}
  1576. */
  1577. #if defined(STM32F105xC) || defined(STM32F107xC)
  1578. /** @addtogroup RCCEx_Exported_Functions_Group2
  1579. * @{
  1580. */
  1581. HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit);
  1582. HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void);
  1583. /**
  1584. * @}
  1585. */
  1586. /** @addtogroup RCCEx_Exported_Functions_Group3
  1587. * @{
  1588. */
  1589. HAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init);
  1590. HAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void);
  1591. /**
  1592. * @}
  1593. */
  1594. #endif /* STM32F105xC || STM32F107xC */
  1595. /**
  1596. * @}
  1597. */
  1598. /**
  1599. * @}
  1600. */
  1601. /**
  1602. * @}
  1603. */
  1604. #ifdef __cplusplus
  1605. }
  1606. #endif
  1607. #endif /* __STM32F1xx_HAL_RCC_EX_H */
  1608. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/