關(guān)于Systick的時鐘問題 對于我這個初學(xué)者來說,時鐘很重要,也是最容易搞混的,所以學(xué)習(xí)這部分,我又一遍一遍的去理解STM32內(nèi)的各種時鐘。那么第一個我認(rèn)為要明確是,STM32為了實現(xiàn)低功耗,當(dāng)你某個外設(shè)不使用的時候,便可以將這個外設(shè)的時鐘關(guān)掉。所以,相反在使用外設(shè)時,一定要把相應(yīng)的外設(shè)時鐘開啟。 在STM32中,驅(qū)動系統(tǒng)時鐘的時鐘和系統(tǒng)時鐘不是一個概念,通過手冊介紹可以看出: 三種不同的時鐘源可被用來驅(qū)動系統(tǒng)時鐘(SYSCLK): ● HSI振蕩器時鐘 高速內(nèi)部時鐘 ● HSE振蕩器時鐘 高速外部時鐘 ● PLL時鐘 這些設(shè)備有以下2種二級時鐘源: ● 40kHz低速內(nèi)部RC,可以用于驅(qū)動獨立看門狗和通過程序選擇驅(qū)動RTC。RTC用于從停機/待機模式下自動喚醒系統(tǒng)。 ● 32.768kHz低速外部晶體也可用來通過程序選擇驅(qū)動RTC(RTCCLK)。 并且通過手冊上的結(jié)構(gòu)圖也可以清楚地了解,以上都是用來驅(qū)動系統(tǒng)時鐘的。也就是說HSI,HSE,PLL時鐘等產(chǎn)生了系統(tǒng)時鐘SYSCLK,這個時鐘是最開始的。 那么,在Systick的時鐘設(shè)置上有兩種模式: 1,外部時鐘,HCLK/8 2,內(nèi)部時鐘 ,HCLK 那么HCLK是從哪里來的呢,我們再看手冊上的結(jié)構(gòu)圖,晶振時鐘進(jìn)來之后,來驅(qū)動系統(tǒng)時鐘SYSCLK,SYSCLK并沒有直接用來驅(qū)動外設(shè),而是要經(jīng)過AHB預(yù)分頻器來調(diào)整芯片使用者的時鐘,那么經(jīng)過AHB預(yù)分頻出來的時鐘就叫做HCLK,到這里終于知道了HCLK的來歷吧。那么,在系統(tǒng)初始化的時候,我們設(shè)置RCC時,就可以根據(jù)手冊,來設(shè)置我們所需要的時鐘了。 如果你仔細(xì)看數(shù)據(jù)手冊的話,會發(fā)現(xiàn)還有個時鐘,就在Systick下面,它叫做FCLK,STM32手冊上說這是CM3的自由時鐘(我看到這里,本來前面的時鐘還搞得清楚,但是這里之后又不明白了,于是查看CM3技術(shù)參考手冊),于是找到如下一段解釋FCLK的話: Free running processor clock, used for sampling interrupts and clocking debug blocks. FCLK 看完也是半懂不懂得,只是知道這個時鐘跟中斷,睡眠喚醒有關(guān),于是在往下面看: FCLK and HCLK are synchronous to each other. FCLK is a free running version of 這里說了HCLK與FCLK的關(guān)系,我英文不好,理解為FCLK與HCLK并需相等,而且更重要的是要同步。 我想到這里,大家應(yīng)該可以初步理解一點了,我是這么認(rèn)為的,HCLK是可以驅(qū)動各種外設(shè)的時鐘,而這些外設(shè)由于一些需要或者操作可以產(chǎn)生中斷等信號,這個信號要到CM3內(nèi)核中進(jìn)行處理,如果CM3內(nèi)核的時鐘與這些外設(shè)的時鐘不同步,那么可以設(shè)想外設(shè)的中斷請求可能會由于不同步而導(dǎo)致內(nèi)核處理延誤,中斷不能得到及時響應(yīng),這要是發(fā)生在對要求實時性很高的情況下,會造成嚴(yán)重的后果。這是對這二者同步的理解。但是同樣會問,那么直接將HCLK接過來就可以,還要FCLK做什么,還是理解的不透徹,于是在看下面的文字,看樣子跟電源管理有關(guān)。而且這個FCLK在睡眠模式中是必不可少的,似乎在睡眠的時候,只有FCLK在運行,并且還要檢測中斷,F(xiàn)CLK與SLEEPING通過決定著HCLK。(還是不太懂,求高人指點) |
|