久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6349|回復: 0
打印 上一主題 下一主題
收起左側

system_stm32f10x.c文件內容分析

[復制鏈接]
跳轉到指定樓層
樓主
ID:91350 發表于 2015-9-30 13:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個文件完成了寫聲明配置,他和對應的頭文件的關系,頭文件里做了些什么工作,為什么要這樣
完成系統時鐘的配置。
  1. #include "stm32f10x.h"   
  2. #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
  3. #define SYSCLK_FREQ_24MHz  24000000
  4. #else

  5.    #define SYSCLK_FREQ_72MHz  72000000
  6. #endif


  7. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
  8. #endif


  9. #define VECT_TAB_OFFSET  0x0






  10. #ifdef SYSCLK_FREQ_HSE
  11.   uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        
  12. #elif defined SYSCLK_FREQ_24MHz
  13.   uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        
  14. #elif defined SYSCLK_FREQ_36MHz
  15.   uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        
  16. #elif defined SYSCLK_FREQ_48MHz
  17.   uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        
  18. #elif defined SYSCLK_FREQ_56MHz
  19.   uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        
  20. #elif defined SYSCLK_FREQ_72MHz
  21.   uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        
  22. #else
  23.   uint32_t SystemCoreClock         = HSI_VALUE;        
  24. #endif

  25. __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};


  26. static void SetSysClock(void);

  27. #ifdef SYSCLK_FREQ_HSE
  28.   static void SetSysClockToHSE(void);
  29. #elif defined SYSCLK_FREQ_24MHz
  30.   static void SetSysClockTo24(void);
  31. #elif defined SYSCLK_FREQ_36MHz
  32.   static void SetSysClockTo36(void);
  33. #elif defined SYSCLK_FREQ_48MHz
  34.   static void SetSysClockTo48(void);
  35. #elif defined SYSCLK_FREQ_56MHz
  36.   static void SetSysClockTo56(void);  
  37. #elif defined SYSCLK_FREQ_72MHz
  38.   static void SetSysClockTo72(void);
  39. #endif

  40. #ifdef DATA_IN_ExtSRAM
  41.   static void SystemInit_ExtMemCtl(void);
  42. #endif



  43. void SystemInit (void)
  44. {


  45.   RCC->CR |= (uint32_t)0x00000001;


  46. #ifndef STM32F10X_CL
  47.   RCC->CFGR &= (uint32_t)0xF8FF0000;
  48. #else
  49.   RCC->CFGR &= (uint32_t)0xF0FF0000;
  50. #endif   
  51.   

  52.   RCC->CR &= (uint32_t)0xFEF6FFFF;


  53.   RCC->CR &= (uint32_t)0xFFFBFFFF;


  54.   RCC->CFGR &= (uint32_t)0xFF80FFFF;

  55. #ifdef STM32F10X_CL

  56.   RCC->CR &= (uint32_t)0xEBFFFFFF;


  57.   RCC->CIR = 0x00FF0000;


  58.   RCC->CFGR2 = 0x00000000;
  59. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)

  60.   RCC->CIR = 0x009F0000;


  61.   RCC->CFGR2 = 0x00000000;      
  62. #else

  63.   RCC->CIR = 0x009F0000;
  64. #endif
  65.    
  66. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
  67.   #ifdef DATA_IN_ExtSRAM
  68.     SystemInit_ExtMemCtl();
  69.   #endif
  70. #endif



  71.   SetSysClock();

  72. #ifdef VECT_TAB_SRAM
  73.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;
  74. #else
  75.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
  76. #endif
  77. }

  78. void SystemCoreClockUpdate (void)
  79. {
  80.   uint32_t tmp = 0, pllmull = 0, pllsource = 0;

  81. #ifdef  STM32F10X_CL
  82.   uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0;
  83. #endif

  84. #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
  85.   uint32_t prediv1factor = 0;
  86. #endif
  87.    

  88.   tmp = RCC->CFGR & RCC_CFGR_SWS;
  89.   
  90.   switch (tmp)
  91.   {
  92.     case 0x00:  
  93.       SystemCoreClock = HSI_VALUE;
  94.       break;
  95.     case 0x04:  
  96.       SystemCoreClock = HSE_VALUE;
  97.       break;
  98.     case 0x08:  

  99.      
  100.       pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
  101.       pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
  102.       
  103. #ifndef STM32F10X_CL      
  104.       pllmull = ( pllmull >> 18) + 2;
  105.       
  106.       if (pllsource == 0x00)
  107.       {
  108.       
  109.         SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
  110.       }
  111.       else
  112.       {
  113. #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
  114.        prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;
  115.       
  116.        SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;
  117. #else
  118.       
  119.         if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
  120.         {
  121.           SystemCoreClock = (HSE_VALUE >> 1) * pllmull;
  122.         }
  123.         else
  124.         {
  125.           SystemCoreClock = HSE_VALUE * pllmull;
  126.         }
  127. #endif
  128.       }
  129. #else
  130.       pllmull = pllmull >> 18;
  131.       
  132.       if (pllmull != 0x0D)
  133.       {
  134.          pllmull += 2;
  135.       }
  136.       else
  137.       {
  138.         pllmull = 13 / 2;
  139.       }
  140.             
  141.       if (pllsource == 0x00)
  142.       {
  143.       
  144.         SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
  145.       }
  146.       else
  147.       {
  148.         
  149.       
  150.         prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;
  151.         prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;
  152.         
  153.         if (prediv1source == 0)
  154.         {
  155.          
  156.           SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;         
  157.         }
  158.         else
  159.         {
  160.          
  161.          
  162.           prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1;
  163.           pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2;
  164.           SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                        
  165.         }
  166.       }
  167. #endif  
  168.       break;

  169.     default:
  170.       SystemCoreClock = HSI_VALUE;
  171.       break;
  172.   }
  173.   


  174.   tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];

  175.   SystemCoreClock >>= tmp;  
  176. }

  177. static void SetSysClock(void)
  178. {
  179. #ifdef SYSCLK_FREQ_HSE
  180.   SetSysClockToHSE();
  181. #elif defined SYSCLK_FREQ_24MHz
  182.   SetSysClockTo24();
  183. #elif defined SYSCLK_FREQ_36MHz
  184.   SetSysClockTo36();
  185. #elif defined SYSCLK_FREQ_48MHz
  186.   SetSysClockTo48();
  187. #elif defined SYSCLK_FREQ_56MHz
  188.   SetSysClockTo56();  
  189. #elif defined SYSCLK_FREQ_72MHz
  190.   SetSysClockTo72();
  191. #endif

  192.   
  193. }


  194. #ifdef DATA_IN_ExtSRAM

  195. void SystemInit_ExtMemCtl(void)
  196. {


  197.   RCC->AHBENR = 0x00000114;
  198.   
  199.    
  200.   RCC->APB2ENR = 0x000001E0;
  201.   

  202.   
  203.   GPIOD->CRL = 0x44BB44BB;  
  204.   GPIOD->CRH = 0xBBBBBBBB;

  205.   GPIOE->CRL = 0xB44444BB;  
  206.   GPIOE->CRH = 0xBBBBBBBB;

  207.   GPIOF->CRL = 0x44BBBBBB;  
  208.   GPIOF->CRH = 0xBBBB4444;

  209.   GPIOG->CRL = 0x44BBBBBB;  
  210.   GPIOG->CRH = 0x44444B44;
  211.    

  212.   
  213.   FSMC_Bank1->BTCR[4] = 0x00001011;
  214.   FSMC_Bank1->BTCR[5] = 0x00000200;
  215. }
  216. #endif

  217. #ifdef SYSCLK_FREQ_HSE
  218. static void SetSysClockToHSE(void)
  219. {
  220.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  221.   
  222.      
  223.      
  224.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  225.   do
  226.   {
  227.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  228.     StartUpCounter++;  
  229.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  230.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  231.   {
  232.     HSEStatus = (uint32_t)0x01;
  233.   }
  234.   else
  235.   {
  236.     HSEStatus = (uint32_t)0x00;
  237.   }  

  238.   if (HSEStatus == (uint32_t)0x01)
  239.   {

  240. #if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL
  241.    
  242.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  243.    
  244.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);

  245. #ifndef STM32F10X_CL
  246.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;
  247. #else
  248.     if (HSE_VALUE <= 24000000)
  249. {
  250.       FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;
  251. }
  252. else
  253. {
  254.       FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;
  255. }
  256. #endif
  257. #endif

  258.    
  259.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  260.       
  261.    
  262.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  263.    
  264.    
  265.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
  266.    
  267.    
  268.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  269.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE;   

  270.    
  271.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04)
  272.     {
  273.     }
  274.   }
  275.   else
  276.   {
  277.   }  
  278. }
  279. #elif defined SYSCLK_FREQ_24MHz
  280. static void SetSysClockTo24(void)
  281. {
  282.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  283.   
  284.      
  285.      
  286.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  287.   do
  288.   {
  289.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  290.     StartUpCounter++;  
  291.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  292.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  293.   {
  294.     HSEStatus = (uint32_t)0x01;
  295.   }
  296.   else
  297.   {
  298.     HSEStatus = (uint32_t)0x00;
  299.   }  

  300.   if (HSEStatus == (uint32_t)0x01)
  301.   {
  302. #if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL
  303.    
  304.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  305.    
  306.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  307.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;   
  308. #endif

  309.    
  310.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  311.       
  312.    
  313.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  314.    
  315.    
  316.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
  317.    
  318. #ifdef STM32F10X_CL
  319.    
  320.      
  321.     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
  322.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
  323.                             RCC_CFGR_PLLMULL6);

  324.    
  325.          
  326.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  327.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  328.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  329.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);
  330.   
  331.    
  332.     RCC->CR |= RCC_CR_PLL2ON;
  333.    
  334.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  335.     {
  336.     }   
  337. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
  338.    
  339.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  340.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6);
  341. #else   
  342.    
  343.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  344.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6);
  345. #endif

  346.    
  347.     RCC->CR |= RCC_CR_PLLON;

  348.    
  349.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  350.     {
  351.     }

  352.    
  353.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  354.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  355.    
  356.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  357.     {
  358.     }
  359.   }
  360.   else
  361.   {
  362.   }
  363. }
  364. #elif defined SYSCLK_FREQ_36MHz
  365. static void SetSysClockTo36(void)
  366. {
  367.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  368.   
  369.      
  370.      
  371.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  372.   do
  373.   {
  374.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  375.     StartUpCounter++;  
  376.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  377.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  378.   {
  379.     HSEStatus = (uint32_t)0x01;
  380.   }
  381.   else
  382.   {
  383.     HSEStatus = (uint32_t)0x00;
  384.   }  

  385.   if (HSEStatus == (uint32_t)0x01)
  386.   {
  387.    
  388.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  389.    
  390.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  391.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;   

  392.    
  393.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  394.       
  395.    
  396.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  397.    
  398.    
  399.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
  400.    
  401. #ifdef STM32F10X_CL
  402.    
  403.    
  404.      
  405.     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
  406.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
  407.                             RCC_CFGR_PLLMULL9);

  408.    
  409.         
  410.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  411.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  412.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  413.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);
  414.   
  415.    
  416.     RCC->CR |= RCC_CR_PLL2ON;
  417.    
  418.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  419.     {
  420.     }
  421.    
  422. #else   
  423.    
  424.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  425.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9);
  426. #endif

  427.    
  428.     RCC->CR |= RCC_CR_PLLON;

  429.    
  430.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  431.     {
  432.     }

  433.    
  434.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  435.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  436.    
  437.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  438.     {
  439.     }
  440.   }
  441.   else
  442.   {
  443.   }
  444. }
  445. #elif defined SYSCLK_FREQ_48MHz
  446. static void SetSysClockTo48(void)
  447. {
  448.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  449.   
  450.      
  451.      
  452.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  453.   do
  454.   {
  455.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  456.     StartUpCounter++;  
  457.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  458.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  459.   {
  460.     HSEStatus = (uint32_t)0x01;
  461.   }
  462.   else
  463.   {
  464.     HSEStatus = (uint32_t)0x00;
  465.   }  

  466.   if (HSEStatus == (uint32_t)0x01)
  467.   {
  468.    
  469.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  470.    
  471.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  472.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;   

  473.    
  474.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  475.       
  476.    
  477.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  478.    
  479.    
  480.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
  481.    
  482. #ifdef STM32F10X_CL
  483.    
  484.    
  485.    
  486.         
  487.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  488.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  489.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  490.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  491.   
  492.    
  493.     RCC->CR |= RCC_CR_PLL2ON;
  494.    
  495.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  496.     {
  497.     }
  498.    
  499.    
  500.      
  501.     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
  502.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
  503.                             RCC_CFGR_PLLMULL6);
  504. #else   
  505.    
  506.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  507.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);
  508. #endif

  509.    
  510.     RCC->CR |= RCC_CR_PLLON;

  511.    
  512.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  513.     {
  514.     }

  515.    
  516.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  517.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  518.    
  519.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  520.     {
  521.     }
  522.   }
  523.   else
  524.   {
  525.   }
  526. }

  527. #elif defined SYSCLK_FREQ_56MHz
  528. static void SetSysClockTo56(void)
  529. {
  530.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  531.   
  532.    
  533.      
  534.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  535.   do
  536.   {
  537.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  538.     StartUpCounter++;  
  539.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  540.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  541.   {
  542.     HSEStatus = (uint32_t)0x01;
  543.   }
  544.   else
  545.   {
  546.     HSEStatus = (uint32_t)0x00;
  547.   }  

  548.   if (HSEStatus == (uint32_t)0x01)
  549.   {
  550.    
  551.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  552.    
  553.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  554.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;   

  555.    
  556.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  557.       
  558.    
  559.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  560.    
  561.    
  562.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

  563. #ifdef STM32F10X_CL
  564.    
  565.    
  566.    
  567.         
  568.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  569.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  570.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  571.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  572.   
  573.    
  574.     RCC->CR |= RCC_CR_PLL2ON;
  575.    
  576.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  577.     {
  578.     }
  579.    
  580.    
  581.      
  582.     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
  583.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
  584.                             RCC_CFGR_PLLMULL7);
  585. #else     
  586.    
  587.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  588.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL7);

  589. #endif

  590.    
  591.     RCC->CR |= RCC_CR_PLLON;

  592.    
  593.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  594.     {
  595.     }

  596.    
  597.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  598.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  599.    
  600.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  601.     {
  602.     }
  603.   }
  604.   else
  605.   {
  606.   }
  607. }

  608. #elif defined SYSCLK_FREQ_72MHz
  609. static void SetSysClockTo72(void)
  610. {
  611.   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  612.   
  613.      
  614.      
  615.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  616.   do
  617.   {
  618.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
  619.     StartUpCounter++;  
  620.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  621.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  622.   {
  623.     HSEStatus = (uint32_t)0x01;
  624.   }
  625.   else
  626.   {
  627.     HSEStatus = (uint32_t)0x00;
  628.   }  

  629.   if (HSEStatus == (uint32_t)0x01)
  630.   {
  631.    
  632.     FLASH->ACR |= FLASH_ACR_PRFTBE;

  633.    
  634.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  635.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;   


  636.    
  637.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  638.       
  639.    
  640.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  641.    
  642.    
  643.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

  644. #ifdef STM32F10X_CL
  645.    
  646.    
  647.    
  648.         
  649.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  650.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  651.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  652.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  653.   
  654.    
  655.     RCC->CR |= RCC_CR_PLL2ON;
  656.    
  657.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  658.     {
  659.     }
  660.    
  661.    
  662.      
  663.     RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
  664.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
  665.                             RCC_CFGR_PLLMULL9);
  666. #else   
  667.    
  668.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
  669.                                         RCC_CFGR_PLLMULL));
  670.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
  671. #endif

  672.    
  673.     RCC->CR |= RCC_CR_PLLON;

  674.    
  675.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  676.     {
  677.     }
  678.    
  679.    
  680.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  681.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  682.    
  683.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
  684.     {
  685.     }
  686.   }
  687.   else
  688.   {
  689.   }
  690. }
  691. #endif
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本三级网址 | 一区二区三区网站 | 亚洲人成人一区二区在线观看 | 日韩www| 久久久高清| 色婷婷国产精品综合在线观看 | 91成人精品视频 | 九九av| 免费黄网站在线观看 | 一级在线免费观看 | 日韩电影中文字幕在线观看 | 国产精品久久九九 | 黄片毛片免费观看 | 九一视频在线观看 | 久久久精品 | 免费h在线 | 精品久久久久久亚洲综合网 | 亚洲精品久久嫩草网站秘色 | 日韩影音 | 午夜在线观看免费 | 久久网亚洲| 91亚洲国产成人精品一区二三 | 岛国av免费观看 | 欧美日韩一区二区三区在线观看 | 亚洲欧美日韩在线 | 国产高清视频在线观看播放 | 久草青青草| 亚洲综合视频 | 日韩欧美在线免费观看视频 | 国产在线精品一区二区 | 激情91| 成人免费一区二区三区视频网站 | 中文字幕在线一 | 国产精品久久久久久一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 国产美女黄色 | 日韩在线中文 | 欧美 日韩 国产 成人 在线 91 | 国产成人福利视频在线观看 | 不卡一二区| 天堂综合网久久 |