Cortex-M3的內核中包含一個SysTick時鐘。SysTick 為一個24位遞減計數器,SysTick設定初值並使能後,每經過1個系統時鐘周期,計數值就減1。計數到0時,SysTick計數器自動重裝初值並繼續計數,同時內部的COUNTFLAG標誌會置位,觸發中斷(如果中斷使能)。
在STM32的應用中,使用Cortex-M3 內核的SysTick作為定時時鐘,設定每一毫秒產生一次中斷,在中斷處理函數裡對N減一,在Delay(N)函數中循環檢測N是否為0,不為0則進行循環等待;若為0則關閉SysTick時鐘,退出函數。
本文引用地址:http://www.eepw.com.cn/article/201611/322078.htm外部晶振為8MHz,9倍頻,系統時鐘為72MHz,SysTick的最高頻率為9MHz(最大為HCLK/8),在這個條件下,把SysTick 效驗值設置成9000,將SysTick 時鐘設置為9MHz, 就能夠產生1ms的時間基值,即SysTick產生1ms的中斷。
延遲時間將不隨系統時鐘頻率改變。
固件庫(ST)中SysTick的相關函數:
1、SysTick_CounterCmd(
2、SysTick_ITConfig (
3、SysTick_CLKSourceConfig( ) //設置SysTick時鐘源。
4、SysTick_SetReload ( )
5、SysTick_GetCounter( )
6、SysTick_GetFlagStatus( ) //檢測測定的SysTick是否被標記
初始化相關模塊:
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_ITConfig(DISABLE);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
中斷處理:
{
延時代碼:
}
應用代碼:
Delay(300); // 延時 300ms