時鐘分類
stm32f4的時鐘有很多分支,主要分為主系統(tǒng)的時鐘和一些外設(shè)時鐘,主系統(tǒng)的時鐘又通過AHB分頻,分出了HCLK到AHB總線內(nèi)核的時鐘,cortex系統(tǒng)定時器時鐘,F(xiàn)LCK自由運行時鐘。PHY以太網(wǎng)和USB和看門狗RTC時鐘不使用主系統(tǒng)的時鐘,都是獨立的使用一個內(nèi)部或外部時鐘源。
主要時鐘源
stm32f4有一個內(nèi)部16M高速時鐘HSI和內(nèi)部32K低速時鐘LSI,系統(tǒng)時鐘源可以選用外部的高速時鐘源也可以使用內(nèi)部的高速時鐘HSI,當外部高速時鐘不可用時,內(nèi)部高速時鐘會默認設(shè)置為系統(tǒng)時鐘保證系統(tǒng)的運行。內(nèi)部低速時鐘用來當做看門狗和RTC時鐘的主時鐘源。stm32f4還有兩個時鐘輸出引腳,這兩個引腳通過芯片內(nèi)部的時鐘輸出到其他需要時鐘驅(qū)動的芯片上,這樣可以利用芯片內(nèi)部的時鐘,減少晶振的使用。
時鐘的輸入過程
stm32的時鐘可以選擇外部高速時鐘源HSE和內(nèi)部高速時鐘HSI,當外部時鐘故障是會切換至內(nèi)部的時鐘,系統(tǒng)默認使用內(nèi)部的高速時鐘,由于內(nèi)部時鐘的精度不夠,通常是使用外部的時鐘做系統(tǒng)的時鐘源。
系統(tǒng)時鐘的輸入過程是:內(nèi)部和外部時鐘首先會通過分頻M分頻,到PLL鎖相環(huán)后通過倍頻因子N進行倍頻,PLL再通過P,Q,R分頻輸出。經(jīng)過分頻因子P分頻后輸出到系統(tǒng)時鐘選擇器,然后經(jīng)過AHB PRESC 分頻時鐘提供給HCLK時鐘,系統(tǒng)定時器,F(xiàn)LCK時鐘,和APB2,APB2再通過分頻輸出時鐘給APB1,所以stm32f4的APB2時鐘時比APB的時鐘要快。
例如:25M的外部晶振 -> M分頻25分頻-> 1M -> PLL鎖相環(huán)倍頻N,360倍頻 -> 260M -> 鎖相環(huán)分頻P,2分頻 -> 180M -> 系統(tǒng)時鐘
時鐘輸出
stm32f4有連個引腳MCO1,MCO2用來輸出芯片的內(nèi)部時鐘,外部的芯片可以利用stm32的時鐘來做時鐘源。輸出時鐘的時鐘源可以選擇,HSE外部時鐘,HSI內(nèi)部時鐘,PLL鎖相環(huán)P輸出的時鐘,內(nèi)部低速時鐘LSE,I2S的時鐘 和系統(tǒng)時鐘。輸出時可以對時鐘來源分頻。
時鐘的初始化過程
首先開啟外部時鐘HSE,并等待時鐘穩(wěn)定,然后先對AHB,APB的分頻因子配置,在配置PLL鎖相環(huán)的時鐘輸入源,選擇HSE還是HSI,配置PLL鎖相環(huán)的倍頻因子N,和P,Q,R,然后使能PLL鎖相環(huán),下一步切換系統(tǒng)的時鐘為鎖相環(huán)時鐘,等待系統(tǒng)時鐘切換完成。在使能系統(tǒng)時鐘前必須先配置分頻因子和相關(guān)寄存器,如果先開啟系統(tǒng)時鐘再配置分頻因子和相關(guān)寄存器,在時鐘脈沖來臨時切換狀態(tài)會幾個周期的不穩(wěn)定,所以在使能PLL或切換系統(tǒng)時鐘前先配置分頻因子,和相關(guān)寄存器。
相關(guān)寄存器
1,RCC_CR 時鐘控制寄存器
2,RCC_PLLCFGR 鎖相環(huán)配置寄存器
3,RCC_CFGR 時鐘配置寄存器
RCC_CR寄存器主要是HSE,HSI,PLL,PLLI2S,css的使能控制,和一些狀態(tài)位,當時鐘使能成功是對應(yīng)的狀態(tài)位會置1。
RCC_PLLCFGR 寄存器是鎖相環(huán)的配置寄存器,主要是設(shè)置分頻M的值,倍頻N和輸出的P,Q,R的值。
RCC_CFGR 寄存器主要是設(shè)置系統(tǒng)時鐘的時鐘源,和AHB的分頻因子的值,以及輸出時鐘和RTC的分頻因子的值。
系統(tǒng)在初始化完系統(tǒng)時鐘后就可以正常運行程序了,不過stm32的所以外設(shè)時鐘默認是不開啟的,所以在使用IO引腳或者是外設(shè)功能時,需要開啟相應(yīng)的時鐘,配置相應(yīng)的時鐘頻率,外設(shè)才能正常工作。不開起時鐘外設(shè)是不工作的,只要設(shè)置對應(yīng)的RCC寄存器就可以了。