用SysTick做的延時計時器

2021-09-06 14:35:59 字數 985 閱讀 2019

這個實驗是使用systick中斷方式做延時定時器。主要目的是熟悉下systick的使用。

首先,定義個延時函式,目的是計數

void

delay(__io uint32_t ntime)

void timingdelay_decrement(void

)}

其中timingdelay_decrement是供systick的中斷響應函式呼叫的。每次呼叫就將timingdelay減少1,知道0為止.

delay函式就是一直等著timingdelay 減到0.

然後配置systick定時器。使用系統函式

systick_config(systemcoreclock/1000);

這個函式開啟了systick的中斷,同時也設定了systick的重裝載暫存器。systemcoreclock/1000既是系通時鐘頻率的千分之一。也就是說沒每秒鐘,systick暫存器會裝滿1000次,每次1ms。這就是計時的基礎單位了。當重裝載暫存器裝滿時,就會產生systick中斷,之後我們就在中斷函式中處理timingdelay這個標量了。

在檔案stm32f4xx_it.c中新增一點systick的中斷處理函式:

extern

void timingdelay_decrement(void);

void systick_handler(void

)

這樣,延時函式就配置好了。

在main函式中的用法:

int main(void

)

while (1)

}

這裡的不足之處是你不管使用沒有,systick總是會反覆地產生中斷,消耗了一些mcu的資源。當然,如果systick用在os中,作為os的心跳,這個中斷是免不了的。

超時計時器設定

運輸層的超時計時器的超時重傳時間應設定為多大呢?如果把超時重傳時間設定得太短,就會引起很多報文段的不必要的重傳,使網路負荷增大。但若把超時重傳時間設定得過長,則又使網路的空閒時間增大,降低了傳輸效率。tcp 採用了一種自適應演算法,它記錄乙個報文段發出的時間,以及收到相應的確認的時間。這兩個時間之差...

Flutter 倒計時 計時器的實現

比如傳送簡訊驗證碼,傳送成功後可能要求使用者一段時間內不能再次傳送,這時候我們就需要進行倒計時,時間到了才允許再次操作。為了實現這樣場景的需求,我們需要使用timer.periodic。如下圖 一 引入timer對應的庫 import dart async 二 定義計時變數 class loginp...

00 59秒計時器(利用軟體延時)

1 實驗任務 如下圖所示,在 at89s51 微控制器的p0和 p2埠分別接有兩個共陰數碼管,p0口驅動顯示秒時間的十位,而 p2口驅動顯示秒時間的個位。2 電路原理圖 圖4.11.1 3 系統板上硬體連線 1 把 微控制器系統 區域中的 p0.0 ad0 p0.7 ad7 埠用8芯排線連線到 四路...