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