STM32學(xué)習(xí)006_Systick使用(一)
Systick是STM32中特有的系統(tǒng)時鐘
Systick有兩個功能:
1.可以產(chǎn)生精確延時;
2.可以提供給系統(tǒng)一個單獨的時鐘節(jié)拍。
一般延時程序:
DELAY(N)
{ for( i=0 ; i<=x ; i++ ) ;
}
對于STM32系列的微處理器中,執(zhí)行一條指令只需要幾十ns,進(jìn)行for循環(huán)時,要實現(xiàn)N毫秒延時,那么x的意義非常大,而且由于系統(tǒng)頻率的寬廣,很難計算出延時N毫秒的精確值,那么在一些高速電路中,是不允許的,容易出現(xiàn)問題,很難查找出來。尤其在液晶驅(qū)動中,延時要求非常精確。針對STM32的處理器中,需要重新設(shè)計一個方法實現(xiàn)該功能,來代替DELAY(N)延時;
cortex-m3中包含了一個Systick時鐘,Systick是一個24位的遞減計數(shù)器,設(shè)定初值并使能后,每經(jīng)過1個系統(tǒng)時鐘周期,該計數(shù)器減1,計數(shù)到零時,systick自動重裝初值,并繼續(xù)計數(shù),同時內(nèi)部的COUNTFLAG標(biāo)志位會置1,觸發(fā)中斷(中斷如果使能);
外部晶振是8MHz,9倍頻,系統(tǒng)時鐘為72MHz,systick的最大值為9MHz(最大值為HCLK/8),在這個條件下,如果將計數(shù)器的效驗值設(shè)置為9000,將systick設(shè)置為9MHz,能夠產(chǎn)生1ms的時基值,即systick產(chǎn)生1ms的中斷,
systick時鐘共包含4個寄存器:
1.CTRL COUNTFLAG CLKSOURCE TICOUNT ENABLE
2.LOAD
3.VAL
4.CALIB
利用ST庫函數(shù)設(shè)置Systick的方法
1.調(diào)用SysTick_CountCmd() 失能SysTick計數(shù)器
2.調(diào)用SysTick_ITConfig() 失能SysTick中斷
3.調(diào)用SysTick_CLKSourceConfig() 配置SysTick的時鐘源
4.調(diào)用SysTick_SetReload() 設(shè)置SysTick 的效驗值
5.調(diào)用SysTick_ITConfig() 使能SysTick中斷
6.調(diào)用SysTick_CountCmd() 使能SysTick計數(shù)器
void SysTick_Config() //配置好,并將計數(shù)器使能
{
SysTick_CountCmd(SysTick_CountCmd_DISABLE);
SysTick_ITConfig(DISABLE);
SysTick_CLKSourceConfig( SysTick_CLKSourceConfig_EXTERN);
SysTick_SetReload(SysTick_SetReload_9000);
SysTick_ITConfig(ENABLE);
SysTick_CountCmd(SysTick_CountCmd_ENABLE);
}
延時函數(shù):
void Delay_MS(u16 diy)
{
Delay=diy;
while(Delay);
}
extern vu16 Delay;
void SysTickHandle() /systick中斷服務(wù)程序/
{
Delay--;
}
如果延時較長,那么該延時程序一定程度上還是在耗CPU的資源。