STM32學習之SysTick介紹

針對對象:STM32F407ZGT6

 

簡介:

CM3與CM4包含一個系統計數器SysTick,是一個24位倒計數定時器,當計數到0 時,將從RELOAD寄存器中自動重裝載定時初值,只要把它在SysTick->CTRL中的使能位清楚,則一直存在。

寄存器介紹:

對應代碼位於core_cm4.h中

typedef struct
{
    __IO uint32_t CTRL;
    __IO uint32_t LOAD;
    __IO uint32_t VAL;
    __IO uint32_t CALIB;

}SysTick_Type

SysTick控制及狀態寄存器(0xE000_E010):

該寄存器第0位:表示SysTick使能位,0表示關;1表示開;SysTick_CTRL_ENABLE_Mask;

              第1位:表示SysTIck中斷使能位,0,表示關閉中斷;1表示打開中斷;SysTick_CTRL_TICKINT_Mask

             第2位:表示時鐘源選擇位,0,表示HCLK/8;1表示HCLK作爲時鐘源;SysTick_CTRL_SOURCE_Mask;

              第16位:表示計數比較標誌,如果上次讀取本寄存器,計算到了0,則該位置1,如果讀取該位,該位將自動清零。

SysTick的LOAD寄存器:

爲遞減計數,是24位寄存器,最大值爲0xFFFFFF;

SysTick的VAL寄存器:

24位寄存器,讀取時返回當前計數值,寫它則使其清零,同時會清零CTRL寄存器中的COUNTFLAG標誌。

實例程序:


#define SYSCLK   168

void delay_us(uint32_t nus)                    //用於延時微妙級時間
{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    static u8 fac_us = SYSCLK/8;
    uint32_t midtime;
    SysTick->LOAD = nus*fac_us;   //時間加載
    SysTick->VAL = 0x00;          //清空計數器
    do
    {
        midtime = SysTick->CTRL;

    }
     while((midtime&0x01)&&!(midtime&(1<<16)));
     SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Mask;
     SysTick->VAL = 0x00;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章