一、SysTick
STM32內(nèi)核中有一個(gè)系統(tǒng)定時(shí)器,它是一個(gè)24位遞減計(jì)數(shù)器。工作原理是系統(tǒng)時(shí)基定時(shí)器設(shè)定初值并使能后,每經(jīng)過1個(gè)系統(tǒng)時(shí)鐘周期,計(jì)數(shù)值就減,當(dāng)計(jì)數(shù)值減到0時(shí),系統(tǒng)定時(shí)器會(huì)重新自動(dòng)重裝初值,并繼續(xù)下一次計(jì)數(shù),同時(shí)內(nèi)部的COUNTFLAG標(biāo)志位會(huì)置位。觸發(fā)中斷。
在很早的固件庫中,提供了很多函數(shù),來對SysTick進(jìn)行設(shè)置,但是到了3.5版本的標(biāo)準(zhǔn)固件庫中,移除了相關(guān)驅(qū)動(dòng)函數(shù),用戶必須調(diào)用CMSIS 定義的函數(shù),其中CMSIS只提供了一個(gè)Systick設(shè)置的函數(shù),替代了STM32原來有的所有的驅(qū)動(dòng)函數(shù),這樣做的目的,可能是簡化Systick 的設(shè)置,可是降低了用戶對SysTick的可控性。
在CMSIS中提供的函數(shù)是
其中這個(gè)函數(shù)定義在Core_cm3.h中 ,源代碼如下所示:
從上面的函數(shù)中可以看出,這個(gè)函數(shù)把Systick的初值,中斷優(yōu)先級,使能中斷,開啟定時(shí)器都完成了。大大簡化了程序。
其中ticks 代表的是初值。例如系統(tǒng)時(shí)鐘是72Mhz 那么要產(chǎn)生1ms的時(shí)基,那么我們可以這樣去寫。
SysTick_Config(SystemCoreClock/1000);