本文的目錄結(jié)構(gòu)如下:
1.1、HSI 時(shí)鐘
1.2、HSE 時(shí)鐘
1.3、主 PLL 時(shí)鐘
2、時(shí)鐘樹
3、配置系統(tǒng)時(shí)鐘
3.1、系統(tǒng)時(shí)鐘有關(guān)寄存器
3.2、使用系統(tǒng)的默認(rèn)配置
3.3、系統(tǒng)時(shí)鐘配置所用到的相關(guān)宏定義
3.4、SystemInit( )函數(shù)
3.5、SetSysClock( )函數(shù)
3.6、自行配置時(shí)鐘
對(duì)于STM32這款單片機(jī),現(xiàn)在是越來(lái)越多的人熟悉和使用它了。在很多的項(xiàng)目和產(chǎn)品中都有它的身影,以及現(xiàn)在很多的大學(xué)課程都是用STM32開展教學(xué)了,已經(jīng)是應(yīng)用很廣泛了。
想當(dāng)初我在大學(xué)的時(shí)候,上課教的還是51單片機(jī),而且還是老師照著課本念的。當(dāng)時(shí)做的第一個(gè)單片機(jī)產(chǎn)品還是用51單片機(jī)做的流水燈,哈哈!
那么,在使用STM32單片機(jī)進(jìn)行項(xiàng)目開發(fā)的時(shí)候,第一步都是要做好時(shí)鐘的設(shè)置的。這個(gè)時(shí)鐘的設(shè)置是非常重要的,因?yàn)樗P(guān)系到整個(gè)系統(tǒng)的運(yùn)行。不同的項(xiàng)目都會(huì)根據(jù)實(shí)際的使用需求,采用不同的時(shí)鐘頻率,所以需要對(duì)時(shí)鐘進(jìn)行設(shè)置。
下面分享一下STM32設(shè)置時(shí)鐘的操作方法和步驟。本文以STM32F407為例講講時(shí)鐘配置!
1、STM32F407 的時(shí)鐘來(lái)源
從STM32F4的參考手冊(cè)上可以看到,STM32F407的時(shí)鐘可以有三種時(shí)鐘來(lái)源,如下圖:
這幾個(gè)時(shí)鐘區(qū)別分別如下:
1.1、HSI 時(shí)鐘
HSI 時(shí)鐘信號(hào)由STM32內(nèi)部 16 MHz 的RC 振蕩器生成,可直接用作系統(tǒng)時(shí)鐘,或者用作 PLL 輸入。
因?yàn)樗莾?nèi)部的集成RC振蕩器,不需要額外的外部晶振和電路,所以使用它的話成本就比較低。但是它的精度相比外部的晶振或者陶瓷諧振器,精度是比不上的,所以一般都不用這個(gè)作為系統(tǒng)的主時(shí)鐘來(lái)源。
1.2、HSE 時(shí)鐘
HSE 時(shí)鐘指的是來(lái)源于外部晶振的時(shí)鐘源。它一般可以由兩個(gè)時(shí)鐘源來(lái)提供:(1)HSE 外部晶振/陶瓷諧振器(2)HSE 外部時(shí)鐘(比如:8M、25M)
參見下圖:
1.3、主 PLL 時(shí)鐘
STM32F4xx 器件具有兩個(gè) PLL:
(1)主 PLL (PLL) 由 HSE 或 HSI 振蕩器提供時(shí)鐘信號(hào),并具有兩個(gè)不同的輸出時(shí)鐘:
1)第一個(gè)輸出用于生成高速系統(tǒng)時(shí)鐘(最高達(dá) 168 MHz)
2)第二個(gè)輸出用于生成 USB OTG FS 的時(shí)鐘 (48 MHz)、隨機(jī)數(shù)發(fā)生器的時(shí)鐘 (48 MHz) 和 SDIO 時(shí)鐘 (48 MHz)。
(2)專用 PLL (PLLI2S) 用于生成精確時(shí)鐘,從而在 I2S 接口實(shí)現(xiàn)高品質(zhì)音頻性能。注意:在系統(tǒng)復(fù)位后,默認(rèn)系統(tǒng)時(shí)鐘為 HSI。在直接使用 HSI 或者通過 PLL 使用時(shí)鐘源來(lái)作為系統(tǒng)時(shí)鐘時(shí),該時(shí)鐘源無(wú)法停止。
2、時(shí)鐘樹
STM2F4的時(shí)鐘樹如下圖所示:
從上圖中可以看到,系統(tǒng)的時(shí)鐘來(lái)源可以通過選擇器選擇,然后通過預(yù)分頻器配置 AHB 頻率、高速 APB (APB2) 和低速 APB (APB1)。
其中,AHB 域的最 大頻率為 168 MHz,高速 APB2 域的最大允許頻率為 84 MHz,低速 APB1 域的最大允許頻 率為 42 MHz。不同的時(shí)鐘分給不同的外設(shè)使用,從而滿足整個(gè)系統(tǒng)的各個(gè)外設(shè)的正常工作所需的時(shí)鐘條件。
3、配置系統(tǒng)時(shí)鐘
3.1、系統(tǒng)時(shí)鐘有關(guān)寄存器
由于STM32系統(tǒng)復(fù)位之后默認(rèn)使用的是HSI時(shí)鐘,所以需要切換為其他時(shí)鐘的話就需要自己做些配置,也就是需要設(shè)置相應(yīng)的寄存器,從而切換時(shí)鐘的輸入來(lái)源。STM32F4切換時(shí)鐘所涉及到的寄存器如下面所示:
(1)RCC 時(shí)鐘配置寄存器 (RCC_CFGR)
通過 RCC_CFGR 的 SW1、SW2兩位進(jìn)行設(shè)置,這兩位的選項(xiàng)取值如下:
(2)RCC 時(shí)鐘控制寄存器 (RCC_CR)
通過這三個(gè)位的置位可以選擇使用的時(shí)鐘,操作如下:
3.2、使用系統(tǒng)的默認(rèn)配置
配置系統(tǒng)的時(shí)鐘,除了使用相關(guān)寄存器進(jìn)行設(shè)置,也可以使用官方提供的固件文件里面的初始化函數(shù)進(jìn)行修改,即可以完成時(shí)鐘的修改和設(shè)置。首先,有一個(gè)差異我們要知道的:STM32F4 與 STM32F10X 有所不同,STM32F4 的時(shí)鐘已經(jīng)默認(rèn)配置好,上電直接可以正常使用。
通過查看啟動(dòng)代碼文件:startup_stm32f4xx.s,即可以看出。如下:
可以看出:
3.3、系統(tǒng)時(shí)鐘配置所用到的相關(guān)宏定義
system_stm32f4xx.c文件中提供幾個(gè)宏定義用于設(shè)置時(shí)鐘參數(shù),如下:
晶振頻率設(shè)置則是在文件 stm32f4xx.h 中進(jìn)行設(shè)置:
1)外部晶振:
HSE_VALUE:這個(gè)值是設(shè)置外部晶振的頻率的。比如25000000表示的是外部晶振選擇的25M。如果外部晶振是8M,那這個(gè)值就是8000000。以此類推!
2)內(nèi)部晶振:
HSI_VALUE:這個(gè)值是設(shè)置外部晶振的頻率的。
綜合上面的,可以得出默認(rèn)配置中:
3.4、SystemInit( )函數(shù)
?
3.5、SetSysClock( )函數(shù)
在SetSysClock函數(shù)中,配置了系統(tǒng)時(shí)鐘,PLL倍頻以及分頻系數(shù):
?
?
SystemIint 和 SetSysClock都是官方固件文件中提供的,直接調(diào)用即可完成時(shí)鐘的選擇和設(shè)置。
3.6、自行配置時(shí)鐘
除了可以調(diào)用官方提供的時(shí)鐘設(shè)置函數(shù)接口外,如果想要自己自行設(shè)置相關(guān)的時(shí)鐘操作,也是可以的。
假設(shè)外部晶振25MHz,系統(tǒng)時(shí)鐘要配置為168MHz,則可以根據(jù)自己所選用的外部晶振大小和需要進(jìn)行配置,相關(guān)代碼如下:
評(píng)論
查看更多