STM32F103時鍾配置流程


前言:

一般情況下單片機的時鍾配置是單片機程序中的第一步,也是很重要的一步。這時候我們需要考慮以下幾個問題。
1. 系統時鍾的時鍾源用哪個。
2. 系統時鍾頻率要多少。
3. 每個模塊的時鍾頻率要多少。
4. 如果外部時鍾出了問題,這個時候時鍾是怎么運行的。

 

下面就針對性的講一講STM32F103的時鍾配置。




知識點:

1.  系統復位后,HSI振盪器被選為系統時鍾。當時鍾源被直接或通過PLL間接作為系統時鍾時,它將不能被停止。

 

2. STM32F103的三個可以作為系統時鍾的時鍾源,分別是HSI、HSE、PLL。而PLL的時鍾源是HSI/2(內部RC振盪器二分頻)、HSE。

 

3. 如果使用HSI, 系統時鍾我們能達到的最大頻率是64MHz, 如果使用HSE ,系統時鍾最大頻率是72MHz

 

4.APB 時鍾有低速PCLK1 和高速PCLK2 PCLK1 是從HCLK 二分頻得到的,最大36MHZ ,根據上一條知識點如果是使用HSI, 則最快是32MHz

 

5. PLL 的設定需要在使能之前,一旦PLL 使能后參數不可更改。

 

6. 附錄是一些縮寫的英文全稱,也有一些補充的知識點。



步驟:

第一步      初始化時鍾
          不管現在SYSCLK 的時鍾源是哪個,我們要更換時鍾源。先RCC_DeInit();

 

第二步               打開時鍾
         內部高速時鍾HSI           RCC_HSICmd(ENABLE);
          外部高速時鍾HSE          RCC_HSEConfig(RCC_HSE_ON);

 

第三步               等待時鍾晶振工作
         HSI            While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);
          HSE           While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);

 

第四步               設置AHB 時鍾HCLK
                                                                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
        分頻系數自己設定,一般都是RCC_SYSCLK_Div1即不分頻。

 

第五步               設置低速APB 時鍾
                                                                 RCC_PCLK1Config(RCC_HCLK_Div2);

 

第六步               設置高速APB 時鍾
                                                                 RCC_PCLK2Config(RCC_HCLK_Div1);
第七步               設置Flash 預緩沖
                                                                 FLASH_SetLatency(FLASH_Latency_2);
                                              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);          // 使能flash預緩沖
       Flash 的操作也沒有總線時鍾快,所以需要總線在操作flash 時稍作等待。推薦根據HCLK 設置。
0-24MHz時,取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz時,取FLASH_Latency_2。
 
第八步               設置PLL                      如果不使用PLL,請略過此步驟
         HSI                                                  RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 );
          HSE                                                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );

 

第九步               打開PLL                      如果不使用PLL,請略過此步驟
                                                                 RCC_PLLCmd(ENABLE);

 

第十步               等待PLL 工作           如果不使用PLL,請略過此步驟
                                                                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);

 

第十一步               設置系統時鍾
         HSI                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
         HSE                                                 RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
          PLL                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
第十二步          判斷是否是設置的時鍾
         HSI                                                  while(RCC_GetSYSCLKSource()!= 0x00);
         HSE                                                 while(RCC_GetSYSCLKSource()!= 0x04);
          PLL                                                  while(RCC_GetSYSCLKSource()!= 0x08);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM