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