天天看點

Systick時鐘

   我們在寫單片機程式時,最常用的一個函數就是延時函數,很多情況下,都需要我們産生一個延時,如果此時,程式對延時的精确程度較高,顯然一般的延時函數并不能滿足我們的需求,那我們該怎麼辦呢?這個時候,Systick定時器就是它發揮作用的時候了。

   什麼是Systick定時器呢?簡而言之,它是stm32内部系統滴答定時器,并且它是24位倒計時定時器,作用就是能夠産生精确的延時時間。當計數到0時,它自動從一個叫做RELOD寄存器中自動加載數值。衆所周知,我們想要驅動定時器,需要一個時鐘才能驅動,而Systick定時器的時鐘比較特殊,它的時鐘來源是系統時鐘。Systick有兩種獲得系統時鐘的方式,一種是直接取自系統時鐘,另一種是将系統時鐘8分頻,然後再指派給Systick定時器。

   Systick定時器是屬于CM3核心的外設,所有基于CM3核心的單片機都具有這個系統定時器。系統定時器一般用于作業系統,用于産生時基,維持作業系統的心跳。

   這裡先來講講Systick最基礎的用法---精确産生一個延時。這裡,就讓它延時1秒鐘吧。Systick還是比較簡單的,因為它隻有四個寄存器。如下:

我們通過systick産生精确的延時,首先,我們要設定重裝載數值。因為,當定時的時間為0時,RELOAD中的數值自動指派給systick。那麼,設定重裝載數值,也就是定時時間為,這裡延時ms為機關,

接着,我們要使能systick,

之後,我們要對定時器清零,

完整代碼如下:

繼續閱讀