分享一個簡單易用的軟件定時器模塊(MultiTimer)——基於keil+stm32f103zet+hal庫(裸機實現)


公眾號上看到一個比較好的一個github項目:https://github.com/0x1abin/MultiTimer

今天看了看,簡單的,就移植了~

且看文檔的說明,

=================================

分享一個簡單易用的軟件定時器模塊——MultiTimer。源碼地址:

https://github.com/0x1abin/MultiTimer

簡介

MultiTimer 是一個軟件定時器擴展模塊,可無限擴展你所需的定時器任務,取代傳統的標志位判斷方式, 更優雅更便捷地管理程序的時間觸發時序。

使用方法

1、先申請一個定時器管理handle

struct Timer timer1;

2、初始化定時器對象,注冊定時器回調處理函數,設置定時時間(ms),循環定時觸發時間

timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat);

3、啟動定時器

timer_start(&timer1);

4、設置1ms的硬件定時器循環調用 timer_ticks() 以提供時間基准

void HAL_SYSTICK_Callback(void){ timer_ticks();}

5、在主循環調用定時器后台處理函數

int main() 
{
timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop 
timer_start(&timer1);

timer_init(&timer2, timer2_callback, 50, 0); //50ms delay

timer_start(&timer2);

  while(1)
  {
...
    timer_loop();

  }
}

 ============================================

移植很簡單,

新建stm32的cubemx工程,生成keil5工程,然后添加源碼MultiTimer,在main函數中也實例,因此可以參考。

注意頭文件要添加。

我的工程截圖如下:

1、添加頭文件

 

 2、定義handle

 

 3、初始化,並注冊定時任務函數

 

 4、啟動while循環

 

 5、重新定義systick回調函數,去掉__weak

 

6、定時任務函數

 

7、編譯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM