(一)systick定時器介紹
systick定時器也叫systick滴答定時器,它是cortex-m3核心的乙個外設,被嵌入在nvic中。它是乙個24位向下遞減的定時器,每計數一次所需時間為1/systick,systick是系統定時器時鐘,它可以直接取自系統時鐘,還可以通過系統時鐘8分頻後獲取。當定時器計數到0時,將從load暫存器中自動重灌定時器初值,重新向下遞減計數,如此迴圈往復。如果開啟systick中斷的話,當定時器計數到0,將產生乙個中斷訊號。因此只要知道計數的次數就可以準確得到它的延時時間。
(二)systick定時器暫存器
1、ctrl暫存器
ctrl是systick定時器的控制及狀態暫存器。其相應位功能如下:
2、loda暫存器
load是systick定時器的重裝載數值暫存器。其相應位功能如下:
3、val暫存器
val是systick定時器的當前數值暫存器。其相應位功能如下:
4、calib暫存器(用得少)
calib是systick定時器的校準數值暫存器。其相應位功能如下:
(三)systick定時器配置步驟
systick定時器的操作可以分為4步:
1、設定systick定時器的時鐘源,系統時鐘(72m)還是外部時鐘(9m=系統時鐘8分頻),配置ctrl暫存器的clksource數值
2、設定systick定時器的重灌初始值(如果要使用中斷的話,就將中斷使能開啟),loda暫存器和ctrl暫存器的tickint數值
3、清零systick定時器當前計數器的值,val暫存器
4、開啟systick定時器,ctrl暫存器的enable數值
為了實現定時器的功能,自己需要編寫幾個函式
首先定義兩個全域性變數
static u8 fac_us=0;//一微秒需要的計時次數
static u16 fac_ms=0;//一毫秒需要的計時次數
(一)定時器系統初始化函式systick_init()
//sysclk為系統時鐘,預設為72
void systick_init(u8 sysclk)
若出現error: l6218e: undefined symbol systick_clksourceconfig (referred from systick.o).錯誤,檢視2.error:error: l6218e: undefined symbol systick_clksourceconfig_並不傻的袍子-csdn部落格
(二)延時1us函式delay_us()
//微秒定時器函式
//由於load暫存器限制,一次最多延時1864000u s
void delay_us(u32 nus)
while((temp&0x01)&&!(temp&(1<<16)));//判斷ctrl暫存器的enable和countflag的值
//等待時間到達
systick->ctrl&=~systick_ctrl_enable_msk;//關閉計數器,置0
systick->val=0x00;//清空計數器
}
(三)延時1ms函式delay_ms()
//毫秒定時器函式
//由於load暫存器限制,一次最多延時1864ms
void delay_ms(u32 nms)
while((temp&0x01)&&!(temp&(1<<16)));//判斷ctrl暫存器的enable和countflag的值
//等待時間到達
systick->ctrl&=~systick_ctrl_enable_msk;//關閉計數器,置0
systick->val=0x00;//清空計數器
}
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...
系統定時器SysTick
在lpc824內部有乙個特殊的定時器 系統定時器 systick 它位於cortex m0 核心裡面,是arm核心的一部分,主要用來給作業系統提供時間片輪轉的定時,一般固定為10ms的定時,所以中文也稱它為 嘀嗒 定時器 也稱 心跳 定時器 在不跑作業系統時,可以把它當作普通定時器來用,一般用來進行...