藍橋杯嵌入式——滴答定時器

藍橋杯嵌入式——滴答定時器

作者:閆永成  QQ:793805481

  在用液晶驅動參考例程編寫程序時,可以發現這個工程裏面還爲我們提供了一個滴答定時器的MS延時函數,達到一個延時的效果。這篇文章,我們就介紹一下滴答定時器。
在這裏插入圖片描述
  SysTick定時器(系統滴答定時器)是一個倒計時定時器,被捆綁在NVIC中,用於產生SYSTICK異常(異常號:15),每1ms產生一次中斷。
中斷函數在:
在這裏插入圖片描述
中斷服務函數:
中斷函數
  因此,調用函數時,也就是每過1ms,TimingDelay的值會自動減1,當TimingDelay不等於0時,不斷循環,直到延時結束。

void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

  至於滴答定時器的相關配置,液晶驅動例程裏邊已經幫我們配置好了,我們直接調用Delay_Ms()就行,當要在main.c文件之外的其他.c文件調用時,我們只需要如下聲明後即可正常調用。

extern void Delay_Ms(u32 nTime);

  比起讓系統循環等待實現延時,直接利用滴答定時器實現延時顯然比較方便。而且,滴答定時器的中斷函數中,還可以寫入其他內容,實現定時等效果。
比如:
在這裏插入圖片描述
關於靜態變量,簡單理解,也就是隻定義一次,在函數調用完成時值會一直被保留。
然後,在main函數中:
在這裏插入圖片描述
就實現了每過50ms,就會自動執行一次KEY_Scan()函數。顯然,這樣比起讓系統循環等待,利用stm32處理程序所用的機器時間去延時更有效。

那麼,在這個中斷函數裏面添加代碼,會不會導致延時不準呢?
答案是,會的,但這對這個定時器的精準度影響是很小的,幾乎可以忽略不計,我們一般不予考慮。


藍橋杯嵌入式比賽中,滴答定時器的應用還是很重要的,我們有必要弄清楚它。這篇文章就介紹到這裏,歡迎大傢俬信提問。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章