環(huán)球報(bào)道:MCU的時(shí)鐘樹講解

2023-06-21 11:05:15 來源:學(xué)嵌入式的釘子君

各位朋友在使用MCU進(jìn)行開發(fā)時(shí),是否有遇到過以下現(xiàn)象:將兩份同樣的程序下載到兩塊相同的MCU,最終運(yùn)行時(shí),發(fā)現(xiàn)其中一塊時(shí)序正常,而另一塊時(shí)序異常,無論是采用定時(shí)器延時(shí) 或 使用通信接口通信,都會(huì)發(fā)現(xiàn)時(shí)鐘速度不正常。別擔(dān)心,通過本次的學(xué)習(xí),也許能解決問題!


(相關(guān)資料圖)

本文將講解MCU中的時(shí)鐘樹,通過分析一款具體型號(hào)的MCU手冊(cè),來說明MCU中的時(shí)鐘的來源以及其作用,分析時(shí)鐘樹對(duì)于編程的影響。

以下內(nèi)容,只表示個(gè)人觀點(diǎn),不一定完全正確,但歡迎大家指正錯(cuò)誤和提出建議,必有重謝。

Part 1

時(shí)鐘樹介紹

單片機(jī)中的時(shí)鐘樹是什么?有什么作用?

筆者認(rèn)為,時(shí)鐘樹是關(guān)注單片機(jī)的時(shí)鐘源和時(shí)鐘的流向的樹狀結(jié)構(gòu)。單片機(jī)開發(fā)工程師通過分析一款單片機(jī)芯片的時(shí)鐘樹,可以獲取到這款芯片中的時(shí)鐘數(shù)目以及各時(shí)鐘作用。當(dāng)芯片工作時(shí)序紊亂時(shí),結(jié)合時(shí)鐘樹分析以及使用示波器等工具,就可以排查出問題的根源。

Part 2

STM32F4xx時(shí)鐘樹分析

本例以STM32F407ZG芯片為例來分析時(shí)鐘樹,此款芯片正常工作時(shí)主頻率為168MHz。打開此款芯片的參考手冊(cè),找到時(shí)鐘樹的圖片。

Step1,找出此款STM32芯片中5個(gè)時(shí)鐘源:低速內(nèi)部時(shí)鐘LSI,低速外部時(shí)鐘LSE,高速內(nèi)部時(shí)鐘HSI,高速內(nèi)部時(shí)鐘HSE,鎖相環(huán)路時(shí)鐘PLL。找出他們后,關(guān)注這5個(gè)時(shí)鐘的來源和流向。

Step2,在圖中標(biāo)注這5種時(shí)鐘源的來源和流向。

Step3,對(duì)于每個(gè)時(shí)鐘源逐個(gè)分析,逐個(gè)擊破!

LSI,低速內(nèi)部時(shí)鐘(位于圖片上方,用藍(lán)線標(biāo)記),時(shí)鐘來源是MCU內(nèi)部的RC振蕩電路,頻率為32KHz。

作用:驅(qū)動(dòng)獨(dú)立看門狗, 也可以驅(qū)動(dòng)RTC(實(shí)時(shí)時(shí)鐘,本質(zhì)還是一款定時(shí)器,一般不用LSI驅(qū)動(dòng)RTC)

2.LSE,低速外部時(shí)鐘(位于圖片上方,用綠線標(biāo)記),時(shí)鐘來源是MCU的OSC32IN和OSC32OUT連接晶振電路提供的時(shí)鐘信號(hào),在本開發(fā)板使用的32.768kHz(LSE一般也使用32.768kHz)。

作用:驅(qū)動(dòng)RTC(一般用LSE驅(qū)動(dòng)RTC,因?yàn)镽TC內(nèi)部可以達(dá)到32768分頻,故產(chǎn)生的計(jì)數(shù)頻率為1Hz)

補(bǔ)充:LSE的時(shí)鐘可以通過MCO1引腳輸出,用于測(cè)試外部低速晶振電路是否正常。

3.HSI,高速內(nèi)部時(shí)鐘(位于圖片中心,用紫線標(biāo)記),時(shí)鐘來源是MCU內(nèi)部的RC振蕩電路,頻率為16MHz。

作用:提供芯片的主頻(16MHz), 也可以為PLL提供時(shí)鐘輸入。

補(bǔ)充:HSI的時(shí)鐘可以通過MCO1引腳輸出,用于測(cè)試內(nèi)部高速振蕩電路是否正常。

4.HSE,高速外部時(shí)鐘(位于圖片左下,用粉線標(biāo)記),時(shí)鐘來源是MCU的OSC_IN和OSC_OUT連接晶振電路提供的時(shí)鐘信號(hào),在本開發(fā)板使用的25MHz。

作用:驅(qū)動(dòng)RTC , 提供芯片的主頻(25MHz) ,也可以為PLL提供時(shí)鐘輸入。

補(bǔ)充:HSE的時(shí)鐘可以通過MCO1和MCO2引腳輸出,用于測(cè)試外部高速晶振電路是否正常。

5.PLL,鎖相環(huán)路時(shí)鐘(位于圖片左下,用紅線標(biāo)記),時(shí)鐘來源是HSI或HSE。

作用:放大時(shí)鐘來源的頻率,提供芯片主頻(又稱系統(tǒng)時(shí)鐘SYSCLK)。

Part 3

MCU系統(tǒng)時(shí)鐘(主頻)的計(jì)算

考慮到常規(guī)使用STM32時(shí),不會(huì)直接使用HSI和HSE作為芯片的主頻(數(shù)值較小),一般都是用HSE作為PLL的時(shí)鐘輸入,再用PLL時(shí)鐘輸出作為MCU的主頻。

結(jié)合上圖左下角PLL部分框圖中出現(xiàn)的系數(shù),可以得到MCU主頻為:

f ~ SYSCLK~ = (f ~ HSE ~ / M) * (N/P); //單位MHz

故說明MCU的主頻受到外部晶振電路的頻率以及PLL時(shí)鐘電路中的M、N、P的影響。筆者以自己使用的開發(fā)板(信盈達(dá)公司的STM32F407ZG開發(fā)板)為例,做進(jìn)一步的說明。

電路上,用于連接HSE的晶振電路是25MHz,如下圖所示。

故公式中f ~ HSE~數(shù)值為25MHz,另外三個(gè)參數(shù)M、N、P是通過編程配置的,定義于文件system_stm32f4xx.c中(這個(gè)文件是由STM32廠商提供,是建立工程的必要文件之一)。

可以看到其中M為25,N為336,P為2。代入公式

f ~ SYSCLK~ = (f ~ HSE~ / M) * (N/P); //單位MHz

計(jì)算出芯片的主頻為168MHz。如果開發(fā)板上使用的外部晶振電路被替換為8MHz,則需要更改程序中出現(xiàn)的PLL_M的值,將它由25修改為8后,才可以保證MCU繼續(xù)維持168MHz的主頻。

總結(jié):一款MCU的主頻的設(shè)置取決于兩方面:硬件電路設(shè)計(jì)(特別是MCU外部的晶振電路)和軟件設(shè)計(jì)(關(guān)于PLL時(shí)鐘相關(guān)的分頻和倍頻系數(shù),通過程序設(shè)置)。但這一切歸根結(jié)底,還是在于能否正確理解一款芯片時(shí)鐘樹!

留給讀者的思考,下圖為STM32F1xx時(shí)鐘樹,找出它的各個(gè)時(shí)鐘源的來源和流向,分析各自的作用。并思考STM32F1xx系列芯片在時(shí)鐘上和STM32F4xx系列芯片有何不同。

標(biāo)簽:

上一篇:使用STM32單片機(jī)點(diǎn)亮LED
下一篇:最后一頁