本文將介紹SysTick定時器、其工作原理與寄存器、及對應的應用實例
SysTick定時器簡介
首先、我們先解釋下定時器,“定時器”:能夠定時、計數的器件
SysTick稱為系統滴答定時器,它位于Cortex 內核中是一個定時器,可以對輸入的時鐘進行計數、若輸入的時鐘具有周期性的變化,則計數也相當于計時。
系統滴答定時器一般用于操作系統,為操作系統提供時基、維持操作系統的心跳; 系統滴答定時器每過一段時間會產生一個中斷,根據這個特性、操作系統就可以實現時間片的任務調度。
工作原理分析
從上述兩張圖我們可以看出:
系統滴答定時器的時鐘源是從SYSCLK處經過分頻得到的,另外它處于內核中;
重載數值寄存器有24個位、最大值為2^24-1,重載數值寄存器會將其中的數值裝載到定時器中;
當每來一個時鐘脈沖后,定時器會進行減一的操作(計數值-1);
當計數值降為0時,會觸發一個異常; 我們可以在異常處理函數中、自定義功能;
計數值降為0后,會再次重裝載數值;
寄存器講解
以下是寄存器總覽:
以下是SysTick定時器簡單框圖:
以下是SysTick狀態和控制寄存器的說明:
以下是SysTick重裝載值寄存器的說明:
以下是SysTick當前值寄存器的說明:
以下是SysTick校準值寄存器的說明:
該寄存器可以為軟件提供校準信息,由于CMSIS-Core提供了一個名為SystemCoreClock的軟件變量,所以沒有使用SysTick校準寄存器。 系統初始化函數SystemInit()設置了該變量,而且只要系統時鐘配置改變是都會對該變量進行更新。 這種軟件手段比利用SysTick校準值寄存器的硬件方式更加靈活。
應用實例
在SysTick的中斷函數內1ms打印一次日志
void HAL_SYSTICK_Callback(void)
{
static uint32_t i = 0;
i++;
if(i == 1000)
{
printf("1ms\\n");
i = 0;
}
}
-
寄存器
+關注
關注
31文章
5317瀏覽量
120002 -
內核
+關注
關注
3文章
1362瀏覽量
40228 -
時鐘
+關注
關注
10文章
1720瀏覽量
131362 -
定時器
+關注
關注
23文章
3237瀏覽量
114467 -
Systick
+關注
關注
0文章
62瀏覽量
13043
發布評論請先 登錄
相關推薦
評論