stm32-M3有一個系統時基定時器,其為一個24位遞減計數器。系統時基定時器設置初值並使能後,每經過一個系統時鐘周期,計數器就減一,當計數器遞減到0時,系統時基定時器自動重裝載初值,並繼續向下計數,同時內部的COUNTFLAG標志會置位,觸發中斷。
系統時基定時器功能簡單,只能提供一個時基定時器,作為滴答時鐘。在外部晶振8MHZ,通過PLL9倍頻,系統時鐘為72MHz,系統時鐘定時器的遞減頻率可以設為9MHz(HCLK/8),在這個條件下,把系統定時器的初值設置為90000,就能夠產生10ms的時間基值。如果開啟中斷,則產生10ms的中斷。值得欣慰的是時基定時器的中斷並不需要清除中斷位,系統會自動清除。
下面通過一個簡單的程序,讓燈1s跳變一次。
[cpp]
void SysTick_Configuration(void)
{
/* Configure HCLK clock as SysTick clock source */
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //系統時鐘8分頻
/* SysTick interrupt each 1000 Hz with HCLK equal to 72MHz */
SysTick_SetReload(90000); //周期10ms
/* Enable the SysTick Interrupt */
SysTick_ITConfig(ENABLE); //打開中斷
/* Enable the SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Enable); //允許計數
}
void SysTickHandler(void)
{
num++;
if(num == 100)
{ num = 0; //計數器清0
LED ();//LED跳變函數
}
}
系統時基定時器是一個很方便的定時器,沒有TIM定時器那麼麻煩,使用起來很方便,可以進行一些簡單的定時。