系統時鐘 SysTick

2021-09-17 01:13:18 字數 1452 閱讀 2175

cm3的核心中包含乙個systick時鐘。systick為乙個24位的遞減計數器,systick設定初值並使能後,每經過1個系統時鐘週期,計數值就減1。當計數到0後,systick計數器自動重灌初值並繼續計數,同時內部的countflag標誌會被置1,觸發中斷。中斷響應屬於nvic異常,異常號為15

<1> ctrl 暫存器

ctrl 是 systick 定時器的控制及狀態暫存器。其相應位功能如下:

注:clksource 位是用於選擇 systick 定時器時鐘**,如果該位為 1,表示其時鐘是由系統時鐘直接提供即 72m。如果為 0,表示其時鐘是由系統時鐘八分頻後提供即 72/8=9m。

<2> load 暫存器

load 是 systick 定時器的重裝載數值暫存器。其相應位功能如下:

因為 stm32f1 的 systick 定時器是乙個 24 位遞減計數器,因此重裝載寄存

器中只使用到了低 24 位,即 bit0-bit23。當系統復位時,其值為 0。

<3> val 暫存器

val 是 systick 定時器的當前數值暫存器。其相應位功能如下:

同樣只有 bit0-bit23 有效,復位時值為 0

<4> calib 暫存器

calib 是 systick 定時器的校準數值暫存器。其相應位功能如下:

此暫存器在定時實驗中不需要使用,可以不用了解。

<1> 設定systick定時器的時鐘源

<2> 設定systick的重灌初始值(如果需要中斷,就將中斷使能開啟)

<3> 清零systick定時器當前計數器的值

<4> 開啟systick定時器

static u16 fac_ms=0;							//ms延時倍乘數

//初始化延遲函式

//systick的時鐘固定為ahb時鐘的1/8

//sysclk:系統時鐘頻率

void systick_init(u8 sysclk)

void delay_ms(u16 nms)

while((temp&0x01)&&!(temp&(1<<16))); //等待時間到達

systick->ctrl&=~systick_ctrl_enable_msk; //關閉計數器

systick->val =0x00; //清空計數器

}

基礎實驗4 Systick時鐘計時實驗

實驗目的 掌握systick時鐘計時的方法。實驗現象 ld5指示燈以1s時間間隔閃爍。int main void user code end 3 weak void hal delay uint32 t delay while hal gettick tickstart wait gpio輸出寫函式...

SysTick 系統定時器

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

SysTick 系統定時器

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