找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18406|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STM32F103時鐘配置流程

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:276663 發(fā)表于 2018-3-15 11:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 IdeaMing 于 2018-3-16 10:15 編輯

STM32F103時鐘配置流程



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

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



知識點:
1. 系統(tǒng)復(fù)位后,HSI振蕩器被選為系統(tǒng)時鐘。當(dāng)時鐘源被直接或通過PLL間接作為系統(tǒng)時鐘時,它將不能被停止。

2. STM32F103的三個可以作為系統(tǒng)時鐘的時鐘源,分別是HSI、HSE、PLL。而PLL的時鐘源是HSI/2(內(nèi)部RC振蕩器二分頻)、HSE。

3.如果使用HSI,系統(tǒng)時鐘我們能達(dá)到的最大頻率是64MHz,如果使用HSE,系統(tǒng)時鐘最大頻率是72MHz。

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

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

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


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

第二步              打開時鐘
         內(nèi)部高速時鐘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);

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

第五步              設(shè)置低速APB時鐘
                                                                 RCC_PCLK1Config(RCC_HCLK_Div2);

第六步              設(shè)置高速APB時鐘
                                                                 RCC_PCLK2Config(RCC_HCLK_Div1);
第七步              設(shè)置Flash預(yù)緩沖
                                                                 FLASH_SetLatency(FLASH_Latency_2);
                                              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);          // 使能flash預(yù)緩沖
       Flash的操作也沒有總線時鐘快,所以需要總線在操作flash時稍作等待。推薦根據(jù)HCLK設(shè)置。
0-24MHz時,取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz時,取FLASH_Latency_2。

第八步              設(shè)置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);

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



附錄:一些縮寫的英文全稱及中文翻譯,幫助理解記憶。
IWDG       IndependentWatchdog                                   獨立看門狗

RTC           RealTime Clock                                                      實時時鐘
                   時鐘源可以是LSI,或者LSE,再或者HSE128分頻。
LSI             LowSpeed Internal                                                       內(nèi)部低速時鐘
                   RC振蕩器,頻率為40kHz。供IWDG使用,還能作為RTC的時鐘源。
HSI            HighSpeed Internal                                             內(nèi)部高速時鐘
                   RC振蕩器,頻率為8MHz。
HSE           HighSpeed External                                             外部高速時鐘
                   可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。

PLL          PhaseLockedLoop                                                   鎖相環(huán)倍頻輸出
                   其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,

SYSCLK     SystemColock                                                                 系統(tǒng)時鐘

AHB          AdvancedHigh performance Bus                   高級高性能總線
                   AHB主要用于高性能模塊(CPU、DMADSP)之間的連接。

APB          Advanced PeripheralBus                                  高級外圍設(shè)備總線
                   APB主要用于外設(shè)模塊(ADC、USB、SPIUART)AHB之間的連接。

HCLK         Advanced High performance Bus Clock                 高級高性能總線時鐘
                   就是SYSCLK經(jīng)過AHBPrescaler(預(yù)分頻器)后得到的AHB的時鐘。

PCLK         PeripheralBus Clock                                            外圍設(shè)備總線時鐘                  
                   PCLK有兩個,一個是低速的PCLK1,另一個是高速的PCLK2。
                   PCLK1是經(jīng)過APB1Prescaler后得到的APB1時鐘。
PCLK2是經(jīng)過APB2 Prescaler后得到的APB2時鐘。

FCLK                   FreeRuning Clock                                                  自由運行時鐘
為供給CPU內(nèi)核的時鐘信號,CPU的主頻就是指這個信號;1/FCLK就是CPU時鐘周期。
為什么叫自由運行時鐘呢?下面是別人家的講解。
ARMJISHU注:FCLK 為處理器的自由振蕩的處理器時鐘,用來采樣中斷和為調(diào)試模塊計時。在處理器休眠時,通過FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內(nèi)核的“自由運行時鐘(free running clock)”FCLK!白杂伞北憩F(xiàn)在它不來自系統(tǒng)時鐘HCLK,因此在系統(tǒng)時鐘停止時FCLK也繼續(xù)運行。FCLK和HCLK 互相同步。FCLK 是一個自由振蕩的HCLK。FCLK 和HCLK 應(yīng)該互相平衡,保證進(jìn)入Cortex-M3 時的延遲相同。


STM32F103時鐘配置流程.pdf (394.67 KB, 下載次數(shù): 165)



評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:276663 發(fā)表于 2018-3-16 09:06 | 只看該作者
這個時鐘配置完了之后就是端口時鐘的開關(guān),外設(shè)總線的時鐘速度,比如SPI.
回復(fù)

使用道具 舉報

板凳
ID:276663 發(fā)表于 2018-3-16 10:16 | 只看該作者
IdeaMing 發(fā)表于 2018-3-16 09:06
這個時鐘配置完了之后就是端口時鐘的開關(guān),外設(shè)總線的時鐘速度,比如SPI.

第二版本增加了第七步,flash的操作延時設(shè)置和flash預(yù)緩沖的設(shè)置。
回復(fù)

使用道具 舉報

地板
ID:127084 發(fā)表于 2018-3-16 15:47 | 只看該作者
非常有用,果斷下載 先謝樓主
回復(fù)

使用道具 舉報

5#
ID:68875 發(fā)表于 2018-7-8 21:49 | 只看該作者
good job
回復(fù)

使用道具 舉報

6#
ID:269314 發(fā)表于 2018-7-9 17:48 | 只看該作者
贊!真的很清楚明白,小弟有個疑問,恭請樓主幫忙解惑,感謝!

小弟啟用的是外部時鐘,即HSE,前十步都與樓主一致,但在第十一、十二步,使用的是PLL對應(yīng)的代碼,這個與使用HSE對應(yīng)的代碼有啥區(qū)別和影響呢?再次感謝!
回復(fù)

使用道具 舉報

7#
ID:231528 發(fā)表于 2018-7-9 21:20 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報

8#
ID:276663 發(fā)表于 2018-8-23 16:40 | 只看該作者
pc333 發(fā)表于 2018-7-9 17:48
贊!真的很清楚明白,小弟有個疑問,恭請樓主幫忙解惑,感謝!

小弟啟用的是外部時鐘,即HSE,前十步都 ...

HSE就是你外面接的那個晶振頻率。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

9#
ID:112471 發(fā)表于 2018-11-15 13:12 | 只看該作者
厲害啊
回復(fù)

使用道具 舉報

10#
ID:51905 發(fā)表于 2019-1-16 17:13 | 只看該作者
不錯~~
回復(fù)

使用道具 舉報

11#
ID:436417 發(fā)表于 2019-6-11 20:11 | 只看該作者
非常有用
回復(fù)

使用道具 舉報

12#
ID:461428 發(fā)表于 2019-6-23 19:03 | 只看該作者
急需的東東,,謝謝
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表