1.定時器主要由時鍾源、分頻器、基准時鍾、計數器和重裝載值寄存器組成
2.單片機定時器都是通過計數來實現計時, 而滴答定時器是Cortex-M3內核自帶的一個24位向下計數的定時器
3.SysTick定時器被捆綁在NVIC中, 用於產生SysTick異常。 常用來做延時或者實時系統的心跳時鍾。
4.SysTick定時器就是系統滴答定時器, 一個24 位的倒計數定時器, 計到0 時, 將從RELOAD 寄存器中自動重裝載定時初值。 只要不把它在SysTick 控制及狀態寄存器中的使能位清除, 就永不停息, 即使在睡眠模式下也能工作。
5。滴答定時器的寄存器介紹
(1)控制及狀態寄存器STK_CTR ---用來選擇時鍾源(CLKSOURCE)和標志位的判斷(COUNTFLAG)及滴答定時器異常請求使能(TICKINT)和定時器使能(ENABLE)。
(2)重裝載數值寄存器STK_LOAD----決定計數的個數( 周期) 。
(3)當前值寄存器STK_VAL-------------實際計數的寄存器。
例如: 實現1ms計時時間, 定時器時鍾頻率為
72MHz,使用內核時鍾( FCLK) , STK_LOAD寄存器為計
72000個數實現1ms計時。

void Delay_Init(void) { // SysTick->VAL = 0;//計數器清0 // //使能計數器 中斷 內核時鍾 // SysTick->CTRL |=(1<<0)|(1<<1)|(1<<2); // SysTick->LOAD = 72000-1; // NVIC_SetPriority(SysTick_IRQn,0xf); // 11 11
if(SysTick_Config(72000)==1) { while(1); //錯誤
} } /* 函數名稱:Delay_ms 函數功能:ms延時 函數參數:time -- 延時時間 函數返回值:無 */
void Delay_ms(uint32_t time) { uint32_t nowtime = runtime; while(runtime < nowtime + time); }
可以借由此滴答時鍾進行時間片的實驗

uint32_t runtime = 0; //記錄系統運行的時間
uint32_t ledrun[2]={0,300}; //ledrun[0] -- 起始時間 //ledrun[1] -- 結束時間
uint32_t beeprun[2] = {0,500}; uint32_t keyrun[2] = {0,10}; // 1ms產生一次中斷
void SysTick_Handler(void) { runtime++; ledrun[0]++; beeprun[0]++; keyrun[0]++; }
Systick庫函數相關函數