systick一共有4個暫存器
csr :控制和狀態暫存器。
countflag :標誌位,標誌systick計數器是否已經倒數到0 。0 :還沒有數到0 。1:已經數到0 了。
clksource:時鐘源的選擇。1:systick使用系統核心時鐘。0:可選的外部時鐘(根據不同裝置有不同的時鐘,可以通過檢視晶元手冊得到,kl25裡面是核心時鐘的1/16)
tickint:中斷使能位。1:使能systick中斷。0:計數器數到0不觸發中斷。
enable:計數器是能為。0:計數器禁用。1:計數器執行。
rvr:過載計數器。當計數器倒數到0時,重新從該計數器載入tick值。
cvr:計數器當期的值。存放計數器當前的計數值。
calib:校準計數器。有些晶元廠家會將每一秒的頻率值存放在該暫存器中。tenms代表10ms對應的滴答值。通過查晶元手冊,該區域在kl25裡面該值為0
skew:標誌該出廠值tenms是否精確:0:精確。1:不精確,因為時鐘頻率的原因。
tenms:10ms的滴答值。
通過這3個暫存器我們可以編寫3個函式:
systick_init:systick初始化
systick_trim:systick校準
systick_isr:systick中斷例程。
話不多說:上碼。
//函式名稱:systick_init
//函式返回:無
//引數說明:clock_scr:核心時鐘源的選擇:0:核心時鐘。1:核心時鐘/16。
// systick_unit:systick的每次中斷的時間間隔。單位ms 推薦選用10ms。最大為1000ms,即1s中斷一次。
//功能概要:初始化arm cortex-m處理器核心的systick模組作為系統滴答時鐘。
void systick_init(uint_8 clock_scr, uint_32 systick_unit)
else
//設定計數器過載暫存器數值
syst_rvr = ticks/ 1000*systick_unit;
// 設定 systick優先順序
scb_shpr3 |= scb_shpr3_pri_15(1<<6);
//設定stick中斷到1s的次數
g_ticks=1000/systick_unit-1;
// 使用核心時鐘,倒計時到0時產生systick中斷,使能systick
syst_csr = (clock_scr<
//函式名稱:systick_trim
//函式返回:無
//引數說明:flag: 0表示慢,1表示快
// trim_sec:每一分鐘的秒數之差
//功能概要:校準systick,如果每分鐘慢一秒,syst_rvr就減少48m/6000=8000
// 如果每分鐘快一秒,syst_rvr就增加48m/6000=8000
void systick_trim(uint_32 flag, uint_32 trim_sec)
else
syst_rvr=current_rvr;
// 設定 systick優先順序
scb_shpr3 |= scb_shpr3_pri_15(1<<6);
// 使用核心時鐘,倒計時到0時產生systick中斷,使能systick
syst_csr = current_csr;
}
//函式名稱:systick_isr
//函式返回:無
//引數說明:無
//功能概要:systick定時器中斷服務例程,更新系統滴答計數變數值。
void systick_isr(void)
}
編寫該構件還是有一定的難度的。要想別人看的懂,自己也看的懂,就得封裝一些函式及數值。 構件組裝 模型驅動的構件組裝
第四章 模型驅動的構件組裝 本章提出一種普適性的構件組裝機制,建立起構件與連線件元模型,並對它們的性質進行了總結歸納,在此基礎上建立起構件與連線件元模型的實現。基於dsm的構件組裝,實現了從高層的構件組裝建模到程式 的完整對映。構件通常分為原子構件與組裝產生的復合構件,但本文使用dsm快速生成完整的...
STM32關於Systick定時器
delay ms和delay us支援 os 需要用到的三個巨集定義 值為 1,當 os 還未執行時,該巨集定義值為 0。delay ostickspersec,用於表示 os 的時鐘節拍,即 os 每秒鐘任務排程次數。delay osintnesting,用於表示 os 中斷巢狀級別,即中斷巢狀次...
開發可以復用的構件和利用可以復用的構件進行開發
乙個關於構件復用規程的例子 原則 1,構件是可復用的 供二次開發的軟體,主體可以是源 形式,也可以是二進位制形式,配套相應的文件。2,各專案使用的構件 包括原創構件和第三方構件 是受管理的,都是來自於構件庫中,如果不在構件庫中,要先申請入庫,後使用 3,各項目的code base不存放構件,統一到指...