SysTick 系統定時器

2021-09-07 12:22:31 字數 2223 閱讀 5253

本章參考資料《arm cortex™-m4f 技術參考手冊》 -4.5 章節 systick timer(stk), 和

4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為

systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core_cm4.h 這個頭

檔案中實現。所以學習 systick 的時候可以參考這兩個資料,乙個是文件,乙個是原始碼。

systick 簡介

systick—系統定時器是屬於 cm4 核心中的乙個外設,內嵌在 nvic 中。系統定時器

是乙個 24bit 的向下遞減的計數器,計數器每計數一次的時間為 1/sysclk,一般我們設定

系統時鐘 sysclk 等於 180m。當重裝載數值暫存器的值遞減到 0 的時候,系統定時器就

產生一次中斷,以此迴圈往復。

因為 systick 是屬於 cm4 核心的外設,所以所有基於 cm4 核心的微控制器都具有這個

系統定時器,使得軟體在 cm4 微控制器中可以很容易的移植。系統定時器一般用於作業系統,

用於產生時基,維持作業系統的心跳。

systick 屬於核心的外設,有關的暫存器定義和庫函式都在核心相關的庫檔案

core_cm4.h 中。

用韌體庫程式設計的時候我們只需要呼叫庫函式 systick_config()即可,形參 ticks 用來設

置重裝載暫存器的值,最大不能超過重裝載暫存器的值 224,當重裝載暫存器的值遞減到 0

的時候產生中斷,然後重裝載暫存器的值又重新裝載往下遞減計數,以此迴圈往復。緊隨

其後設定好中斷優先順序,最後配置系統定時器的時鐘為 180m,使能定時器和定時器中斷,

這樣系統定時器就配置好了,乙個庫函式搞定。

systick_config()庫函式主要配置了 systick 中的三個暫存器: load、 val 和 ctrl,

有關具體的部分看**注釋即可。其中還呼叫了韌體庫函式 nvic_setpriority()來配置系統

定時器的中斷優先順序,該庫函式也在 core_m4.h 中定義,

原型如下:

1 __static_inline void nvic_setpriority(irqn_type irqn, uint32_t priority)

2 else

10 }

因為 systick 屬於核心外設,跟普通外設的中斷優先順序有些區別,並沒有搶占優先順序

和子優先順序的說法。在 stm32f429 中,核心外設的中斷優先順序由核心 scb 這個外設的寄

存器: shprx( x=1.2.3)來配置。有關 shprx 暫存器的詳細描述可參考《 cortex-m4 核心

程式設計手冊》 4.4.8 章節。

在系統定時器中,配置優先順序為

(1ul << __nvic_prio_bits) - 1ul)

,其中巨集

__nvic_prio_bits 為 4

,那計算結果就等於

15,可以看出系統定時器此時設定的優先順序

在核心外設中是最低的。

systick 初始化函式由使用者編寫,裡面呼叫了 systick_config()這個韌體庫函式,通過

設定該韌體庫函式的形參,就決定了系統定時器經過多少時間就產生一次中斷。

systick 中斷時間的計算

systick 定時器的計數器是向下遞減計數的,計數一次的時間 tdec=1/clkahb,當重灌

載暫存器中的值 valueload 減到 0 的時候,產生中斷,可知中斷一次的時間

tint=valueload * tdec 中斷= valueload/clkahb,其中 clkahb =180mhz。如果設定為

180,那中斷一次的時間 tint=180/180m=1us。不過 1us 的中斷沒啥意義,整個程式的重心

都花在進出中斷上了,根本沒有時間處理其他的任務。

systick_config(systemcoreclock / 100000))

systick_config()的形我們配置為 systemcoreclock / 100000=180m/100000=1800,

從剛剛分析我們知道這個形參的值最終是寫到重裝載暫存器 load 中的,從而可知我們現

在把 systick 定時器中斷一次的時間 tint=1800/180m=10us。

SysTick 系統定時器

本章參考資料 arm cortex m4f 技術參考手冊 4.5 章節 systick timer stk 和 4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為 systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core...

系統定時器SysTick

在lpc824內部有乙個特殊的定時器 系統定時器 systick 它位於cortex m0 核心裡面,是arm核心的一部分,主要用來給作業系統提供時間片輪轉的定時,一般固定為10ms的定時,所以中文也稱它為 嘀嗒 定時器 也稱 心跳 定時器 在不跑作業系統時,可以把它當作普通定時器來用,一般用來進行...

SysTick系統定時器

1.systick定時器介紹 systick定時器也叫systick滴答定時器,它是cortex m3核心的乙個 外設,被嵌入在 nvic 中。它是乙個24 位向下遞減的定時器,每計數一 次所需時間為1 systick,systick是系統定時器時鐘,它可以直接取自 系統時鐘,還可以通過系統時鐘8分...