DSO138_SourceCodes_v037.rar
[DSO138] / Libraries / CMSIS / CM3 / DeviceSupport / ST / STM32F10x / system_stm32f10x.c
1 /**\r
2   ******************************************************************************\r
3   * @file    system_stm32f10x.c\r
4   * @author  MCD Application Team\r
5   * @version V3.3.0\r
6   * @date    04/16/2010\r
7   * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.\r
8   ******************************************************************************  \r
9   *\r
10   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
11   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
12   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
13   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
14   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
15   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
16   *\r
17   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
18   ******************************************************************************\r
19   */\r
20 \r
21 /** @addtogroup CMSIS\r
22   * @{\r
23   */\r
24 \r
25 /** @addtogroup stm32f10x_system\r
26   * @{\r
27   */  \r
28   \r
29 /** @addtogroup STM32F10x_System_Private_Includes\r
30   * @{\r
31   */\r
32 \r
33 #include "stm32f10x.h"\r
34 \r
35 /**\r
36   * @}\r
37   */\r
38 \r
39 /** @addtogroup STM32F10x_System_Private_TypesDefinitions\r
40   * @{\r
41   */\r
42 \r
43 /**\r
44   * @}\r
45   */\r
46 \r
47 /** @addtogroup STM32F10x_System_Private_Defines\r
48   * @{\r
49   */\r
50 \r
51 /*!< Uncomment the line corresponding to the desired System clock (SYSCLK)\r
52    frequency (after reset the HSI is used as SYSCLK source)\r
53    \r
54    IMPORTANT NOTE:\r
55    ============== \r
56    1. After each device reset the HSI is used as System clock source.\r
57 \r
58    2. Please make sure that the selected System clock doesn't exceed your device's\r
59       maximum frequency.\r
60       \r
61    3. If none of the define below is enabled, the HSI is used as System clock\r
62     source.\r
63 \r
64    4. The System clock configuration functions provided within this file assume that:\r
65         - For Low and Medium density Value line devices an external 8MHz crystal \r
66           is used to drive the System clock.\r
67         - For Low, Medium and High density devices an external 8MHz crystal is\r
68           used to drive the System clock.\r
69         - For Connectivity line devices an external 25MHz crystal is used to drive\r
70           the System clock.\r
71      If you are using different crystal you have to adapt those functions accordingly.\r
72     */\r
73     \r
74 #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) \r
75 /* #define SYSCLK_FREQ_HSE    HSE_Value */\r
76  #define SYSCLK_FREQ_24MHz  24000000\r
77 #else\r
78 /* #define SYSCLK_FREQ_HSE    HSE_Value */\r
79 /* #define SYSCLK_FREQ_24MHz  24000000 */ \r
80 /* #define SYSCLK_FREQ_36MHz  36000000 */\r
81 /* #define SYSCLK_FREQ_48MHz  48000000 */\r
82 /* #define SYSCLK_FREQ_56MHz  56000000 */\r
83 #define SYSCLK_FREQ_72MHz  72000000\r
84 #endif\r
85 \r
86 /*!< Uncomment the following line if you need to use external SRAM mounted\r
87      on STM3210E-EVAL board (STM32 High density and XL-density devices) as data memory  */ \r
88 #if defined (STM32F10X_HD) || (defined STM32F10X_XL)\r
89 /* #define DATA_IN_ExtSRAM */\r
90 #endif\r
91 \r
92 /**\r
93   * @}\r
94   */\r
95 \r
96 /** @addtogroup STM32F10x_System_Private_Macros\r
97   * @{\r
98   */\r
99 \r
100 /**\r
101   * @}\r
102   */\r
103 \r
104 /** @addtogroup STM32F10x_System_Private_Variables\r
105   * @{\r
106   */\r
107 \r
108 /*******************************************************************************\r
109 *  Clock Definitions\r
110 *******************************************************************************/\r
111 #ifdef SYSCLK_FREQ_HSE\r
112   uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */\r
113 #elif defined SYSCLK_FREQ_24MHz\r
114   uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */\r
115 #elif defined SYSCLK_FREQ_36MHz\r
116   uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */\r
117 #elif defined SYSCLK_FREQ_48MHz\r
118   uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */\r
119 #elif defined SYSCLK_FREQ_56MHz\r
120   uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */\r
121 #elif defined SYSCLK_FREQ_72MHz\r
122   uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */\r
123 #else /*!< HSI Selected as System Clock source */\r
124   uint32_t SystemCoreClock         = HSI_Value;        /*!< System Clock Frequency (Core Clock) */\r
125 #endif\r
126 \r
127 __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};\r
128 /**\r
129   * @}\r
130   */\r
131 \r
132 /** @addtogroup STM32F10x_System_Private_FunctionPrototypes\r
133   * @{\r
134   */\r
135 \r
136 static void SetSysClock(void);\r
137 \r
138 #ifdef SYSCLK_FREQ_HSE\r
139   static void SetSysClockToHSE(void);\r
140 #elif defined SYSCLK_FREQ_24MHz\r
141   static void SetSysClockTo24(void);\r
142 #elif defined SYSCLK_FREQ_36MHz\r
143   static void SetSysClockTo36(void);\r
144 #elif defined SYSCLK_FREQ_48MHz\r
145   static void SetSysClockTo48(void);\r
146 #elif defined SYSCLK_FREQ_56MHz\r
147   static void SetSysClockTo56(void);  \r
148 #elif defined SYSCLK_FREQ_72MHz\r
149   static void SetSysClockTo72(void);\r
150 #endif\r
151 \r
152 #ifdef DATA_IN_ExtSRAM\r
153   static void SystemInit_ExtMemCtl(void); \r
154 #endif /* DATA_IN_ExtSRAM */\r
155 \r
156 /**\r
157   * @}\r
158   */\r
159 \r
160 /** @addtogroup STM32F10x_System_Private_Functions\r
161   * @{\r
162   */\r
163 \r
164 /**\r
165   * @brief  Setup the microcontroller system\r
166   *         Initialize the Embedded Flash Interface, the PLL and update the \r
167   *         SystemCoreClock variable.\r
168   * @note   This function should be used only after reset.\r
169   * @param  None\r
170   * @retval None\r
171   */\r
172 void SystemInit (void)\r
173 {\r
174   /* Reset the RCC clock configuration to the default reset state(for debug purpose) */\r
175   /* Set HSION bit */\r
176   RCC->CR |= (uint32_t)0x00000001;\r
177 \r
178   /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */\r
179 #ifndef STM32F10X_CL\r
180   RCC->CFGR &= (uint32_t)0xF8FF0000;\r
181 #else\r
182   RCC->CFGR &= (uint32_t)0xF0FF0000;\r
183 #endif /* STM32F10X_CL */   \r
184   \r
185   /* Reset HSEON, CSSON and PLLON bits */\r
186   RCC->CR &= (uint32_t)0xFEF6FFFF;\r
187 \r
188   /* Reset HSEBYP bit */\r
189   RCC->CR &= (uint32_t)0xFFFBFFFF;\r
190 \r
191   /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */\r
192   RCC->CFGR &= (uint32_t)0xFF80FFFF;\r
193 \r
194 #ifdef STM32F10X_CL\r
195   /* Reset PLL2ON and PLL3ON bits */\r
196   RCC->CR &= (uint32_t)0xEBFFFFFF;\r
197 \r
198   /* Disable all interrupts and clear pending bits  */\r
199   RCC->CIR = 0x00FF0000;\r
200 \r
201   /* Reset CFGR2 register */\r
202   RCC->CFGR2 = 0x00000000;\r
203 #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) \r
204   /* Disable all interrupts and clear pending bits  */\r
205   RCC->CIR = 0x009F0000;\r
206 \r
207   /* Reset CFGR2 register */\r
208   RCC->CFGR2 = 0x00000000;      \r
209 #else\r
210   /* Disable all interrupts and clear pending bits  */\r
211   RCC->CIR = 0x009F0000;\r
212 #endif /* STM32F10X_CL */\r
213     \r
214 #if defined (STM32F10X_HD) || (defined STM32F10X_XL)\r
215   #ifdef DATA_IN_ExtSRAM\r
216     SystemInit_ExtMemCtl(); \r
217   #endif /* DATA_IN_ExtSRAM */\r
218 #endif \r
219 \r
220   /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */\r
221   /* Configure the Flash Latency cycles and enable prefetch buffer */\r
222   SetSysClock();\r
223 }\r
224 \r
225 /**\r
226   * @brief  Update SystemCoreClock according to Clock Register Values\r
227   * @note   None\r
228   * @param  None\r
229   * @retval None\r
230   */\r
231 void SystemCoreClockUpdate (void)\r
232 {\r
233   uint32_t tmp = 0, pllmull = 0, pllsource = 0;\r
234 \r
235 #ifdef  STM32F10X_CL\r
236   uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0;\r
237 #endif /* STM32F10X_CL */\r
238 \r
239 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)\r
240   uint32_t prediv1factor = 0;\r
241 #endif /* STM32F10X_LD_VL or STM32F10X_MD_VL */\r
242     \r
243   /* Get SYSCLK source -------------------------------------------------------*/\r
244   tmp = RCC->CFGR & RCC_CFGR_SWS;\r
245   \r
246   switch (tmp)\r
247   {\r
248     case 0x00:  /* HSI used as system clock */\r
249       SystemCoreClock = HSI_Value;\r
250       break;\r
251     case 0x04:  /* HSE used as system clock */\r
252       SystemCoreClock = HSE_Value;\r
253       break;\r
254     case 0x08:  /* PLL used as system clock */\r
255 \r
256       /* Get PLL clock source and multiplication factor ----------------------*/\r
257       pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;\r
258       pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;\r
259       \r
260 #ifndef STM32F10X_CL      \r
261       pllmull = ( pllmull >> 18) + 2;\r
262       \r
263       if (pllsource == 0x00)\r
264       {\r
265         /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r
266         SystemCoreClock = (HSI_Value >> 1) * pllmull;\r
267       }\r
268       else\r
269       {\r
270  #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)\r
271        prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;\r
272        /* HSE oscillator clock selected as PREDIV1 clock entry */\r
273        SystemCoreClock = (HSE_Value / prediv1factor) * pllmull; \r
274  #else\r
275         /* HSE selected as PLL clock entry */\r
276         if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)\r
277         {/* HSE oscillator clock divided by 2 */\r
278           SystemCoreClock = (HSE_Value >> 1) * pllmull;\r
279         }\r
280         else\r
281         {\r
282           SystemCoreClock = HSE_Value * pllmull;\r
283         }\r
284  #endif\r
285       }\r
286 #else\r
287       pllmull = pllmull >> 18;\r
288       \r
289       if (pllmull != 0x0D)\r
290       {\r
291          pllmull += 2;\r
292       }\r
293       else\r
294       { /* PLL multiplication factor = PLL input clock * 6.5 */\r
295         pllmull = 13 / 2; \r
296       }\r
297             \r
298       if (pllsource == 0x00)\r
299       {\r
300         /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r
301         SystemCoreClock = (HSI_Value >> 1) * pllmull;\r
302       }\r
303       else\r
304       {/* PREDIV1 selected as PLL clock entry */\r
305         \r
306         /* Get PREDIV1 clock source and division factor */\r
307         prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;\r
308         prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;\r
309         \r
310         if (prediv1source == 0)\r
311         { \r
312           /* HSE oscillator clock selected as PREDIV1 clock entry */\r
313           SystemCoreClock = (HSE_Value / prediv1factor) * pllmull;          \r
314         }\r
315         else\r
316         {/* PLL2 clock selected as PREDIV1 clock entry */\r
317           \r
318           /* Get PREDIV2 division factor and PLL2 multiplication factor */\r
319           prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1;\r
320           pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; \r
321           SystemCoreClock = (((HSE_Value / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                         \r
322         }\r
323       }\r
324 #endif /* STM32F10X_CL */ \r
325       break;\r
326 \r
327     default:\r
328       SystemCoreClock = HSI_Value;\r
329       break;\r
330   }\r
331   \r
332   /* Compute HCLK clock frequency ----------------*/\r
333   /* Get HCLK prescaler */\r
334   tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];\r
335   /* HCLK clock frequency */\r
336   SystemCoreClock >>= tmp;  \r
337 }\r
338 \r
339 /**\r
340   * @brief  Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.\r
341   * @param  None\r
342   * @retval None\r
343   */\r
344 static void SetSysClock(void)\r
345 {\r
346 #ifdef SYSCLK_FREQ_HSE\r
347   SetSysClockToHSE();\r
348 #elif defined SYSCLK_FREQ_24MHz\r
349   SetSysClockTo24();\r
350 #elif defined SYSCLK_FREQ_36MHz\r
351   SetSysClockTo36();\r
352 #elif defined SYSCLK_FREQ_48MHz\r
353   SetSysClockTo48();\r
354 #elif defined SYSCLK_FREQ_56MHz\r
355   SetSysClockTo56();  \r
356 #elif defined SYSCLK_FREQ_72MHz\r
357   SetSysClockTo72();\r
358 #endif\r
359  \r
360  /* If none of the define above is enabled, the HSI is used as System clock\r
361     source (default after reset) */ \r
362 }\r
363 \r
364 /**\r
365   * @brief  Setup the external memory controller. Called in startup_stm32f10x.s \r
366   *          before jump to __main\r
367   * @param  None\r
368   * @retval None\r
369   */ \r
370 #ifdef DATA_IN_ExtSRAM\r
371 /**\r
372   * @brief  Setup the external memory controller. \r
373   *         Called in startup_stm32f10x_xx.s/.c before jump to main.\r
374   *           This function configures the external SRAM mounted on STM3210E-EVAL\r
375   *         board (STM32 High density devices). This SRAM will be used as program\r
376   *         data memory (including heap and stack).\r
377   * @param  None\r
378   * @retval None\r
379   */ \r
380 void SystemInit_ExtMemCtl(void) \r
381 {\r
382 /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is \r
383   required, then adjust the Register Addresses */\r
384 \r
385   /* Enable FSMC clock */\r
386   RCC->AHBENR = 0x00000114;\r
387   \r
388   /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */  \r
389   RCC->APB2ENR = 0x000001E0;\r
390   \r
391 /* ---------------  SRAM Data lines, NOE and NWE configuration ---------------*/\r
392 /*----------------  SRAM Address lines configuration -------------------------*/\r
393 /*----------------  NOE and NWE configuration --------------------------------*/  \r
394 /*----------------  NE3 configuration ----------------------------------------*/\r
395 /*----------------  NBL0, NBL1 configuration ---------------------------------*/\r
396   \r
397   GPIOD->CRL = 0x44BB44BB;  \r
398   GPIOD->CRH = 0xBBBBBBBB;\r
399 \r
400   GPIOE->CRL = 0xB44444BB;  \r
401   GPIOE->CRH = 0xBBBBBBBB;\r
402 \r
403   GPIOF->CRL = 0x44BBBBBB;  \r
404   GPIOF->CRH = 0xBBBB4444;\r
405 \r
406   GPIOG->CRL = 0x44BBBBBB;  \r
407   GPIOG->CRH = 0x44444B44;\r
408    \r
409 /*----------------  FSMC Configuration ---------------------------------------*/  \r
410 /*----------------  Enable FSMC Bank1_SRAM Bank ------------------------------*/\r
411   \r
412   FSMC_Bank1->BTCR[4] = 0x00001011;\r
413   FSMC_Bank1->BTCR[5] = 0x00000200;\r
414 }\r
415 #endif /* DATA_IN_ExtSRAM */\r
416 \r
417 #ifdef SYSCLK_FREQ_HSE\r
418 /**\r
419   * @brief  Selects HSE as System clock source and configure HCLK, PCLK2\r
420   *          and PCLK1 prescalers.\r
421   * @note   This function should be used only after reset.\r
422   * @param  None\r
423   * @retval None\r
424   */\r
425 static void SetSysClockToHSE(void)\r
426 {\r
427   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
428   \r
429   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    \r
430   /* Enable HSE */    \r
431   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
432  \r
433   /* Wait till HSE is ready and if Time out is reached exit */\r
434   do\r
435   {\r
436     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
437     StartUpCounter++;  \r
438   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
439 \r
440   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
441   {\r
442     HSEStatus = (uint32_t)0x01;\r
443   }\r
444   else\r
445   {\r
446     HSEStatus = (uint32_t)0x00;\r
447   }  \r
448 \r
449   if (HSEStatus == (uint32_t)0x01)\r
450   {\r
451 \r
452 #if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL \r
453     /* Enable Prefetch Buffer */\r
454     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
455 \r
456     /* Flash 0 wait state */\r
457     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
458 \r
459 #ifndef STM32F10X_CL\r
460     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;\r
461 #else\r
462     if (HSE_Value <= 24000000)\r
463         {\r
464       FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;\r
465         }\r
466         else\r
467         {\r
468       FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;\r
469         }\r
470 #endif /* STM32F10X_CL */\r
471 #endif\r
472  \r
473     /* HCLK = SYSCLK */\r
474     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
475       \r
476     /* PCLK2 = HCLK */\r
477     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
478     \r
479     /* PCLK1 = HCLK */\r
480     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;\r
481     \r
482     /* Select HSE as system clock source */\r
483     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
484     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE;    \r
485 \r
486     /* Wait till HSE is used as system clock source */\r
487     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04)\r
488     {\r
489     }\r
490   }\r
491   else\r
492   { /* If HSE fails to start-up, the application will have wrong clock \r
493          configuration. User can add here some code to deal with this error */\r
494   }  \r
495 }\r
496 #elif defined SYSCLK_FREQ_24MHz\r
497 /**\r
498   * @brief  Sets System clock frequency to 24MHz and configure HCLK, PCLK2 \r
499   *          and PCLK1 prescalers.\r
500   * @note   This function should be used only after reset.\r
501   * @param  None\r
502   * @retval None\r
503   */\r
504 static void SetSysClockTo24(void)\r
505 {\r
506   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
507   \r
508   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    \r
509   /* Enable HSE */    \r
510   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
511  \r
512   /* Wait till HSE is ready and if Time out is reached exit */\r
513   do\r
514   {\r
515     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
516     StartUpCounter++;  \r
517   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
518 \r
519   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
520   {\r
521     HSEStatus = (uint32_t)0x01;\r
522   }\r
523   else\r
524   {\r
525     HSEStatus = (uint32_t)0x00;\r
526   }  \r
527 \r
528   if (HSEStatus == (uint32_t)0x01)\r
529   {\r
530 #if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL \r
531     /* Enable Prefetch Buffer */\r
532     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
533 \r
534     /* Flash 0 wait state */\r
535     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
536     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;    \r
537 #endif\r
538  \r
539     /* HCLK = SYSCLK */\r
540     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
541       \r
542     /* PCLK2 = HCLK */\r
543     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
544     \r
545     /* PCLK1 = HCLK */\r
546     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;\r
547     \r
548 #ifdef STM32F10X_CL\r
549     /* Configure PLLs ------------------------------------------------------*/\r
550     /* PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz */ \r
551     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);\r
552     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | \r
553                             RCC_CFGR_PLLMULL6); \r
554 \r
555     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */\r
556     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */       \r
557     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |\r
558                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);\r
559     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |\r
560                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);\r
561   \r
562     /* Enable PLL2 */\r
563     RCC->CR |= RCC_CR_PLL2ON;\r
564     /* Wait till PLL2 is ready */\r
565     while((RCC->CR & RCC_CR_PLL2RDY) == 0)\r
566     {\r
567     }   \r
568 #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)\r
569     /*  PLL configuration:  = (HSE / 2) * 6 = 24 MHz */\r
570     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));\r
571     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6);\r
572 #else    \r
573     /*  PLL configuration:  = (HSE / 2) * 6 = 24 MHz */\r
574     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));\r
575     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6);\r
576 #endif /* STM32F10X_CL */\r
577 \r
578     /* Enable PLL */\r
579     RCC->CR |= RCC_CR_PLLON;\r
580 \r
581     /* Wait till PLL is ready */\r
582     while((RCC->CR & RCC_CR_PLLRDY) == 0)\r
583     {\r
584     }\r
585 \r
586     /* Select PLL as system clock source */\r
587     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
588     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    \r
589 \r
590     /* Wait till PLL is used as system clock source */\r
591     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)\r
592     {\r
593     }\r
594   }\r
595   else\r
596   { /* If HSE fails to start-up, the application will have wrong clock \r
597          configuration. User can add here some code to deal with this error */\r
598   } \r
599 }\r
600 #elif defined SYSCLK_FREQ_36MHz\r
601 /**\r
602   * @brief  Sets System clock frequency to 36MHz and configure HCLK, PCLK2 \r
603   *          and PCLK1 prescalers. \r
604   * @note   This function should be used only after reset.\r
605   * @param  None\r
606   * @retval None\r
607   */\r
608 static void SetSysClockTo36(void)\r
609 {\r
610   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
611   \r
612   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    \r
613   /* Enable HSE */    \r
614   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
615  \r
616   /* Wait till HSE is ready and if Time out is reached exit */\r
617   do\r
618   {\r
619     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
620     StartUpCounter++;  \r
621   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
622 \r
623   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
624   {\r
625     HSEStatus = (uint32_t)0x01;\r
626   }\r
627   else\r
628   {\r
629     HSEStatus = (uint32_t)0x00;\r
630   }  \r
631 \r
632   if (HSEStatus == (uint32_t)0x01)\r
633   {\r
634     /* Enable Prefetch Buffer */\r
635     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
636 \r
637     /* Flash 1 wait state */\r
638     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
639     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;    \r
640  \r
641     /* HCLK = SYSCLK */\r
642     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
643       \r
644     /* PCLK2 = HCLK */\r
645     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
646     \r
647     /* PCLK1 = HCLK */\r
648     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;\r
649     \r
650 #ifdef STM32F10X_CL\r
651     /* Configure PLLs ------------------------------------------------------*/\r
652     \r
653     /* PLL configuration: PLLCLK = PREDIV1 * 9 = 36 MHz */ \r
654     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);\r
655     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | \r
656                             RCC_CFGR_PLLMULL9); \r
657 \r
658         /*!< PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */\r
659     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */\r
660         \r
661     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |\r
662                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);\r
663     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |\r
664                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);\r
665   \r
666     /* Enable PLL2 */\r
667     RCC->CR |= RCC_CR_PLL2ON;\r
668     /* Wait till PLL2 is ready */\r
669     while((RCC->CR & RCC_CR_PLL2RDY) == 0)\r
670     {\r
671     }\r
672     \r
673 #else    \r
674     /*  PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */\r
675     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));\r
676     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9);\r
677 #endif /* STM32F10X_CL */\r
678 \r
679     /* Enable PLL */\r
680     RCC->CR |= RCC_CR_PLLON;\r
681 \r
682     /* Wait till PLL is ready */\r
683     while((RCC->CR & RCC_CR_PLLRDY) == 0)\r
684     {\r
685     }\r
686 \r
687     /* Select PLL as system clock source */\r
688     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
689     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    \r
690 \r
691     /* Wait till PLL is used as system clock source */\r
692     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)\r
693     {\r
694     }\r
695   }\r
696   else\r
697   { /* If HSE fails to start-up, the application will have wrong clock \r
698          configuration. User can add here some code to deal with this error */\r
699   } \r
700 }\r
701 #elif defined SYSCLK_FREQ_48MHz\r
702 /**\r
703   * @brief  Sets System clock frequency to 48MHz and configure HCLK, PCLK2 \r
704   *          and PCLK1 prescalers. \r
705   * @note   This function should be used only after reset.\r
706   * @param  None\r
707   * @retval None\r
708   */\r
709 static void SetSysClockTo48(void)\r
710 {\r
711   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
712   \r
713   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    \r
714   /* Enable HSE */    \r
715   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
716  \r
717   /* Wait till HSE is ready and if Time out is reached exit */\r
718   do\r
719   {\r
720     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
721     StartUpCounter++;  \r
722   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
723 \r
724   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
725   {\r
726     HSEStatus = (uint32_t)0x01;\r
727   }\r
728   else\r
729   {\r
730     HSEStatus = (uint32_t)0x00;\r
731   }  \r
732 \r
733   if (HSEStatus == (uint32_t)0x01)\r
734   {\r
735     /* Enable Prefetch Buffer */\r
736     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
737 \r
738     /* Flash 1 wait state */\r
739     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
740     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;    \r
741  \r
742     /* HCLK = SYSCLK */\r
743     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
744       \r
745     /* PCLK2 = HCLK */\r
746     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
747     \r
748     /* PCLK1 = HCLK */\r
749     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;\r
750     \r
751 #ifdef STM32F10X_CL\r
752     /* Configure PLLs ------------------------------------------------------*/\r
753     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */\r
754     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */\r
755         \r
756     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |\r
757                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);\r
758     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |\r
759                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);\r
760   \r
761     /* Enable PLL2 */\r
762     RCC->CR |= RCC_CR_PLL2ON;\r
763     /* Wait till PLL2 is ready */\r
764     while((RCC->CR & RCC_CR_PLL2RDY) == 0)\r
765     {\r
766     }\r
767     \r
768    \r
769     /* PLL configuration: PLLCLK = PREDIV1 * 6 = 48 MHz */ \r
770     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);\r
771     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | \r
772                             RCC_CFGR_PLLMULL6); \r
773 #else    \r
774     /*  PLL configuration: PLLCLK = HSE * 6 = 48 MHz */\r
775     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));\r
776     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);\r
777 #endif /* STM32F10X_CL */\r
778 \r
779     /* Enable PLL */\r
780     RCC->CR |= RCC_CR_PLLON;\r
781 \r
782     /* Wait till PLL is ready */\r
783     while((RCC->CR & RCC_CR_PLLRDY) == 0)\r
784     {\r
785     }\r
786 \r
787     /* Select PLL as system clock source */\r
788     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
789     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    \r
790 \r
791     /* Wait till PLL is used as system clock source */\r
792     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)\r
793     {\r
794     }\r
795   }\r
796   else\r
797   { /* If HSE fails to start-up, the application will have wrong clock \r
798          configuration. User can add here some code to deal with this error */\r
799   } \r
800 }\r
801 \r
802 #elif defined SYSCLK_FREQ_56MHz\r
803 /**\r
804   * @brief  Sets System clock frequency to 56MHz and configure HCLK, PCLK2 \r
805   *          and PCLK1 prescalers. \r
806   * @note   This function should be used only after reset.\r
807   * @param  None\r
808   * @retval None\r
809   */\r
810 static void SetSysClockTo56(void)\r
811 {\r
812   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
813   \r
814   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/   \r
815   /* Enable HSE */    \r
816   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
817  \r
818   /* Wait till HSE is ready and if Time out is reached exit */\r
819   do\r
820   {\r
821     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
822     StartUpCounter++;  \r
823   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
824 \r
825   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
826   {\r
827     HSEStatus = (uint32_t)0x01;\r
828   }\r
829   else\r
830   {\r
831     HSEStatus = (uint32_t)0x00;\r
832   }  \r
833 \r
834   if (HSEStatus == (uint32_t)0x01)\r
835   {\r
836     /* Enable Prefetch Buffer */\r
837     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
838 \r
839     /* Flash 2 wait state */\r
840     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
841     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    \r
842  \r
843     /* HCLK = SYSCLK */\r
844     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
845       \r
846     /* PCLK2 = HCLK */\r
847     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
848     \r
849     /* PCLK1 = HCLK */\r
850     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;\r
851 \r
852 #ifdef STM32F10X_CL\r
853     /* Configure PLLs ------------------------------------------------------*/\r
854     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */\r
855     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */\r
856         \r
857     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |\r
858                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);\r
859     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |\r
860                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);\r
861   \r
862     /* Enable PLL2 */\r
863     RCC->CR |= RCC_CR_PLL2ON;\r
864     /* Wait till PLL2 is ready */\r
865     while((RCC->CR & RCC_CR_PLL2RDY) == 0)\r
866     {\r
867     }\r
868     \r
869    \r
870     /* PLL configuration: PLLCLK = PREDIV1 * 7 = 56 MHz */ \r
871     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);\r
872     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | \r
873                             RCC_CFGR_PLLMULL7); \r
874 #else     \r
875     /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */\r
876     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));\r
877     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL7);\r
878 \r
879 #endif /* STM32F10X_CL */\r
880 \r
881     /* Enable PLL */\r
882     RCC->CR |= RCC_CR_PLLON;\r
883 \r
884     /* Wait till PLL is ready */\r
885     while((RCC->CR & RCC_CR_PLLRDY) == 0)\r
886     {\r
887     }\r
888 \r
889     /* Select PLL as system clock source */\r
890     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
891     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    \r
892 \r
893     /* Wait till PLL is used as system clock source */\r
894     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)\r
895     {\r
896     }\r
897   }\r
898   else\r
899   { /* If HSE fails to start-up, the application will have wrong clock \r
900          configuration. User can add here some code to deal with this error */\r
901   } \r
902 }\r
903 \r
904 #elif defined SYSCLK_FREQ_72MHz\r
905 /**\r
906   * @brief  Sets System clock frequency to 72MHz and configure HCLK, PCLK2 \r
907   *          and PCLK1 prescalers. \r
908   * @note   This function should be used only after reset.\r
909   * @param  None\r
910   * @retval None\r
911   */\r
912 static void SetSysClockTo72(void)\r
913 {\r
914   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;\r
915   \r
916   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    \r
917   /* Enable HSE */    \r
918   RCC->CR |= ((uint32_t)RCC_CR_HSEON);\r
919  \r
920   /* Wait till HSE is ready and if Time out is reached exit */\r
921   do\r
922   {\r
923     HSEStatus = RCC->CR & RCC_CR_HSERDY;\r
924     StartUpCounter++;  \r
925   } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));\r
926 \r
927   if ((RCC->CR & RCC_CR_HSERDY) != RESET)\r
928   {\r
929     HSEStatus = (uint32_t)0x01;\r
930   }\r
931   else\r
932   {\r
933     HSEStatus = (uint32_t)0x00;\r
934   }  \r
935 \r
936   if (HSEStatus == (uint32_t)0x01)\r
937   {\r
938     /* Enable Prefetch Buffer */\r
939     FLASH->ACR |= FLASH_ACR_PRFTBE;\r
940 \r
941     /* Flash 2 wait state */\r
942     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);\r
943     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    \r
944 \r
945  \r
946     /* HCLK = SYSCLK */\r
947     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;\r
948       \r
949     /* PCLK2 = HCLK */\r
950     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;\r
951     \r
952     /* PCLK1 = HCLK */\r
953     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;\r
954 \r
955 #ifdef STM32F10X_CL\r
956     /* Configure PLLs ------------------------------------------------------*/\r
957     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */\r
958     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */\r
959         \r
960     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |\r
961                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);\r
962     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |\r
963                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);\r
964   \r
965     /* Enable PLL2 */\r
966     RCC->CR |= RCC_CR_PLL2ON;\r
967     /* Wait till PLL2 is ready */\r
968     while((RCC->CR & RCC_CR_PLL2RDY) == 0)\r
969     {\r
970     }\r
971     \r
972    \r
973     /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ \r
974     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);\r
975     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | \r
976                             RCC_CFGR_PLLMULL9); \r
977 #else    \r
978     /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */\r
979     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |\r
980                                         RCC_CFGR_PLLMULL));\r
981     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);\r
982 #endif /* STM32F10X_CL */\r
983 \r
984     /* Enable PLL */\r
985     RCC->CR |= RCC_CR_PLLON;\r
986 \r
987     /* Wait till PLL is ready */\r
988     while((RCC->CR & RCC_CR_PLLRDY) == 0)\r
989     {\r
990     }\r
991     \r
992     /* Select PLL as system clock source */\r
993     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));\r
994     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    \r
995 \r
996     /* Wait till PLL is used as system clock source */\r
997     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)\r
998     {\r
999     }\r
1000   }\r
1001   else\r
1002   { /* If HSE fails to start-up, the application will have wrong clock \r
1003          configuration. User can add here some code to deal with this error */\r
1004   }\r
1005 }\r
1006 #endif\r
1007 \r
1008 /**\r
1009   * @}\r
1010   */\r
1011 \r
1012 /**\r
1013   * @}\r
1014   */\r
1015   \r
1016 /**\r
1017   * @}\r
1018   */    \r
1019 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r