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...