Ⅰ、寫(xiě)在前面
最近有很多朋友問(wèn):1.我的USART串口打印出來(lái)的數(shù)據(jù)是亂碼?2.我的TIM定時(shí)器延時(shí)或定時(shí)不準(zhǔn)確?
常見(jiàn)可能原因:
1.晶振問(wèn)題:外部晶振不起振、或頻率與配置不匹配。
2.軟件問(wèn)題:分頻、倍頻、時(shí)鐘源選擇等。
總結(jié)來(lái)說(shuō),主要還在于軟件的問(wèn)題。因?yàn)榧词箾](méi)有外部晶振,也可以使用內(nèi)部晶振。
其實(shí),軟件的問(wèn)題是容易得到解決的,只要你了解了STM32時(shí)鐘配置里面具體內(nèi)容就知道了。
關(guān)于本文的詳細(xì)內(nèi)容請(qǐng)看下面章節(jié)
Ⅱ、本文要點(diǎn)
要了解時(shí)鐘的配置,就需要知道它在哪里配置,也就是還需要了解軟件執(zhí)行的流程。
1.軟件流程
說(shuō)軟件流程是讓大家知道系統(tǒng)時(shí)鐘配置的位置。不管是使用寄存器開(kāi)發(fā),還是使用庫(kù)(標(biāo)準(zhǔn)庫(kù)、HAL庫(kù))開(kāi)發(fā)STM32,工程中基本上都有“startup_stm32fxxxxx.s”這么一個(gè)啟動(dòng)文件。
在線調(diào)試的朋友應(yīng)該知道,你點(diǎn)一下復(fù)位按鈕,軟件會(huì)跳轉(zhuǎn)到下圖的位置,其實(shí)可以看到復(fù)位之后第一個(gè)執(zhí)行的函數(shù)就是【SystemInit】。說(shuō)到這里,應(yīng)該明白為什么我們?cè)趍ain函數(shù)開(kāi)始沒(méi)有看見(jiàn)時(shí)鐘配置相關(guān)的函數(shù)了吧,程序是在復(fù)位后立馬配置的時(shí)鐘。
2.時(shí)鐘配置位置
使用庫(kù)庫(kù)(標(biāo)準(zhǔn)庫(kù)、HAL庫(kù))開(kāi)發(fā)STM32的朋友,在工程中都可能會(huì)看到“system_stm32fxxx.c”這么一個(gè)文件,這個(gè)文件里面代碼主要的功能就是配置STM32的系統(tǒng)時(shí)鐘。
上面啟動(dòng)文件中說(shuō)到的【SystemInit】函數(shù)就是在這個(gè)文件里面,【SystemInit】函數(shù)里面就是配置系統(tǒng)時(shí)鐘的具體內(nèi)容。配置系統(tǒng)時(shí)鐘主要就是時(shí)鐘源選擇、分頻、倍頻等。
注意:STM32有多系列芯片,這里【SystemInit】函數(shù)里面代碼的內(nèi)容也因此不同。
3.外部晶振頻率、系統(tǒng)時(shí)鐘頻率
對(duì)于初學(xué)者,容易受到影響的就是兩個(gè)參數(shù):HSE_VALUE(外部晶振頻率)、SystemCoreClock(系統(tǒng)時(shí)鐘)。這個(gè)兩個(gè)參數(shù)在ST提供的庫(kù)中都有一個(gè)參考值,一般的開(kāi)發(fā)板都是按照參考值設(shè)計(jì)的晶振,所以不用修改。但如果不同,那么就要修改。位置分別在“stm32fxxx.h”和“system_stm32fxxx.c”文件下面,如下圖(F4系列為例):
4.時(shí)鐘樹(shù)
時(shí)鐘樹(shù)是很好反應(yīng)時(shí)鐘時(shí)鐘源選擇、分頻、倍頻的一個(gè)框圖,要深入理解,請(qǐng)下載相關(guān)參考手冊(cè)查看RCC章節(jié)的時(shí)鐘樹(shù),下面截取部分系列芯片時(shí)鐘樹(shù)圖:
5.MCO時(shí)鐘輸出
驗(yàn)證時(shí)鐘配置是否正確的方法可以通過(guò)MCO輸出時(shí)鐘,用示波器檢測(cè)一下就知道了。我前面提供的軟件工程中有一段代碼(如下圖),主要就是MCO時(shí)鐘輸出的代碼。
Ⅲ、說(shuō)明
需要深入掌握STM32系統(tǒng)時(shí)鐘配置的內(nèi)容,還需要你自己認(rèn)真閱讀以下源代碼(建議看一下注釋說(shuō)明)。官方提供的代碼從命名上都是很容易理解的。
評(píng)論
查看更多