Subversion Repositories DashDisplay

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_rcc.h
4
  * @author  MCD Application Team
5 mjames 5
  * @version V1.0.4
6
  * @date    29-April-2016
2 mjames 7
  * @brief   Header file of RCC HAL module.
8
  ******************************************************************************
9
  * @attention
10
  *
5 mjames 11
  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
2 mjames 12
  *
13
  * Redistribution and use in source and binary forms, with or without modification,
14
  * are permitted provided that the following conditions are met:
15
  *   1. Redistributions of source code must retain the above copyright notice,
16
  *      this list of conditions and the following disclaimer.
17
  *   2. Redistributions in binary form must reproduce the above copyright notice,
18
  *      this list of conditions and the following disclaimer in the documentation
19
  *      and/or other materials provided with the distribution.
20
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
21
  *      may be used to endorse or promote products derived from this software
22
  *      without specific prior written permission.
23
  *
24
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
  *
35
  ******************************************************************************
36
  */
37
 
38
/* Define to prevent recursive inclusion -------------------------------------*/
39
#ifndef __STM32F1xx_HAL_RCC_H
40
#define __STM32F1xx_HAL_RCC_H
41
 
42
#ifdef __cplusplus
43
 extern "C" {
44
#endif
45
 
46
/* Includes ------------------------------------------------------------------*/
47
#include "stm32f1xx_hal_def.h"
48
 
49
/** @addtogroup STM32F1xx_HAL_Driver
50
  * @{
51
  */
52
 
53
/** @addtogroup RCC
54
  * @{
55
  */
56
 
57
/** @addtogroup RCC_Private_Constants
58
  * @{
59
  */
60
 
61
/** @defgroup RCC_Timeout RCC Timeout
62
  * @{
63
  */
64
 
65
/* Disable Backup domain write protection state change timeout */
66
#define RCC_DBP_TIMEOUT_VALUE  ((uint32_t)100)       /* 100 ms */
67
/* LSE state change timeout */
68
#define RCC_LSE_TIMEOUT_VALUE      LSE_STARTUP_TIMEOUT
69
#define CLOCKSWITCH_TIMEOUT_VALUE  ((uint32_t)5000)  /* 5 s    */
70
#define HSE_TIMEOUT_VALUE          HSE_STARTUP_TIMEOUT
5 mjames 71
#define HSI_TIMEOUT_VALUE         ((uint32_t)2)      /* 2 ms (minimum Tick + 1) */
72
#define LSI_TIMEOUT_VALUE         ((uint32_t)2)      /* 2 ms (minimum Tick + 1) */
73
#define PLL_TIMEOUT_VALUE         ((uint32_t)2)      /* 2 ms (minimum Tick + 1) */
2 mjames 74
#define LSI_VALUE                 ((uint32_t)40000)  /* 40kHz */
75
/**
76
  * @}
77
  */
78
 
79
/** @defgroup RCC_Register_Offset Register offsets
80
  * @{
81
  */
82
#define RCC_OFFSET                (RCC_BASE - PERIPH_BASE)
83
#define RCC_CR_OFFSET             0x00
84
#define RCC_CFGR_OFFSET           0x04
85
#define RCC_CIR_OFFSET            0x08
86
#define RCC_BDCR_OFFSET           0x20
87
#define RCC_CSR_OFFSET            0x24
88
 
89
/**
90
  * @}
91
  */
92
 
93
/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion
94
  * @brief RCC registers bit address in the alias region
95
  * @{
96
  */
97
#define RCC_CR_OFFSET_BB          (RCC_OFFSET + RCC_CR_OFFSET)
98
#define RCC_CFGR_OFFSET_BB        (RCC_OFFSET + RCC_CFGR_OFFSET)
99
#define RCC_CIR_OFFSET_BB         (RCC_OFFSET + RCC_CIR_OFFSET)
100
#define RCC_BDCR_OFFSET_BB        (RCC_OFFSET + RCC_BDCR_OFFSET)
101
#define RCC_CSR_OFFSET_BB         (RCC_OFFSET + RCC_CSR_OFFSET)
102
 
103
/* --- CR Register ---*/
104
/* Alias word address of HSION bit */
105
#define RCC_HSION_BIT_NUMBER      POSITION_VAL(RCC_CR_HSION)
106
#define RCC_CR_HSION_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_HSION_BIT_NUMBER * 4)))
107
/* Alias word address of HSEON bit */
108
#define RCC_HSEON_BIT_NUMBER      POSITION_VAL(RCC_CR_HSEON)
109
#define RCC_CR_HSEON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_HSEON_BIT_NUMBER * 4)))
110
/* Alias word address of CSSON bit */
111
#define RCC_CSSON_BIT_NUMBER      POSITION_VAL(RCC_CR_CSSON)
112
#define RCC_CR_CSSON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_CSSON_BIT_NUMBER * 4)))
113
/* Alias word address of PLLON bit */
114
#define RCC_PLLON_BIT_NUMBER      POSITION_VAL(RCC_CR_PLLON)
115
#define RCC_CR_PLLON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32) + (RCC_PLLON_BIT_NUMBER * 4)))
116
 
117
/* --- CSR Register ---*/
118
/* Alias word address of LSION bit */
119
#define RCC_LSION_BIT_NUMBER      POSITION_VAL(RCC_CSR_LSION)
120
#define RCC_CSR_LSION_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (RCC_LSION_BIT_NUMBER * 4)))
121
 
122
/* Alias word address of RMVF bit */
123
#define RCC_RMVF_BIT_NUMBER       POSITION_VAL(RCC_CSR_RMVF)
124
#define RCC_CSR_RMVF_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (RCC_RMVF_BIT_NUMBER * 4)))
125
 
126
/* --- BDCR Registers ---*/
127
/* Alias word address of LSEON bit */
128
#define RCC_LSEON_BIT_NUMBER      POSITION_VAL(RCC_BDCR_LSEON)
129
#define RCC_BDCR_LSEON_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_LSEON_BIT_NUMBER * 4)))
130
 
131
/* Alias word address of LSEON bit */
132
#define RCC_LSEBYP_BIT_NUMBER     POSITION_VAL(RCC_BDCR_LSEBYP)
133
#define RCC_BDCR_LSEBYP_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_LSEBYP_BIT_NUMBER * 4)))
134
 
135
/* Alias word address of RTCEN bit */
136
#define RCC_RTCEN_BIT_NUMBER      POSITION_VAL(RCC_BDCR_RTCEN)
137
#define RCC_BDCR_RTCEN_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_RTCEN_BIT_NUMBER * 4)))
138
 
139
/* Alias word address of BDRST bit */
140
#define RCC_BDRST_BIT_NUMBER          POSITION_VAL(RCC_BDCR_BDRST)
141
#define RCC_BDCR_BDRST_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32) + (RCC_BDRST_BIT_NUMBER * 4)))
142
 
143
/**
144
  * @}
145
  */
146
 
147
/* CR register byte 2 (Bits[23:16]) base address */
148
#define RCC_CR_BYTE2_ADDRESS          ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02))
149
 
150
/* CIR register byte 1 (Bits[15:8]) base address */
151
#define RCC_CIR_BYTE1_ADDRESS     ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01))
152
 
153
/* CIR register byte 2 (Bits[23:16]) base address */
154
#define RCC_CIR_BYTE2_ADDRESS     ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02))
155
 
156
/* Defines used for Flags */
157
#define CR_REG_INDEX                     ((uint8_t)1)
158
#define BDCR_REG_INDEX                   ((uint8_t)2)
159
#define CSR_REG_INDEX                    ((uint8_t)3)
160
 
161
#define RCC_FLAG_MASK                    ((uint8_t)0x1F)
162
 
163
/**
164
  * @}
165
  */
166
 
167
/** @addtogroup RCC_Private_Macros
168
  * @{
169
  */
170
/** @defgroup RCC_Alias_For_Legacy Alias define maintained for legacy
171
  * @{
172
  */
173
#define __HAL_RCC_SYSCFG_CLK_DISABLE    __HAL_RCC_AFIO_CLK_DISABLE
174
#define __HAL_RCC_SYSCFG_CLK_ENABLE     __HAL_RCC_AFIO_CLK_ENABLE
175
#define __HAL_RCC_SYSCFG_FORCE_RESET    __HAL_RCC_AFIO_FORCE_RESET
176
#define __HAL_RCC_SYSCFG_RELEASE_RESET  __HAL_RCC_AFIO_RELEASE_RESET
177
/**
178
  * @}
179
  */
180
 
181
#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI_DIV2) || \
182
                                      ((__SOURCE__) == RCC_PLLSOURCE_HSE))
183
#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__) (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE)                           || \
184
                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \
185
                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \
186
                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \
187
                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE))
188
#define IS_RCC_HSE(__HSE__) (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || \
189
                             ((__HSE__) == RCC_HSE_BYPASS))
190
#define IS_RCC_LSE(__LSE__) (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || \
191
                             ((__LSE__) == RCC_LSE_BYPASS))
192
#define IS_RCC_HSI(__HSI__) (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON))
193
#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1F)
194
#define IS_RCC_LSI(__LSI__) (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON))
195
#define IS_RCC_PLL(__PLL__) (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || \
196
                             ((__PLL__) == RCC_PLL_ON))
197
 
198
#define IS_RCC_CLOCKTYPE(CLK) ((((CLK) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || \
199
                               (((CLK) & RCC_CLOCKTYPE_HCLK)   == RCC_CLOCKTYPE_HCLK)   || \
200
                               (((CLK) & RCC_CLOCKTYPE_PCLK1)  == RCC_CLOCKTYPE_PCLK1)  || \
201
                               (((CLK) & RCC_CLOCKTYPE_PCLK2)  == RCC_CLOCKTYPE_PCLK2))
202
#define IS_RCC_SYSCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || \
203
                                         ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || \
204
                                         ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK))
205
#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || \
206
                                                ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || \
207
                                                ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK))
208
#define IS_RCC_HCLK(__HCLK__) (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || \
209
                               ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || \
210
                               ((__HCLK__) == RCC_SYSCLK_DIV16) || ((__HCLK__) == RCC_SYSCLK_DIV64) || \
211
                               ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || \
212
                               ((__HCLK__) == RCC_SYSCLK_DIV512))
213
#define IS_RCC_PCLK(__PCLK__) (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || \
214
                               ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || \
215
                               ((__PCLK__) == RCC_HCLK_DIV16))
216
#define IS_RCC_MCO(__MCO__)  ((__MCO__) == RCC_MCO)
217
#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1)) 
218
#define IS_RCC_RTCCLKSOURCE(__SOURCE__)  (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || \
219
                                          ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE)  || \
220
                                          ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI)  || \
221
                                          ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV128))
222
 
223
/**
224
  * @}
225
  */
226
 
227
/* Exported types ------------------------------------------------------------*/
228
 
229
/** @defgroup RCC_Exported_Types RCC Exported Types
230
  * @{
231
  */
232
 
233
/**
234
  * @brief  RCC PLL configuration structure definition  
235
  */
236
typedef struct
237
{
238
  uint32_t PLLState;      /*!< PLLState: The new state of the PLL.
239
                              This parameter can be a value of @ref RCC_PLL_Config */
240
 
241
  uint32_t PLLSource;     /*!< PLLSource: PLL entry clock source.
242
                              This parameter must be a value of @ref RCC_PLL_Clock_Source */          
243
 
244
  uint32_t PLLMUL;        /*!< PLLMUL: Multiplication factor for PLL VCO input clock
245
                              This parameter must be a value of @ref RCCEx_PLL_Multiplication_Factor */
246
} RCC_PLLInitTypeDef;
247
 
5 mjames 248
/**
2 mjames 249
  * @brief  RCC System, AHB and APB busses clock configuration structure definition  
250
  */
251
typedef struct
252
{
253
  uint32_t ClockType;             /*!< The clock to be configured.
254
                                       This parameter can be a value of @ref RCC_System_Clock_Type */
5 mjames 255
 
2 mjames 256
  uint32_t SYSCLKSource;          /*!< The clock source (SYSCLKS) used as system clock.
257
                                       This parameter can be a value of @ref RCC_System_Clock_Source */
258
 
259
  uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
260
                                       This parameter can be a value of @ref RCC_AHB_Clock_Source */
5 mjames 261
 
2 mjames 262
  uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
263
                                       This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */
5 mjames 264
 
2 mjames 265
  uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
266
                                       This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */
267
} RCC_ClkInitTypeDef;
268
 
269
/**
270
  * @}
271
  */
272
 
273
/* Exported constants --------------------------------------------------------*/
274
/** @defgroup RCC_Exported_Constants RCC Exported Constants
275
  * @{
276
  */
277
 
278
/** @defgroup RCC_PLL_Clock_Source PLL Clock Source
279
  * @{
280
  */
281
 
282
#define RCC_PLLSOURCE_HSI_DIV2      ((uint32_t)0x00000000)     /*!< HSI clock divided by 2 selected as PLL entry clock source */
283
#define RCC_PLLSOURCE_HSE           RCC_CFGR_PLLSRC            /*!< HSE clock selected as PLL entry clock source */
284
 
285
/**
286
  * @}
287
  */
288
 
289
/** @defgroup RCC_Oscillator_Type Oscillator Type
290
  * @{
291
  */
292
#define RCC_OSCILLATORTYPE_NONE            ((uint32_t)0x00000000)
293
#define RCC_OSCILLATORTYPE_HSE             ((uint32_t)0x00000001)
294
#define RCC_OSCILLATORTYPE_HSI             ((uint32_t)0x00000002)
295
#define RCC_OSCILLATORTYPE_LSE             ((uint32_t)0x00000004)
296
#define RCC_OSCILLATORTYPE_LSI             ((uint32_t)0x00000008)
297
/**
298
  * @}
299
  */
300
 
301
/** @defgroup RCC_HSE_Config HSE Config
302
  * @{
303
  */
304
#define RCC_HSE_OFF                      ((uint32_t)0x00000000)                     /*!< HSE clock deactivation */
305
#define RCC_HSE_ON                       RCC_CR_HSEON                               /*!< HSE clock activation */
306
#define RCC_HSE_BYPASS                   ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */
307
/**
308
  * @}
309
  */
310
 
311
/** @defgroup RCC_LSE_Config LSE Config
312
  * @{
313
  */
314
#define RCC_LSE_OFF                      ((uint32_t)0x00000000)                       /*!< LSE clock deactivation */
315
#define RCC_LSE_ON                       RCC_BDCR_LSEON                                /*!< LSE clock activation */
316
#define RCC_LSE_BYPASS                   ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */
317
 
318
/**
319
  * @}
320
  */
321
 
322
/** @defgroup RCC_HSI_Config HSI Config
323
  * @{
324
  */
5 mjames 325
#define RCC_HSI_OFF                      ((uint32_t)0x00000000)           /*!< HSI clock deactivation */
326
#define RCC_HSI_ON                       RCC_CR_HSION                     /*!< HSI clock activation */
2 mjames 327
 
328
#define RCC_HSICALIBRATION_DEFAULT       ((uint32_t)0x10)         /* Default HSI calibration trimming value */
329
 
330
/**
331
  * @}
332
  */
333
 
334
/** @defgroup RCC_LSI_Config LSI Config
335
  * @{
336
  */
337
#define RCC_LSI_OFF                      ((uint32_t)0x00000000)   /*!< LSI clock deactivation */
338
#define RCC_LSI_ON                       RCC_CSR_LSION            /*!< LSI clock activation */
339
 
340
/**
341
  * @}
342
  */
343
 
344
/** @defgroup RCC_PLL_Config PLL Config
345
  * @{
346
  */
347
#define RCC_PLL_NONE                      ((uint32_t)0x00000000)  /*!< PLL is not configured */
348
#define RCC_PLL_OFF                       ((uint32_t)0x00000001)  /*!< PLL deactivation */
349
#define RCC_PLL_ON                        ((uint32_t)0x00000002)  /*!< PLL activation */
350
 
351
/**
352
  * @}
353
  */
354
 
355
/** @defgroup RCC_System_Clock_Type System Clock Type
356
  * @{
357
  */
358
#define RCC_CLOCKTYPE_SYSCLK             ((uint32_t)0x00000001) /*!< SYSCLK to configure */
359
#define RCC_CLOCKTYPE_HCLK               ((uint32_t)0x00000002) /*!< HCLK to configure */
360
#define RCC_CLOCKTYPE_PCLK1              ((uint32_t)0x00000004) /*!< PCLK1 to configure */
361
#define RCC_CLOCKTYPE_PCLK2              ((uint32_t)0x00000008) /*!< PCLK2 to configure */
362
 
363
/**
364
  * @}
365
  */
366
 
367
/** @defgroup RCC_System_Clock_Source System Clock Source
368
  * @{
369
  */
370
#define RCC_SYSCLKSOURCE_HSI             RCC_CFGR_SW_HSI /*!< HSI selected as system clock */
371
#define RCC_SYSCLKSOURCE_HSE             RCC_CFGR_SW_HSE /*!< HSE selected as system clock */
372
#define RCC_SYSCLKSOURCE_PLLCLK          RCC_CFGR_SW_PLL /*!< PLL selected as system clock */
373
 
374
/**
375
  * @}
376
  */
377
 
378
/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status
379
  * @{
380
  */
381
#define RCC_SYSCLKSOURCE_STATUS_HSI      RCC_CFGR_SWS_HSI            /*!< HSI used as system clock */
382
#define RCC_SYSCLKSOURCE_STATUS_HSE      RCC_CFGR_SWS_HSE            /*!< HSE used as system clock */
383
#define RCC_SYSCLKSOURCE_STATUS_PLLCLK   RCC_CFGR_SWS_PLL            /*!< PLL used as system clock */
384
 
385
/**
386
  * @}
387
  */
388
 
389
/** @defgroup RCC_AHB_Clock_Source AHB Clock Source
390
  * @{
391
  */
392
#define RCC_SYSCLK_DIV1                  RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */
393
#define RCC_SYSCLK_DIV2                  RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */
394
#define RCC_SYSCLK_DIV4                  RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */
395
#define RCC_SYSCLK_DIV8                  RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */
396
#define RCC_SYSCLK_DIV16                 RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */
397
#define RCC_SYSCLK_DIV64                 RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */
398
#define RCC_SYSCLK_DIV128                RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
399
#define RCC_SYSCLK_DIV256                RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
400
#define RCC_SYSCLK_DIV512                RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
401
 
402
/**
403
  * @}
404
  */
405
 
406
/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source
407
  * @{
408
  */
409
#define RCC_HCLK_DIV1                    RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */
410
#define RCC_HCLK_DIV2                    RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */
411
#define RCC_HCLK_DIV4                    RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */
412
#define RCC_HCLK_DIV8                    RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */
413
#define RCC_HCLK_DIV16                   RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
414
 
415
/**
416
  * @}
417
  */
418
 
419
/** @defgroup RCC_RTC_Clock_Source RTC Clock Source
420
  * @{
421
  */
422
#define RCC_RTCCLKSOURCE_NO_CLK          ((uint32_t)0x00000000)                 /*!< No clock */
5 mjames 423
#define RCC_RTCCLKSOURCE_LSE             RCC_BDCR_RTCSEL_LSE                  /*!< LSE oscillator clock used as RTC clock */
424
#define RCC_RTCCLKSOURCE_LSI             RCC_BDCR_RTCSEL_LSI                  /*!< LSI oscillator clock used as RTC clock */
2 mjames 425
#define RCC_RTCCLKSOURCE_HSE_DIV128      RCC_BDCR_RTCSEL_HSE                    /*!< HSE oscillator clock divided by 128 used as RTC clock */
426
/**
427
  * @}
428
  */
429
 
430
 
431
/** @defgroup RCC_MCO_Index MCO Index
432
  * @{
433
  */
434
#define RCC_MCO1                         ((uint32_t)0x00000000)
435
#define RCC_MCO                          RCC_MCO1               /*!< MCO1 to be compliant with other families with 2 MCOs*/
436
 
437
/**
438
  * @}
439
  */
440
 
441
/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler
442
  * @{
443
  */
444
#define RCC_MCODIV_1                    ((uint32_t)0x00000000)
445
 
446
/**
447
  * @}
448
  */
449
 
450
/** @defgroup RCC_Interrupt Interrupts
451
  * @{
452
  */
5 mjames 453
#define RCC_IT_LSIRDY                    ((uint8_t)RCC_CIR_LSIRDYF)   /*!< LSI Ready Interrupt flag */
454
#define RCC_IT_LSERDY                    ((uint8_t)RCC_CIR_LSERDYF)   /*!< LSE Ready Interrupt flag */
455
#define RCC_IT_HSIRDY                    ((uint8_t)RCC_CIR_HSIRDYF)   /*!< HSI Ready Interrupt flag */
456
#define RCC_IT_HSERDY                    ((uint8_t)RCC_CIR_HSERDYF)   /*!< HSE Ready Interrupt flag */
457
#define RCC_IT_PLLRDY                    ((uint8_t)RCC_CIR_PLLRDYF)   /*!< PLL Ready Interrupt flag */
458
#define RCC_IT_CSS                       ((uint8_t)RCC_CIR_CSSF)      /*!< Clock Security System Interrupt flag */
2 mjames 459
/**
460
  * @}
461
  */
462
 
463
/** @defgroup RCC_Flag Flags
464
  *        Elements values convention: XXXYYYYYb
465
  *           - YYYYY  : Flag position in the register
466
  *           - XXX  : Register index
467
  *                 - 001: CR register
468
  *                 - 010: BDCR register
469
  *                 - 011: CSR register
470
  * @{
471
  */
472
/* Flags in the CR register */
473
#define RCC_FLAG_HSIRDY                  ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_HSIRDY))) /*!< Internal High Speed clock ready flag */
474
#define RCC_FLAG_HSERDY                  ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_HSERDY))) /*!< External High Speed clock ready flag */
475
#define RCC_FLAG_PLLRDY                  ((uint8_t)((CR_REG_INDEX << 5) | POSITION_VAL(RCC_CR_PLLRDY))) /*!< PLL clock ready flag */
476
 
477
/* Flags in the CSR register */
478
#define RCC_FLAG_LSIRDY                  ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_LSIRDY)))   /*!< Internal Low Speed oscillator Ready */
479
#define RCC_FLAG_PINRST                  ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_PINRSTF)))  /*!< PIN reset flag */
480
#define RCC_FLAG_PORRST                  ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_PORRSTF)))  /*!< POR/PDR reset flag */
481
#define RCC_FLAG_SFTRST                  ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_SFTRSTF)))  /*!< Software Reset flag */
482
#define RCC_FLAG_IWDGRST                 ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_IWDGRSTF))) /*!< Independent Watchdog reset flag */
483
#define RCC_FLAG_WWDGRST                 ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_WWDGRSTF))) /*!< Window watchdog reset flag */
484
#define RCC_FLAG_LPWRRST                 ((uint8_t)((CSR_REG_INDEX << 5) | POSITION_VAL(RCC_CSR_LPWRRSTF))) /*!< Low-Power reset flag */
485
 
486
/* Flags in the BDCR register */
487
#define RCC_FLAG_LSERDY                  ((uint8_t)((BDCR_REG_INDEX << 5) | POSITION_VAL(RCC_BDCR_LSERDY))) /*!< External Low Speed oscillator Ready */
488
 
489
/**
490
  * @}
491
  */
492
 
493
/**
494
  * @}
495
  */
496
 
497
/* Exported macro ------------------------------------------------------------*/
498
 
499
/** @defgroup RCC_Exported_Macros RCC Exported Macros
500
  * @{
501
  */
502
 
503
/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable
504
  * @brief  Enable or disable the AHB1 peripheral clock.
505
  * @note   After reset, the peripheral clock (used for registers read/write access)
506
  *         is disabled and the application software has to enable this clock before
507
  *         using it.  
508
  * @{
509
  */
510
#define __HAL_RCC_DMA1_CLK_ENABLE()   do { \
511
                                        __IO uint32_t tmpreg; \
512
                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\
513
                                        /* Delay after an RCC peripheral clock enabling */\
514
                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\
515
                                        UNUSED(tmpreg); \
516
                                      } while(0)
517
 
518
#define __HAL_RCC_SRAM_CLK_ENABLE()   do { \
519
                                        __IO uint32_t tmpreg; \
520
                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\
521
                                        /* Delay after an RCC peripheral clock enabling */\
522
                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\
523
                                        UNUSED(tmpreg); \
524
                                      } while(0)
525
 
526
#define __HAL_RCC_FLITF_CLK_ENABLE()   do { \
527
                                        __IO uint32_t tmpreg; \
528
                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\
529
                                        /* Delay after an RCC peripheral clock enabling */\
530
                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\
531
                                        UNUSED(tmpreg); \
532
                                      } while(0)
533
 
534
#define __HAL_RCC_CRC_CLK_ENABLE()   do { \
535
                                        __IO uint32_t tmpreg; \
536
                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\
537
                                        /* Delay after an RCC peripheral clock enabling */\
538
                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\
539
                                        UNUSED(tmpreg); \
540
                                      } while(0)
541
 
542
#define __HAL_RCC_DMA1_CLK_DISABLE()      (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN))
543
#define __HAL_RCC_SRAM_CLK_DISABLE()      (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN))
544
#define __HAL_RCC_FLITF_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN))
545
#define __HAL_RCC_CRC_CLK_DISABLE()       (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN))
546
 
547
/**
548
  * @}
549
  */
550
 
551
/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status
552
  * @brief  Get the enable or disable status of the AHB peripheral clock.
553
  * @note   After reset, the peripheral clock (used for registers read/write access)
554
  *         is disabled and the application software has to enable this clock before
555
  *         using it.
556
  * @{
557
  */
558
 
559
#define __HAL_RCC_DMA1_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET)
560
#define __HAL_RCC_DMA1_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET)
561
#define __HAL_RCC_SRAM_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET)
562
#define __HAL_RCC_SRAM_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET)
563
#define __HAL_RCC_FLITF_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET)
564
#define __HAL_RCC_FLITF_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET)
565
#define __HAL_RCC_CRC_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET)
566
#define __HAL_RCC_CRC_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET)
567
 
568
/**
569
  * @}
570
  */
571
 
572
/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable
573
  * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.
574
  * @note   After reset, the peripheral clock (used for registers read/write access)
575
  *         is disabled and the application software has to enable this clock before
576
  *         using it.
577
  * @{  
578
  */
579
#define __HAL_RCC_TIM2_CLK_ENABLE()   do { \
580
                                        __IO uint32_t tmpreg; \
581
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\
582
                                        /* Delay after an RCC peripheral clock enabling */\
583
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\
584
                                        UNUSED(tmpreg); \
585
                                      } while(0)
586
 
587
#define __HAL_RCC_TIM3_CLK_ENABLE()   do { \
588
                                        __IO uint32_t tmpreg; \
589
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
590
                                        /* Delay after an RCC peripheral clock enabling */\
591
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
592
                                        UNUSED(tmpreg); \
593
                                      } while(0)
594
 
595
#define __HAL_RCC_WWDG_CLK_ENABLE()   do { \
596
                                        __IO uint32_t tmpreg; \
597
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\
598
                                        /* Delay after an RCC peripheral clock enabling */\
599
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\
600
                                        UNUSED(tmpreg); \
601
                                      } while(0)
602
 
603
#define __HAL_RCC_USART2_CLK_ENABLE()   do { \
604
                                        __IO uint32_t tmpreg; \
605
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\
606
                                        /* Delay after an RCC peripheral clock enabling */\
607
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\
608
                                        UNUSED(tmpreg); \
609
                                      } while(0)
610
 
611
#define __HAL_RCC_I2C1_CLK_ENABLE()   do { \
612
                                        __IO uint32_t tmpreg; \
613
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\
614
                                        /* Delay after an RCC peripheral clock enabling */\
615
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\
616
                                        UNUSED(tmpreg); \
617
                                      } while(0)
618
 
619
#define __HAL_RCC_BKP_CLK_ENABLE()   do { \
620
                                        __IO uint32_t tmpreg; \
621
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);\
622
                                        /* Delay after an RCC peripheral clock enabling */\
623
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);\
624
                                        UNUSED(tmpreg); \
625
                                      } while(0)
626
 
627
#define __HAL_RCC_PWR_CLK_ENABLE()   do { \
628
                                        __IO uint32_t tmpreg; \
629
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\
630
                                        /* Delay after an RCC peripheral clock enabling */\
631
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\
632
                                        UNUSED(tmpreg); \
633
                                      } while(0)
634
 
635
#define __HAL_RCC_TIM2_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN))
636
#define __HAL_RCC_TIM3_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN))
637
#define __HAL_RCC_WWDG_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))
638
#define __HAL_RCC_USART2_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN))
639
#define __HAL_RCC_I2C1_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN))
640
 
641
#define __HAL_RCC_BKP_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_BKPEN))
642
#define __HAL_RCC_PWR_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN))
643
 
644
/**
645
  * @}
646
  */
647
 
648
/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status
649
  * @brief  Get the enable or disable status of the APB1 peripheral clock.
650
  * @note   After reset, the peripheral clock (used for registers read/write access)
651
  *         is disabled and the application software has to enable this clock before
652
  *         using it.
653
  * @{
654
  */
655
 
656
#define __HAL_RCC_TIM2_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET)
657
#define __HAL_RCC_TIM2_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET)
658
#define __HAL_RCC_TIM3_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET)
659
#define __HAL_RCC_TIM3_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET)
660
#define __HAL_RCC_WWDG_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET)
661
#define __HAL_RCC_WWDG_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET)
662
#define __HAL_RCC_USART2_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET)
663
#define __HAL_RCC_USART2_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET)
664
#define __HAL_RCC_I2C1_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET)
665
#define __HAL_RCC_I2C1_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET)
666
#define __HAL_RCC_BKP_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) != RESET)
667
#define __HAL_RCC_BKP_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) == RESET)
668
#define __HAL_RCC_PWR_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET)
669
#define __HAL_RCC_PWR_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET)
670
 
671
/**
672
  * @}
673
  */
674
 
675
/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable
676
  * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.
677
  * @note   After reset, the peripheral clock (used for registers read/write access)
678
  *         is disabled and the application software has to enable this clock before
679
  *         using it.
680
  * @{  
681
  */
682
#define __HAL_RCC_AFIO_CLK_ENABLE()   do { \
683
                                        __IO uint32_t tmpreg; \
684
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);\
685
                                        /* Delay after an RCC peripheral clock enabling */\
686
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);\
687
                                        UNUSED(tmpreg); \
688
                                      } while(0)
689
 
690
#define __HAL_RCC_GPIOA_CLK_ENABLE()   do { \
691
                                        __IO uint32_t tmpreg; \
692
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);\
693
                                        /* Delay after an RCC peripheral clock enabling */\
694
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);\
695
                                        UNUSED(tmpreg); \
696
                                      } while(0)
697
 
698
#define __HAL_RCC_GPIOB_CLK_ENABLE()   do { \
699
                                        __IO uint32_t tmpreg; \
700
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);\
701
                                        /* Delay after an RCC peripheral clock enabling */\
702
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);\
703
                                        UNUSED(tmpreg); \
704
                                      } while(0)
705
 
706
#define __HAL_RCC_GPIOC_CLK_ENABLE()   do { \
707
                                        __IO uint32_t tmpreg; \
708
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\
709
                                        /* Delay after an RCC peripheral clock enabling */\
710
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\
711
                                        UNUSED(tmpreg); \
712
                                      } while(0)
713
 
714
#define __HAL_RCC_GPIOD_CLK_ENABLE()   do { \
715
                                        __IO uint32_t tmpreg; \
716
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\
717
                                        /* Delay after an RCC peripheral clock enabling */\
718
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\
719
                                        UNUSED(tmpreg); \
720
                                      } while(0)
721
 
722
#define __HAL_RCC_ADC1_CLK_ENABLE()   do { \
723
                                        __IO uint32_t tmpreg; \
724
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\
725
                                        /* Delay after an RCC peripheral clock enabling */\
726
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\
727
                                        UNUSED(tmpreg); \
728
                                      } while(0)
729
 
730
#define __HAL_RCC_TIM1_CLK_ENABLE()   do { \
731
                                        __IO uint32_t tmpreg; \
732
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\
733
                                        /* Delay after an RCC peripheral clock enabling */\
734
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\
735
                                        UNUSED(tmpreg); \
736
                                      } while(0)
737
 
738
#define __HAL_RCC_SPI1_CLK_ENABLE()   do { \
739
                                        __IO uint32_t tmpreg; \
740
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\
741
                                        /* Delay after an RCC peripheral clock enabling */\
742
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\
743
                                        UNUSED(tmpreg); \
744
                                      } while(0)
745
 
746
#define __HAL_RCC_USART1_CLK_ENABLE()   do { \
747
                                        __IO uint32_t tmpreg; \
748
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\
749
                                        /* Delay after an RCC peripheral clock enabling */\
750
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\
751
                                        UNUSED(tmpreg); \
752
                                      } while(0)
753
 
754
#define __HAL_RCC_AFIO_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_AFIOEN))
755
#define __HAL_RCC_GPIOA_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPAEN))
756
#define __HAL_RCC_GPIOB_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPBEN))
757
#define __HAL_RCC_GPIOC_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPCEN))
758
#define __HAL_RCC_GPIOD_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPDEN))
759
#define __HAL_RCC_ADC1_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN))
760
 
761
#define __HAL_RCC_TIM1_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN))
762
#define __HAL_RCC_SPI1_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN))
763
#define __HAL_RCC_USART1_CLK_DISABLE()    (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN))
764
 
765
/**
766
  * @}
767
  */
768
 
769
/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status
770
  * @brief  Get the enable or disable status of the APB2 peripheral clock.
771
  * @note   After reset, the peripheral clock (used for registers read/write access)
772
  *         is disabled and the application software has to enable this clock before
773
  *         using it.
774
  * @{
775
  */
776
 
777
#define __HAL_RCC_AFIO_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) != RESET)
778
#define __HAL_RCC_AFIO_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) == RESET)
779
#define __HAL_RCC_GPIOA_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) != RESET)
780
#define __HAL_RCC_GPIOA_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) == RESET)
781
#define __HAL_RCC_GPIOB_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) != RESET)
782
#define __HAL_RCC_GPIOB_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) == RESET)
783
#define __HAL_RCC_GPIOC_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) != RESET)
784
#define __HAL_RCC_GPIOC_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) == RESET)
785
#define __HAL_RCC_GPIOD_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) != RESET)
786
#define __HAL_RCC_GPIOD_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) == RESET)
787
#define __HAL_RCC_ADC1_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET)
788
#define __HAL_RCC_ADC1_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET)
789
#define __HAL_RCC_TIM1_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET)
790
#define __HAL_RCC_TIM1_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET)
791
#define __HAL_RCC_SPI1_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET)
792
#define __HAL_RCC_SPI1_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET)
793
#define __HAL_RCC_USART1_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET)
794
#define __HAL_RCC_USART1_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET)
795
 
796
/**
797
  * @}
798
  */
799
 
800
/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset
801
  * @brief  Force or release APB1 peripheral reset.
802
  * @{  
803
  */
5 mjames 804
#define __HAL_RCC_APB1_FORCE_RESET()       (RCC->APB2RSTR = 0xFFFFFFFFU)  
2 mjames 805
#define __HAL_RCC_TIM2_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST))
806
#define __HAL_RCC_TIM3_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST))
807
#define __HAL_RCC_WWDG_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))
808
#define __HAL_RCC_USART2_FORCE_RESET()     (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST))
809
#define __HAL_RCC_I2C1_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST))
810
 
811
#define __HAL_RCC_BKP_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_BKPRST))
812
#define __HAL_RCC_PWR_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))
813
 
814
#define __HAL_RCC_APB1_RELEASE_RESET()      (RCC->APB1RSTR = 0x00)  
815
#define __HAL_RCC_TIM2_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST))
816
#define __HAL_RCC_TIM3_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST))
817
#define __HAL_RCC_WWDG_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))
818
#define __HAL_RCC_USART2_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST))
819
#define __HAL_RCC_I2C1_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST))
820
 
821
#define __HAL_RCC_BKP_RELEASE_RESET()        (RCC->APB1RSTR &= ~(RCC_APB1RSTR_BKPRST))
822
#define __HAL_RCC_PWR_RELEASE_RESET()        (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))
823
 
824
/**
825
  * @}
826
  */
827
 
828
/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset
829
  * @brief  Force or release APB2 peripheral reset.
830
  * @{  
831
  */
5 mjames 832
#define __HAL_RCC_APB2_FORCE_RESET()       (RCC->APB2RSTR = 0xFFFFFFFFU)  
2 mjames 833
#define __HAL_RCC_AFIO_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_AFIORST))
834
#define __HAL_RCC_GPIOA_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPARST))
835
#define __HAL_RCC_GPIOB_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPBRST))
836
#define __HAL_RCC_GPIOC_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPCRST))
837
#define __HAL_RCC_GPIOD_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPDRST))
838
#define __HAL_RCC_ADC1_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST))
839
 
840
#define __HAL_RCC_TIM1_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST))
841
#define __HAL_RCC_SPI1_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST))
842
#define __HAL_RCC_USART1_FORCE_RESET()     (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST))
843
 
844
#define __HAL_RCC_APB2_RELEASE_RESET()      (RCC->APB2RSTR = 0x00)  
845
#define __HAL_RCC_AFIO_RELEASE_RESET()       (RCC->APB2RSTR &= ~(RCC_APB2RSTR_AFIORST))
846
#define __HAL_RCC_GPIOA_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPARST))
847
#define __HAL_RCC_GPIOB_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPBRST))
848
#define __HAL_RCC_GPIOC_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPCRST))
849
#define __HAL_RCC_GPIOD_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPDRST))
850
#define __HAL_RCC_ADC1_RELEASE_RESET()       (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST))
851
 
852
#define __HAL_RCC_TIM1_RELEASE_RESET()       (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST))
853
#define __HAL_RCC_SPI1_RELEASE_RESET()       (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST))
854
#define __HAL_RCC_USART1_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST))
855
 
856
/**
857
  * @}
858
  */
859
 
860
/** @defgroup RCC_HSI_Configuration HSI Configuration
861
  * @{  
862
  */
863
 
864
/** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).
865
  * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.
866
  * @note   HSI can not be stopped if it is used as system clock source. In this case,
867
  *         you have to select another source of the system clock then stop the HSI.  
868
  * @note   After enabling the HSI, the application software should wait on HSIRDY
869
  *         flag to be set indicating that HSI clock is stable and can be used as
870
  *         system clock source.  
871
  * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator
872
  *         clock cycles.  
873
  */
874
#define __HAL_RCC_HSI_ENABLE()  (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE)
875
#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE)
876
 
877
/** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.
878
  * @note   The calibration is used to compensate for the variations in voltage
879
  *         and temperature that influence the frequency of the internal HSI RC.
880
  * @param  _HSICALIBRATIONVALUE_ specifies the calibration trimming value.
881
  *         (default is RCC_HSICALIBRATION_DEFAULT).
882
  *         This parameter must be a number between 0 and 0x1F.
883
  */  
884
#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) \
885
          (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << POSITION_VAL(RCC_CR_HSITRIM)))
886
 
887
/**
888
  * @}
889
  */
890
 
891
/** @defgroup RCC_LSI_Configuration  LSI Configuration
892
  * @{  
893
  */
894
 
895
/** @brief Macro to enable the Internal Low Speed oscillator (LSI).
896
  * @note   After enabling the LSI, the application software should wait on
897
  *         LSIRDY flag to be set indicating that LSI clock is stable and can
898
  *         be used to clock the IWDG and/or the RTC.
899
  */
900
#define __HAL_RCC_LSI_ENABLE()  (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE)
901
 
902
/** @brief Macro to disable the Internal Low Speed oscillator (LSI).
903
  * @note   LSI can not be disabled if the IWDG is running.  
904
  * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator
905
  *         clock cycles.
906
  */
907
#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE)
908
 
909
/**
910
  * @}
911
  */
912
 
913
/** @defgroup RCC_HSE_Configuration HSE Configuration
914
  * @{  
915
  */
916
 
917
/**
918
  * @brief  Macro to configure the External High Speed oscillator (HSE).
919
  * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not
920
  *         supported by this macro. User should request a transition to HSE Off
921
  *         first and then HSE On or HSE Bypass.
922
  * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application
923
  *         software should wait on HSERDY flag to be set indicating that HSE clock
924
  *         is stable and can be used to clock the PLL and/or system clock.
925
  * @note   HSE state can not be changed if it is used directly or through the
926
  *         PLL as system clock. In this case, you have to select another source
927
  *         of the system clock then change the HSE state (ex. disable it).
928
  * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.
5 mjames 929
  * @note   This function reset the CSSON bit, so if the clock security system(CSS)
2 mjames 930
  *         was previously enabled you have to enable it again after calling this
931
  *         function.
932
  * @param  __STATE__ specifies the new state of the HSE.
933
  *          This parameter can be one of the following values:
5 mjames 934
  *            @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after
2 mjames 935
  *                              6 HSE oscillator clock cycles.
5 mjames 936
  *            @arg @ref RCC_HSE_ON turn ON the HSE oscillator
937
  *            @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock
2 mjames 938
  */
939
#define __HAL_RCC_HSE_CONFIG(__STATE__)                                     \
940
                    do{                                                     \
941
                      if ((__STATE__) == RCC_HSE_ON)                        \
942
                      {                                                     \
943
                        SET_BIT(RCC->CR, RCC_CR_HSEON);                     \
944
                      }                                                     \
945
                      else if ((__STATE__) == RCC_HSE_OFF)                  \
946
                      {                                                     \
947
                        CLEAR_BIT(RCC->CR, RCC_CR_HSEON);                   \
948
                        CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);                  \
949
                      }                                                     \
950
                      else if ((__STATE__) == RCC_HSE_BYPASS)               \
951
                      {                                                     \
952
                        SET_BIT(RCC->CR, RCC_CR_HSEBYP);                    \
953
                        SET_BIT(RCC->CR, RCC_CR_HSEON);                     \
954
                      }                                                     \
955
                      else                                                  \
956
                      {                                                     \
957
                        CLEAR_BIT(RCC->CR, RCC_CR_HSEON);                   \
958
                        CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);                  \
959
                      }                                                     \
960
                    }while(0)
961
 
962
/**
963
  * @}
964
  */
965
 
966
/** @defgroup RCC_LSE_Configuration LSE Configuration
967
  * @{  
968
  */
969
 
970
/**
971
  * @brief  Macro to configure the External Low Speed oscillator (LSE).
972
  * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro.
973
  * @note   As the LSE is in the Backup domain and write access is denied to
974
  *         this domain after reset, you have to enable write access using
975
  *         @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE
976
  *         (to be done once after reset).  
977
  * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application
978
  *         software should wait on LSERDY flag to be set indicating that LSE clock
979
  *         is stable and can be used to clock the RTC.
980
  * @param  __STATE__ specifies the new state of the LSE.
981
  *         This parameter can be one of the following values:
5 mjames 982
  *            @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after
2 mjames 983
  *                              6 LSE oscillator clock cycles.
5 mjames 984
  *            @arg @ref RCC_LSE_ON turn ON the LSE oscillator.
985
  *            @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock.
2 mjames 986
  */
987
#define __HAL_RCC_LSE_CONFIG(__STATE__)                                     \
988
                    do{                                                     \
989
                      if ((__STATE__) == RCC_LSE_ON)                        \
990
                      {                                                     \
991
                        SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);                   \
992
                      }                                                     \
993
                      else if ((__STATE__) == RCC_LSE_OFF)                  \
994
                      {                                                     \
995
                        CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);                 \
996
                        CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);                \
997
                      }                                                     \
998
                      else if ((__STATE__) == RCC_LSE_BYPASS)               \
999
                      {                                                     \
1000
                        SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);                  \
1001
                        SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);                   \
1002
                      }                                                     \
1003
                      else                                                  \
1004
                      {                                                     \
1005
                        CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);                 \
1006
                        CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);                \
1007
                      }                                                     \
1008
                    }while(0)
1009
 
1010
/**
1011
  * @}
1012
  */
1013
 
1014
/** @defgroup RCC_PLL_Configuration PLL Configuration
1015
  * @{  
1016
  */
1017
 
1018
/** @brief Macro to enable the main PLL.
1019
  * @note   After enabling the main PLL, the application software should wait on
1020
  *         PLLRDY flag to be set indicating that PLL clock is stable and can
1021
  *         be used as system clock source.
1022
  * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.
1023
  */
1024
#define __HAL_RCC_PLL_ENABLE()          (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE)
1025
 
1026
/** @brief Macro to disable the main PLL.
1027
  * @note   The main PLL can not be disabled if it is used as system clock source
1028
  */
1029
#define __HAL_RCC_PLL_DISABLE()         (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE)
1030
 
1031
/** @brief Macro to configure the main PLL clock source and multiplication factors.
1032
  * @note   This function must be used only when the main PLL is disabled.
1033
  *  
1034
  * @param  __RCC_PLLSOURCE__ specifies the PLL entry clock source.
1035
  *          This parameter can be one of the following values:
5 mjames 1036
  *            @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL clock entry
1037
  *            @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry
2 mjames 1038
  * @param  __PLLMUL__ specifies the multiplication factor for PLL VCO output clock
1039
  *          This parameter can be one of the following values:
5 mjames 1040
  *             @arg @ref RCC_PLL_MUL4   PLLVCO = PLL clock entry x 4
1041
  *             @arg @ref RCC_PLL_MUL6   PLLVCO = PLL clock entry x 6
1042
  @if STM32F105xC
1043
  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5
1044
  @elseif STM32F107xC
1045
  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5
1046
  @else
1047
  *             @arg @ref RCC_PLL_MUL2   PLLVCO = PLL clock entry x 2
1048
  *             @arg @ref RCC_PLL_MUL3   PLLVCO = PLL clock entry x 3
1049
  *             @arg @ref RCC_PLL_MUL10  PLLVCO = PLL clock entry x 10
1050
  *             @arg @ref RCC_PLL_MUL11  PLLVCO = PLL clock entry x 11
1051
  *             @arg @ref RCC_PLL_MUL12  PLLVCO = PLL clock entry x 12
1052
  *             @arg @ref RCC_PLL_MUL13  PLLVCO = PLL clock entry x 13
1053
  *             @arg @ref RCC_PLL_MUL14  PLLVCO = PLL clock entry x 14
1054
  *             @arg @ref RCC_PLL_MUL15  PLLVCO = PLL clock entry x 15
1055
  *             @arg @ref RCC_PLL_MUL16  PLLVCO = PLL clock entry x 16
1056
  @endif
1057
  *             @arg @ref RCC_PLL_MUL8   PLLVCO = PLL clock entry x 8
1058
  *             @arg @ref RCC_PLL_MUL9   PLLVCO = PLL clock entry x 9
2 mjames 1059
  *  
1060
  */
1061
#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__)\
1062
          MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL),((__RCC_PLLSOURCE__) | (__PLLMUL__) ))
1063
 
1064
/** @brief  Get oscillator clock selected as PLL input clock
1065
  * @retval The clock source used for PLL entry. The returned value can be one
1066
  *         of the following:
5 mjames 1067
  *             @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL input clock
1068
  *             @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock
2 mjames 1069
  */
1070
#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)))
1071
 
1072
/**
1073
  * @}
1074
  */
1075
 
1076
/** @defgroup RCC_Get_Clock_source Get Clock source
1077
  * @{  
1078
  */
1079
 
1080
/**
1081
  * @brief  Macro to configure the system clock source.
5 mjames 1082
  * @param  __SYSCLKSOURCE__ specifies the system clock source.
2 mjames 1083
  *          This parameter can be one of the following values:
5 mjames 1084
  *              @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source.
1085
  *              @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source.
1086
  *              @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source.
2 mjames 1087
  */
5 mjames 1088
#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) \
1089
                  MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__))
2 mjames 1090
 
1091
/** @brief  Macro to get the clock source used as system clock.
1092
  * @retval The clock source used as system clock. The returned value can be one
1093
  *         of the following:
5 mjames 1094
  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock
1095
  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock
1096
  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock
2 mjames 1097
  */
1098
#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR,RCC_CFGR_SWS)))
1099
 
1100
/**
1101
  * @}
1102
  */
1103
 
1104
/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config
1105
  * @{  
1106
  */
1107
 
1108
#if   defined(RCC_CFGR_MCO_3)
1109
/** @brief  Macro to configure the MCO clock.
1110
  * @param  __MCOCLKSOURCE__ specifies the MCO clock source.
1111
  *         This parameter can be one of the following values:
5 mjames 1112
  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK      No clock selected as MCO clock
1113
  *            @arg @ref RCC_MCO1SOURCE_SYSCLK       System clock (SYSCLK) selected as MCO clock
1114
  *            @arg @ref RCC_MCO1SOURCE_HSI          HSI selected as MCO clock
1115
  *            @arg @ref RCC_MCO1SOURCE_HSE          HSE selected as MCO clock
1116
  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO clock
1117
  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected by 2 selected as MCO clock
1118
  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO clock
1119
  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected (for Ethernet) as MCO clock
1120
  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected (for Ethernet) as MCO clock
2 mjames 1121
  * @param  __MCODIV__ specifies the MCO clock prescaler.
1122
  *         This parameter can be one of the following values:
5 mjames 1123
  *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source
2 mjames 1124
  */
1125
#else
1126
/** @brief  Macro to configure the MCO clock.
1127
  * @param  __MCOCLKSOURCE__ specifies the MCO clock source.
1128
  *         This parameter can be one of the following values:
5 mjames 1129
  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock
1130
  *            @arg @ref RCC_MCO1SOURCE_SYSCLK  System clock (SYSCLK) selected as MCO clock
1131
  *            @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock
1132
  *            @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock
1133
  *            @arg @ref RCC_MCO1SOURCE_PLLCLK  PLL clock divided by 2 selected as MCO clock
2 mjames 1134
  * @param  __MCODIV__ specifies the MCO clock prescaler.
1135
  *         This parameter can be one of the following values:
5 mjames 1136
  *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source
2 mjames 1137
  */
1138
#endif
1139
 
1140
#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \
1141
                 MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__))
1142
 
1143
 
1144
/**
1145
  * @}
1146
  */
1147
 
1148
  /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration
1149
  * @{  
1150
  */
1151
 
1152
/** @brief Macro to configure the RTC clock (RTCCLK).
1153
  * @note   As the RTC clock configuration bits are in the Backup domain and write
1154
  *         access is denied to this domain after reset, you have to enable write
1155
  *         access using the Power Backup Access macro before to configure
1156
  *         the RTC clock source (to be done once after reset).    
1157
  * @note   Once the RTC clock is configured it can't be changed unless the  
1158
  *         Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by
1159
  *         a Power On Reset (POR).
1160
  *
1161
  * @param  __RTC_CLKSOURCE__ specifies the RTC clock source.
1162
  *          This parameter can be one of the following values:
5 mjames 1163
  *             @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock
1164
  *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock
1165
  *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock
1166
  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock
2 mjames 1167
  * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to
1168
  *         work in STOP and STANDBY modes, and can be used as wakeup source.
1169
  *         However, when the HSE clock is used as RTC clock source, the RTC
1170
  *         cannot be used in STOP and STANDBY modes.    
1171
  * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as
1172
  *         RTC clock source).
1173
  */
1174
#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__))
1175
 
1176
/** @brief Macro to get the RTC clock source.
1177
  * @retval The clock source can be one of the following values:
5 mjames 1178
  *            @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock
1179
  *            @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock
1180
  *            @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock
1181
  *            @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock
2 mjames 1182
  */
1183
#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL))
1184
 
1185
/** @brief Macro to enable the the RTC clock.
1186
  * @note   These macros must be used only after the RTC clock source was selected.
1187
  */
1188
#define __HAL_RCC_RTC_ENABLE()          (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = ENABLE)
1189
 
1190
/** @brief Macro to disable the the RTC clock.
1191
  * @note  These macros must be used only after the RTC clock source was selected.
1192
  */
1193
#define __HAL_RCC_RTC_DISABLE()         (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = DISABLE)
1194
 
1195
/** @brief  Macro to force the Backup domain reset.
1196
  * @note   This function resets the RTC peripheral (including the backup registers)
1197
  *         and the RTC clock source selection in RCC_BDCR register.
1198
  */
1199
#define __HAL_RCC_BACKUPRESET_FORCE()   (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = ENABLE)
1200
 
1201
/** @brief  Macros to release the Backup domain reset.
1202
  */
1203
#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = DISABLE)
1204
 
1205
/**
1206
  * @}
1207
  */
1208
 
1209
/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management
1210
  * @brief macros to manage the specified RCC Flags and interrupts.
1211
  * @{
1212
  */
1213
 
1214
/** @brief Enable RCC interrupt.
1215
  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be enabled.
1216
  *          This parameter can be any combination of the following values:
5 mjames 1217
  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt
1218
  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt
1219
  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt
1220
  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt
1221
  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt
1222
  @if STM32F105xx
1223
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1224
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1225
  @elsif STM32F107xx
1226
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1227
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1228
  @endif
2 mjames 1229
  */
1230
#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))
1231
 
1232
/** @brief Disable RCC interrupt.
1233
  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be disabled.
1234
  *          This parameter can be any combination of the following values:
5 mjames 1235
  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt
1236
  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt
1237
  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt
1238
  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt
1239
  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt
1240
  @if STM32F105xx
1241
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1242
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1243
  @elsif STM32F107xx
1244
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1245
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1246
  @endif
2 mjames 1247
  */
5 mjames 1248
#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__)))
2 mjames 1249
 
1250
/** @brief Clear the RCC's interrupt pending bits.
1251
  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.
1252
  *          This parameter can be any combination of the following values:
5 mjames 1253
  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.
1254
  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.
1255
  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.
1256
  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.
1257
  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.
1258
  @if STM32F105xx
1259
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1260
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1261
  @elsif STM32F107xx
1262
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1263
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1264
  @endif
1265
  *            @arg @ref RCC_IT_CSS Clock Security System interrupt
2 mjames 1266
  */
1267
#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))
1268
 
1269
/** @brief Check the RCC's interrupt has occurred or not.
1270
  * @param  __INTERRUPT__ specifies the RCC interrupt source to check.
1271
  *          This parameter can be one of the following values:
5 mjames 1272
  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.
1273
  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.
1274
  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.
1275
  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.
1276
  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.
1277
  @if STM32F105xx
1278
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1279
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1280
  @elsif STM32F107xx
1281
  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.
1282
  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.
1283
  @endif
1284
  *            @arg @ref RCC_IT_CSS Clock Security System interrupt
2 mjames 1285
  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).
1286
  */
1287
#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))
1288
 
1289
/** @brief Set RMVF bit to clear the reset flags.
1290
  *         The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST,
1291
  *         RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST
1292
  */
1293
#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE)
1294
 
1295
/** @brief  Check RCC flag is set or not.
1296
  * @param  __FLAG__ specifies the flag to check.
1297
  *          This parameter can be one of the following values:
5 mjames 1298
  *            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.
1299
  *            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.
1300
  *            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.
1301
  @if STM32F105xx
1302
  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.
1303
  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.
1304
  @elsif STM32F107xx
1305
  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.
1306
  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.
1307
  @endif
1308
  *            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.
1309
  *            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.
1310
  *            @arg @ref RCC_FLAG_PINRST  Pin reset.
1311
  *            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.
1312
  *            @arg @ref RCC_FLAG_SFTRST  Software reset.
1313
  *            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.
1314
  *            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.
1315
  *            @arg @ref RCC_FLAG_LPWRRST Low Power reset.
2 mjames 1316
  * @retval The new state of __FLAG__ (TRUE or FALSE).
1317
  */
1318
#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5) == CR_REG_INDEX)?   RCC->CR   : \
1319
                                      ((((__FLAG__) >> 5) == BDCR_REG_INDEX)? RCC->BDCR : \
5 mjames 1320
                                                                              RCC->CSR)) & ((uint32_t)1 << ((__FLAG__) & RCC_FLAG_MASK)))
2 mjames 1321
 
1322
/**
1323
  * @}
1324
  */
1325
 
1326
/**
1327
  * @}
1328
  */
1329
 
1330
/* Include RCC HAL Extension module */
1331
#include "stm32f1xx_hal_rcc_ex.h"
1332
 
1333
/* Exported functions --------------------------------------------------------*/
1334
/** @addtogroup RCC_Exported_Functions
1335
  * @{
1336
  */
1337
 
1338
/** @addtogroup RCC_Exported_Functions_Group1
1339
  * @{
1340
  */
1341
 
1342
/* Initialization and de-initialization functions  ******************************/
1343
void              HAL_RCC_DeInit(void);
1344
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct);
1345
HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency);
1346
 
1347
/**
1348
  * @}
1349
  */
1350
 
1351
/** @addtogroup RCC_Exported_Functions_Group2
1352
  * @{
1353
  */
1354
 
1355
/* Peripheral Control functions  ************************************************/
1356
void              HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);
1357
void              HAL_RCC_EnableCSS(void);
1358
void              HAL_RCC_DisableCSS(void);
1359
uint32_t          HAL_RCC_GetSysClockFreq(void);
1360
uint32_t          HAL_RCC_GetHCLKFreq(void);
1361
uint32_t          HAL_RCC_GetPCLK1Freq(void);
1362
uint32_t          HAL_RCC_GetPCLK2Freq(void);
1363
void              HAL_RCC_GetOscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct);
1364
void              HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t *pFLatency);
1365
 
1366
/* CSS NMI IRQ handler */
1367
void              HAL_RCC_NMI_IRQHandler(void);
1368
 
1369
/* User Callbacks in non blocking mode (IT mode) */
1370
void              HAL_RCC_CSSCallback(void);
1371
 
1372
/**
1373
  * @}
1374
  */
1375
 
1376
/**
1377
  * @}
1378
  */
1379
 
1380
/**
1381
  * @}
1382
  */
1383
 
1384
/**
1385
  * @}
1386
  */
1387
 
1388
#ifdef __cplusplus
1389
}
1390
#endif
1391
 
1392
#endif /* __STM32F1xx_HAL_RCC_H */
1393
 
1394
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1395