Subversion Repositories dashGPS

Rev

Details | Last modification | View Log | RSS feed

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